Mesa (master): vtn: Support scoped control barriers for OpenCL too
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Apr 13 04:05:10 UTC 2021
Module: Mesa
Branch: master
Commit: 70aefe3449e8aa70480cd6ec2f67052496615e46
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=70aefe3449e8aa70480cd6ec2f67052496615e46
Author: Jesse Natalie <jenatali at microsoft.com>
Date: Sun Apr 11 19:13:44 2021 -0700
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 <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10165>
---
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 35b64570814..d79582b16b2 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;
}
More information about the mesa-commit
mailing list