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:
Jason Ekstrand
2016-10-21 11:30:05 -07:00
parent 1acebeb191
commit 99b436ae5c
3 changed files with 18 additions and 7 deletions

View File

@@ -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, &params.dst, dst_surf, dst_level, brw_blorp_surface_info_init(batch->blorp, &params.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);

View File

@@ -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),
&params->wm_prog_kernel, &params->wm_prog_data)) &params->wm_prog_kernel, &params->wm_prog_data))

View File

@@ -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.
*/ */