mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-09 12:00:05 +00:00
Add missing capability when QueueFamily scope is used
Also, if this capability is added and the memory model is not otherwise enabled by pragma, enable it as part of postprocessing.
This commit is contained in:
parent
36df92e4a0
commit
bfd84a39f2
@ -6996,6 +6996,10 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
|
|||||||
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
|
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (builder.getConstantScalar(scopeId) == spv::ScopeQueueFamily) {
|
||||||
|
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
|
||||||
|
}
|
||||||
|
|
||||||
if (glslangIntermediate->usingVulkanMemoryModel() && builder.getConstantScalar(scopeId) == spv::ScopeDevice) {
|
if (glslangIntermediate->usingVulkanMemoryModel() && builder.getConstantScalar(scopeId) == spv::ScopeDevice) {
|
||||||
builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
|
builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR);
|
||||||
}
|
}
|
||||||
|
@ -436,6 +436,13 @@ void Builder::postProcessFeatures() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If any Vulkan memory model-specific functionality is used, update the
|
||||||
|
// OpMemoryModel to match.
|
||||||
|
if (capabilities.find(spv::CapabilityVulkanMemoryModelKHR) != capabilities.end()) {
|
||||||
|
memoryModel = spv::MemoryModelVulkanKHR;
|
||||||
|
addIncorporatedExtension(spv::E_SPV_KHR_vulkan_memory_model, spv::Spv_1_5);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
43
Test/baseResults/spv.queueFamilyScope.comp.out
Normal file
43
Test/baseResults/spv.queueFamilyScope.comp.out
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
spv.queueFamilyScope.comp
|
||||||
|
// Module Version 10300
|
||||||
|
// Generated by (magic number): 8000a
|
||||||
|
// Id's are bound by 21
|
||||||
|
|
||||||
|
Capability Shader
|
||||||
|
Capability VulkanMemoryModelKHR
|
||||||
|
Extension "SPV_KHR_vulkan_memory_model"
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical VulkanKHR
|
||||||
|
EntryPoint GLCompute 4 "main"
|
||||||
|
ExecutionMode 4 LocalSize 1 1 1
|
||||||
|
Source GLSL 450
|
||||||
|
SourceExtension "GL_KHR_memory_scope_semantics"
|
||||||
|
Name 4 "main"
|
||||||
|
Name 7 "Buffer"
|
||||||
|
MemberName 7(Buffer) 0 "a"
|
||||||
|
Name 9 "A"
|
||||||
|
MemberDecorate 7(Buffer) 0 Offset 0
|
||||||
|
Decorate 7(Buffer) Block
|
||||||
|
Decorate 9(A) DescriptorSet 0
|
||||||
|
Decorate 9(A) Binding 0
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeInt 32 0
|
||||||
|
7(Buffer): TypeStruct 6(int)
|
||||||
|
8: TypePointer StorageBuffer 7(Buffer)
|
||||||
|
9(A): 8(ptr) Variable StorageBuffer
|
||||||
|
10: TypeInt 32 1
|
||||||
|
11: 10(int) Constant 0
|
||||||
|
12: TypePointer StorageBuffer 6(int)
|
||||||
|
14: 10(int) Constant 5
|
||||||
|
15: 10(int) Constant 64
|
||||||
|
16: 10(int) Constant 2
|
||||||
|
17: 6(int) Constant 1
|
||||||
|
18: 6(int) Constant 0
|
||||||
|
19: 6(int) Constant 66
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
13: 12(ptr) AccessChain 9(A) 11
|
||||||
|
20: 6(int) AtomicLoad 13 14 19
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
10
Test/spv.queueFamilyScope.comp
Normal file
10
Test/spv.queueFamilyScope.comp
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#version 450
|
||||||
|
#extension GL_KHR_memory_scope_semantics : require
|
||||||
|
|
||||||
|
layout (binding = 0) buffer Buffer { uint a; } A;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
atomicLoad(A.a, gl_ScopeQueueFamily, gl_StorageSemanticsBuffer, gl_SemanticsAcquire);
|
||||||
|
}
|
||||||
|
|
@ -503,6 +503,7 @@ INSTANTIATE_TEST_SUITE_P(
|
|||||||
"spv.memoryScopeSemantics.comp",
|
"spv.memoryScopeSemantics.comp",
|
||||||
"spv.memoryScopeSemantics_Error.comp",
|
"spv.memoryScopeSemantics_Error.comp",
|
||||||
"spv.multiView.frag",
|
"spv.multiView.frag",
|
||||||
|
"spv.queueFamilyScope.comp",
|
||||||
"spv.RayGenShader11.rgen",
|
"spv.RayGenShader11.rgen",
|
||||||
"spv.subgroup.frag",
|
"spv.subgroup.frag",
|
||||||
"spv.subgroup.geom",
|
"spv.subgroup.geom",
|
||||||
|
Loading…
Reference in New Issue
Block a user