zink: fix gl_SampleMaskIn spirv generation
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Fri, 22 Oct 2021 17:47:16 +0000 (13:47 -0400)
committerMarge Bot <eric+marge@anholt.net>
Tue, 26 Oct 2021 23:34:23 +0000 (23:34 +0000)
the uint[1] -> uint dance is only relevant on the first load, so move
the variable type shuffling inside the create block to avoid breaking successive
loads

fixes #5543

cc: mesa-stable

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13488>

src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c

index 22d4525..6a8c8ec 100644 (file)
@@ -2368,12 +2368,12 @@ static void
 emit_load_uint_input(struct ntv_context *ctx, nir_intrinsic_instr *intr, SpvId *var_id, const char *var_name, SpvBuiltIn builtin)
 {
    SpvId var_type = spirv_builder_type_uint(&ctx->builder, 32);
-   if (builtin == SpvBuiltInSampleMask) {
-      /* gl_SampleMaskIn is an array[1] in spirv... */
-      var_type = spirv_builder_type_array(&ctx->builder, var_type, emit_uint_const(ctx, 32, 1));
-      spirv_builder_emit_array_stride(&ctx->builder, var_type, sizeof(uint32_t));
-   }
    if (!*var_id) {
+      if (builtin == SpvBuiltInSampleMask) {
+         /* gl_SampleMaskIn is an array[1] in spirv... */
+         var_type = spirv_builder_type_array(&ctx->builder, var_type, emit_uint_const(ctx, 32, 1));
+         spirv_builder_emit_array_stride(&ctx->builder, var_type, sizeof(uint32_t));
+      }
       *var_id = create_builtin_var(ctx, var_type,
                                    SpvStorageClassInput,
                                    var_name,