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@jlekstrand.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10165>
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user