From 70aefe3449e8aa70480cd6ec2f67052496615e46 Mon Sep 17 00:00:00 2001 From: Jesse Natalie Date: Sun, 11 Apr 2021 19:13:44 -0700 Subject: [PATCH] vtn: Support scoped control barriers for OpenCL too The current handling for SPIR-V memory semantics is very specific to the wording in the SPIR-V spec, which breaks its handling of OpenCL (compared to what we had working downstream before merging upstream). Update/relax the logic here to support CL's barrier(CLK_GLOBAL_MEM_FENCE); Reviewed-by: Jason Ekstrand Part-of: --- src/compiler/spirv/spirv_to_nir.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 35b6457..d79582b 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -2334,9 +2334,11 @@ vtn_mem_semantics_to_nir_var_modes(struct vtn_builder *b, /* Vulkan Environment for SPIR-V says "SubgroupMemory, CrossWorkgroupMemory, * and AtomicCounterMemory are ignored". */ - semantics &= ~(SpvMemorySemanticsSubgroupMemoryMask | - SpvMemorySemanticsCrossWorkgroupMemoryMask | - SpvMemorySemanticsAtomicCounterMemoryMask); + if (b->options->environment == NIR_SPIRV_VULKAN) { + semantics &= ~(SpvMemorySemanticsSubgroupMemoryMask | + SpvMemorySemanticsCrossWorkgroupMemoryMask | + SpvMemorySemanticsAtomicCounterMemoryMask); + } /* TODO: Consider adding nir_var_mem_image mode to NIR so it can be used * for SpvMemorySemanticsImageMemoryMask. @@ -2352,6 +2354,8 @@ vtn_mem_semantics_to_nir_var_modes(struct vtn_builder *b, } if (semantics & SpvMemorySemanticsWorkgroupMemoryMask) modes |= nir_var_mem_shared; + if (semantics & SpvMemorySemanticsCrossWorkgroupMemoryMask) + modes |= nir_var_mem_global; if (semantics & SpvMemorySemanticsOutputMemoryMask) { modes |= nir_var_shader_out; } -- 2.7.4