From 5edae4604e6af456cb0a0e2aa3c2fb79f302971f Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Tue, 20 Apr 2021 12:45:44 +0200 Subject: [PATCH] zink: do not require vulkan memory model for shader-images The claim that we require vulkan memory model's MakeAvailable and MakeVisible semantics for image writes isn't accurate. This would be required *if* we were already using the Vulkan memory model. But we're using the GLSL450 memory model in those cases, which has no such requirements. This means that any problems on RADV due to the lack of these semantics are RADV bugs, and should be fixed in RADV instead. Reviewed-By: Mike Blumenkrantz Part-of: (cherry picked from commit 95d9d811c91076d50385b2fbd330335b68688c69) --- .pick_status.json | 2 +- docs/drivers/zink.rst | 2 -- src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c | 9 +-------- src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c | 4 ++-- src/gallium/drivers/zink/zink_device_info.py | 1 - src/gallium/drivers/zink/zink_screen.c | 5 ++--- 6 files changed, 6 insertions(+), 17 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 4cd012d018d..6ec633daa36 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2173,7 +2173,7 @@ "description": "zink: do not require vulkan memory model for shader-images", "nominated": false, "nomination_type": null, - "resolution": 4, + "resolution": 1, "master_sha": null, "because_sha": null }, diff --git a/docs/drivers/zink.rst b/docs/drivers/zink.rst index c5203679db5..0893dc70bc1 100644 --- a/docs/drivers/zink.rst +++ b/docs/drivers/zink.rst @@ -109,7 +109,6 @@ supported: * Device extensions: * `VK_KHR_maintenance2`_ - * `VK_KHR_vulkan_memory_model` * Formats requiring ``VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT``: @@ -259,7 +258,6 @@ questions, don't hesitate to visit `#zink on FreeNode .. _VK_EXT_conditional_rendering: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_conditional_rendering.html .. _VK_EXT_vertex_attribute_divisor: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_EXT_vertex_attribute_divisor.html .. _VK_KHR_maintenance2: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_maintenance2.html -.. _VK_KHR_vulkan_memory_model: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_vulkan_memory_model.html .. _VK_KHR_shader_draw_parameters: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_shader_draw_parameters.html .. _VK_KHR_draw_indirect_count: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_draw_indirect_count.html .. _VK_KHR_sampler_mirror_clamp_to_edge: https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_KHR_sampler_mirror_clamp_to_edge.html diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index a162eaa704e..c67ca8b081a 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -3510,14 +3510,7 @@ nir_to_spirv(struct nir_shader *s, const struct zink_so_info *so_info) ctx.GLSL_std_450 = spirv_builder_import(&ctx.builder, "GLSL.std.450"); spirv_builder_emit_source(&ctx.builder, SpvSourceLanguageUnknown, 0); - if (s->info.num_images) { - /* this is required for correct io semantics */ - spirv_builder_emit_extension(&ctx.builder, "SPV_KHR_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 if (s->info.stage == MESA_SHADER_COMPUTE) { + if (s->info.stage == MESA_SHADER_COMPUTE) { SpvAddressingModel model; if (s->info.cs.ptr_size == 32) model = SpvAddressingModelPhysical32; diff --git a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c index dc9451bab2a..726c8d5387b 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c +++ b/src/gallium/drivers/zink/nir_to_spirv/spirv_builder.c @@ -1486,7 +1486,7 @@ spirv_builder_emit_memory_barrier(struct spirv_builder *b, SpvScope scope, SpvMe spirv_buffer_prepare(&b->instructions, b->mem_ctx, 3); spirv_buffer_emit_word(&b->instructions, SpvOpMemoryBarrier | (3 << 16)); spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, scope)); - spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, semantics | SpvMemorySemanticsMakeAvailableMask | SpvMemorySemanticsMakeVisibleMask)); + spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, semantics)); } void @@ -1496,7 +1496,7 @@ spirv_builder_emit_control_barrier(struct spirv_builder *b, SpvScope scope, SpvS spirv_buffer_emit_word(&b->instructions, SpvOpControlBarrier | (4 << 16)); spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, scope)); spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, mem_scope)); - spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, semantics | SpvMemorySemanticsMakeAvailableMask | SpvMemorySemanticsMakeVisibleMask)); + spirv_buffer_emit_word(&b->instructions, spirv_builder_const_uint(b, 32, semantics)); } SpvId diff --git a/src/gallium/drivers/zink/zink_device_info.py b/src/gallium/drivers/zink/zink_device_info.py index fe6f24d9988..e4ff7aecf3e 100644 --- a/src/gallium/drivers/zink/zink_device_info.py +++ b/src/gallium/drivers/zink/zink_device_info.py @@ -64,7 +64,6 @@ EXTENSIONS = [ Extension("VK_KHR_maintenance2"), Extension("VK_KHR_external_memory"), Extension("VK_KHR_external_memory_fd"), - Extension("VK_KHR_vulkan_memory_model"), Extension("VK_EXT_shader_viewport_index_layer"), Extension("VK_EXT_post_depth_coverage"), Extension("VK_KHR_driver_properties", diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index ccf1b47300b..25a49f290d6 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -748,10 +748,9 @@ zink_get_shader_param(struct pipe_screen *pscreen, return (1 << PIPE_SHADER_IR_NIR) | (1 << PIPE_SHADER_IR_TGSI); case PIPE_SHADER_CAP_MAX_SHADER_IMAGES: - if (screen->info.have_KHR_vulkan_memory_model && - (screen->info.feats.features.shaderStorageImageExtendedFormats || + if (screen->info.feats.features.shaderStorageImageExtendedFormats || (screen->info.feats.features.shaderStorageImageWriteWithoutFormat && - screen->info.feats.features.shaderStorageImageReadWithoutFormat))) + screen->info.feats.features.shaderStorageImageReadWithoutFormat)) return MIN2(screen->info.props.limits.maxPerStageDescriptorStorageImages, PIPE_MAX_SHADER_IMAGES); return 0;