blorp: add blorp string in shader keys
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Fri, 2 Apr 2021 13:28:59 +0000 (16:28 +0300)
committerMarge Bot <eric+marge@anholt.net>
Tue, 22 Jun 2021 21:09:25 +0000 (21:09 +0000)
Upon looking at caching the raytracing shader (in particular the
trampoline one) I kind of got afraid that some of the keys used for
blorp would end up matching other keys. This is because blorp keys are
fairly simple. There is no SPIRV module hash included.

This change includes a "blorp" string at the beginning of the queue to
ensure we don't collide with other keys.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8637>

src/intel/blorp/blorp.c
src/intel/blorp/blorp_blit.c
src/intel/blorp/blorp_clear.c
src/intel/blorp/blorp_priv.h

index ca80687..8f0b7be 100644 (file)
@@ -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
index 281803a..c987b04 100644 (file)
@@ -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,
index 9ae60d3..994a2fc 100644 (file)
@@ -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());
index a34d3f4..e8dba77 100644 (file)
@@ -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.