zink: Fix up mismatches of memory model vs addressing model.
authorEmma Anholt <emma@anholt.net>
Wed, 18 Jan 2023 22:29:55 +0000 (14:29 -0800)
committerMarge Bot <emma+marge@anholt.net>
Tue, 24 Jan 2023 20:56:13 +0000 (20:56 +0000)
MemoryModelVulkan was left out for CSes using it.

Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20756>

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

index 9351cac..d289a49 100644 (file)
@@ -4455,26 +4455,24 @@ nir_to_spirv(struct nir_shader *s, const struct zink_shader_info *sinfo, uint32_
    ctx.explicit_lod = true;
    spirv_builder_emit_source(&ctx.builder, SpvSourceLanguageUnknown, 0);
 
+   SpvAddressingModel model = SpvAddressingModelLogical;
    if (gl_shader_stage_is_compute(s->info.stage)) {
-      SpvAddressingModel model;
       if (s->info.cs.ptr_size == 32)
          model = SpvAddressingModelPhysical32;
       else if (s->info.cs.ptr_size == 64)
          model = SpvAddressingModelPhysicalStorageBuffer64;
       else
          model = SpvAddressingModelLogical;
+   }
+
+   if (ctx.sinfo->have_vulkan_memory_model) {
+      spirv_builder_emit_cap(&ctx.builder, SpvCapabilityVulkanMemoryModel);
+      spirv_builder_emit_cap(&ctx.builder, SpvCapabilityVulkanMemoryModelDeviceScope);
       spirv_builder_emit_mem_model(&ctx.builder, model,
-                                   SpvMemoryModelGLSL450);
+                                   SpvMemoryModelVulkan);
    } else {
-      if (ctx.sinfo->have_vulkan_memory_model) {
-         spirv_builder_emit_cap(&ctx.builder, SpvCapabilityVulkanMemoryModel);
-         spirv_builder_emit_cap(&ctx.builder, SpvCapabilityVulkanMemoryModelDeviceScope);
-         spirv_builder_emit_mem_model(&ctx.builder, SpvAddressingModelLogical,
-                                      SpvMemoryModelVulkan);
-      } else {
-         spirv_builder_emit_mem_model(&ctx.builder, SpvAddressingModelLogical,
-                                      SpvMemoryModelGLSL450);
-      }
+      spirv_builder_emit_mem_model(&ctx.builder, model,
+                                   SpvMemoryModelGLSL450);
    }
 
    if (s->info.stage == MESA_SHADER_FRAGMENT &&