intel/blorp: Add a shader type to make keys more unique
Depending on how the driver using blorp implements its shader caching, there is a small chance of shader collisions due to identical keys between blit and clear programs. Adding a small shader type at the top of the key alleviates this problem. Signed-off-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
This commit is contained in:
@@ -1662,8 +1662,9 @@ blorp_blit(struct blorp_batch *batch,
|
|||||||
params.src.view.swizzle = src_swizzle;
|
params.src.view.swizzle = src_swizzle;
|
||||||
params.dst.view.swizzle = dst_swizzle;
|
params.dst.view.swizzle = dst_swizzle;
|
||||||
|
|
||||||
struct brw_blorp_blit_prog_key wm_prog_key;
|
struct brw_blorp_blit_prog_key wm_prog_key = {
|
||||||
memset(&wm_prog_key, 0, sizeof(wm_prog_key));
|
.shader_type = BLORP_SHADER_TYPE_BLIT
|
||||||
|
};
|
||||||
|
|
||||||
/* Scaled blitting or not. */
|
/* Scaled blitting or not. */
|
||||||
wm_prog_key.blit_scaled =
|
wm_prog_key.blit_scaled =
|
||||||
@@ -1852,8 +1853,9 @@ blorp_copy(struct blorp_batch *batch,
|
|||||||
brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, dst_surf, dst_level,
|
brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, dst_surf, dst_level,
|
||||||
dst_layer, ISL_FORMAT_UNSUPPORTED, true);
|
dst_layer, ISL_FORMAT_UNSUPPORTED, true);
|
||||||
|
|
||||||
struct brw_blorp_blit_prog_key wm_prog_key;
|
struct brw_blorp_blit_prog_key wm_prog_key = {
|
||||||
memset(&wm_prog_key, 0, sizeof(wm_prog_key));
|
.shader_type = BLORP_SHADER_TYPE_BLIT
|
||||||
|
};
|
||||||
|
|
||||||
const struct isl_format_layout *src_fmtl =
|
const struct isl_format_layout *src_fmtl =
|
||||||
isl_format_get_layout(params.src.surf.format);
|
isl_format_get_layout(params.src.surf.format);
|
||||||
|
@@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
struct brw_blorp_const_color_prog_key
|
struct brw_blorp_const_color_prog_key
|
||||||
{
|
{
|
||||||
|
enum blorp_shader_type shader_type; /* Must be BLORP_SHADER_TYPE_CLEAR */
|
||||||
bool use_simd16_replicated_data;
|
bool use_simd16_replicated_data;
|
||||||
bool pad[3];
|
bool pad[3];
|
||||||
};
|
};
|
||||||
@@ -44,9 +45,10 @@ blorp_params_get_clear_kernel(struct blorp_context *blorp,
|
|||||||
struct blorp_params *params,
|
struct blorp_params *params,
|
||||||
bool use_replicated_data)
|
bool use_replicated_data)
|
||||||
{
|
{
|
||||||
struct brw_blorp_const_color_prog_key blorp_key;
|
const struct brw_blorp_const_color_prog_key blorp_key = {
|
||||||
memset(&blorp_key, 0, sizeof(blorp_key));
|
.shader_type = BLORP_SHADER_TYPE_CLEAR,
|
||||||
blorp_key.use_simd16_replicated_data = use_replicated_data;
|
.use_simd16_replicated_data = use_replicated_data,
|
||||||
|
};
|
||||||
|
|
||||||
if (blorp->lookup_shader(blorp, &blorp_key, sizeof(blorp_key),
|
if (blorp->lookup_shader(blorp, &blorp_key, sizeof(blorp_key),
|
||||||
¶ms->wm_prog_kernel, ¶ms->wm_prog_data))
|
¶ms->wm_prog_kernel, ¶ms->wm_prog_data))
|
||||||
|
@@ -178,8 +178,15 @@ struct blorp_params
|
|||||||
|
|
||||||
void blorp_params_init(struct blorp_params *params);
|
void blorp_params_init(struct blorp_params *params);
|
||||||
|
|
||||||
|
enum blorp_shader_type {
|
||||||
|
BLORP_SHADER_TYPE_BLIT,
|
||||||
|
BLORP_SHADER_TYPE_CLEAR,
|
||||||
|
};
|
||||||
|
|
||||||
struct brw_blorp_blit_prog_key
|
struct brw_blorp_blit_prog_key
|
||||||
{
|
{
|
||||||
|
enum blorp_shader_type shader_type; /* Must be BLORP_SHADER_TYPE_BLIT */
|
||||||
|
|
||||||
/* Number of samples per pixel that have been configured in the surface
|
/* Number of samples per pixel that have been configured in the surface
|
||||||
* state for texturing from.
|
* state for texturing from.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user