diff --git a/src/intel/blorp/blorp.c b/src/intel/blorp/blorp.c index ca806875b81..8f0b7be44b3 100644 --- a/src/intel/blorp/blorp.c +++ b/src/intel/blorp/blorp.c @@ -267,8 +267,7 @@ blorp_compile_vs(struct blorp_context *blorp, void *mem_ctx, } struct blorp_sf_key { - enum blorp_shader_type shader_type; /* Must be BLORP_SHADER_TYPE_GFX4_SF */ - + struct brw_blorp_base_key base; struct brw_sf_prog_key key; }; @@ -285,7 +284,7 @@ blorp_ensure_sf_program(struct blorp_batch *batch, return true; struct blorp_sf_key key = { - .shader_type = BLORP_SHADER_TYPE_GFX4_SF, + .base = BRW_BLORP_BASE_KEY_INIT(BLORP_SHADER_TYPE_GFX4_SF), }; /* Everything gets compacted in vertex setup, so we just need a diff --git a/src/intel/blorp/blorp_blit.c b/src/intel/blorp/blorp_blit.c index 281803a190b..c987b04606d 100644 --- a/src/intel/blorp/blorp_blit.c +++ b/src/intel/blorp/blorp_blit.c @@ -1490,7 +1490,8 @@ brw_blorp_get_blit_kernel(struct blorp_batch *batch, struct brw_wm_prog_data prog_data; nir_shader *nir = brw_blorp_build_nir_shader(blorp, mem_ctx, prog_key); - nir->info.name = ralloc_strdup(nir, blorp_shader_type_to_name(prog_key->shader_type)); + nir->info.name = + ralloc_strdup(nir, blorp_shader_type_to_name(prog_key->base.shader_type)); struct brw_wm_prog_key wm_key; brw_blorp_init_wm_prog_key(&wm_key); @@ -2364,7 +2365,7 @@ blorp_blit(struct blorp_batch *batch, isl_format_get_layout(params.src.view.format); struct brw_blorp_blit_prog_key wm_prog_key = { - .shader_type = BLORP_SHADER_TYPE_BLIT, + .base = BRW_BLORP_BASE_KEY_INIT(BLORP_SHADER_TYPE_BLIT), .filter = filter, .sint32_to_uint = src_fmtl->channels.r.bits == 32 && isl_format_has_sint_channel(params.src.view.format) && @@ -2651,7 +2652,7 @@ blorp_copy(struct blorp_batch *batch, dst_layer, ISL_FORMAT_UNSUPPORTED, true); struct brw_blorp_blit_prog_key wm_prog_key = { - .shader_type = BLORP_SHADER_TYPE_COPY, + .base = BRW_BLORP_BASE_KEY_INIT(BLORP_SHADER_TYPE_COPY), .filter = BLORP_FILTER_NONE, .need_src_offset = src_surf->tile_x_sa || src_surf->tile_y_sa, .need_dst_offset = dst_surf->tile_x_sa || dst_surf->tile_y_sa, diff --git a/src/intel/blorp/blorp_clear.c b/src/intel/blorp/blorp_clear.c index 9ae60d3e0dd..994a2fc92a9 100644 --- a/src/intel/blorp/blorp_clear.c +++ b/src/intel/blorp/blorp_clear.c @@ -37,7 +37,7 @@ #pragma pack(push, 1) struct brw_blorp_const_color_prog_key { - enum blorp_shader_type shader_type; /* Must be BLORP_SHADER_TYPE_CLEAR */ + struct brw_blorp_base_key base; bool use_simd16_replicated_data; bool clear_rgb_as_red; }; @@ -52,7 +52,7 @@ blorp_params_get_clear_kernel(struct blorp_batch *batch, struct blorp_context *blorp = batch->blorp; const struct brw_blorp_const_color_prog_key blorp_key = { - .shader_type = BLORP_SHADER_TYPE_CLEAR, + .base = BRW_BLORP_BASE_KEY_INIT(BLORP_SHADER_TYPE_CLEAR), .use_simd16_replicated_data = use_replicated_data, .clear_rgb_as_red = clear_rgb_as_red, }; @@ -65,7 +65,7 @@ blorp_params_get_clear_kernel(struct blorp_batch *batch, nir_builder b; blorp_nir_init_shader(&b, mem_ctx, MESA_SHADER_FRAGMENT, - blorp_shader_type_to_name(blorp_key.shader_type)); + blorp_shader_type_to_name(blorp_key.base.shader_type)); nir_variable *v_color = BLORP_CREATE_NIR_INPUT(b.shader, clear_color, glsl_vec4_type()); @@ -113,7 +113,7 @@ blorp_params_get_clear_kernel(struct blorp_batch *batch, #pragma pack(push, 1) struct layer_offset_vs_key { - enum blorp_shader_type shader_type; + struct brw_blorp_base_key base; unsigned num_inputs; }; #pragma pack(pop) @@ -131,7 +131,7 @@ blorp_params_get_layer_offset_vs(struct blorp_batch *batch, { struct blorp_context *blorp = batch->blorp; struct layer_offset_vs_key blorp_key = { - .shader_type = BLORP_SHADER_TYPE_LAYER_OFFSET_VS, + .base = BRW_BLORP_BASE_KEY_INIT(BLORP_SHADER_TYPE_LAYER_OFFSET_VS), }; if (params->wm_prog_data) @@ -145,7 +145,7 @@ blorp_params_get_layer_offset_vs(struct blorp_batch *batch, nir_builder b; blorp_nir_init_shader(&b, mem_ctx, MESA_SHADER_VERTEX, - blorp_shader_type_to_name(blorp_key.shader_type)); + blorp_shader_type_to_name(blorp_key.base.shader_type)); const struct glsl_type *uvec4_type = glsl_vector_type(GLSL_TYPE_UINT, 4); @@ -1145,7 +1145,7 @@ blorp_nir_bit(nir_builder *b, nir_ssa_def *src, unsigned bit) #pragma pack(push, 1) struct blorp_mcs_partial_resolve_key { - enum blorp_shader_type shader_type; + struct brw_blorp_base_key base; bool indirect_clear_color; bool int_format; uint32_t num_samples; @@ -1158,7 +1158,7 @@ blorp_params_get_mcs_partial_resolve_kernel(struct blorp_batch *batch, { struct blorp_context *blorp = batch->blorp; const struct blorp_mcs_partial_resolve_key blorp_key = { - .shader_type = BLORP_SHADER_TYPE_MCS_PARTIAL_RESOLVE, + .base = BRW_BLORP_BASE_KEY_INIT(BLORP_SHADER_TYPE_MCS_PARTIAL_RESOLVE), .indirect_clear_color = params->dst.clear_color_addr.buffer != NULL, .int_format = isl_format_has_int_channel(params->dst.view.format), .num_samples = params->num_samples, @@ -1172,7 +1172,7 @@ blorp_params_get_mcs_partial_resolve_kernel(struct blorp_batch *batch, nir_builder b; blorp_nir_init_shader(&b, mem_ctx, MESA_SHADER_FRAGMENT, - blorp_shader_type_to_name(blorp_key.shader_type)); + blorp_shader_type_to_name(blorp_key.base.shader_type)); nir_variable *v_color = BLORP_CREATE_NIR_INPUT(b.shader, clear_color, glsl_vec4_type()); diff --git a/src/intel/blorp/blorp_priv.h b/src/intel/blorp/blorp_priv.h index a34d3f42b97..e8dba77cf52 100644 --- a/src/intel/blorp/blorp_priv.h +++ b/src/intel/blorp/blorp_priv.h @@ -233,9 +233,21 @@ enum blorp_shader_type { BLORP_SHADER_TYPE_GFX4_SF, }; +struct brw_blorp_base_key +{ + char name[8]; + enum blorp_shader_type shader_type; +}; + +#define BRW_BLORP_BASE_KEY_INIT(_type) \ + (struct brw_blorp_base_key) { \ + .name = "blorp", \ + .shader_type = _type, \ + } + struct brw_blorp_blit_prog_key { - enum blorp_shader_type shader_type; /* Must be BLORP_SHADER_TYPE_BLIT */ + struct brw_blorp_base_key base; /* Number of samples per pixel that have been configured in the surface * state for texturing from.