Commit bfd84a39 by Jeff Bolz

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.
parent 36df92e4
......@@ -6996,6 +6996,10 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
}
if (builder.getConstantScalar(scopeId) == spv::ScopeQueueFamily) {
builder.addCapability(spv::CapabilityVulkanMemoryModelKHR);
}
if (glslangIntermediate->usingVulkanMemoryModel() && builder.getConstantScalar(scopeId) == spv::ScopeDevice) {
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
......
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
#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_Error.comp",
"spv.multiView.frag",
"spv.queueFamilyScope.comp",
"spv.RayGenShader11.rgen",
"spv.subgroup.frag",
"spv.subgroup.geom",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment