Merge pull request #2513 from jeffbolznv/missingcap

Add missing capability when QueueFamily scope is used
This commit is contained in:
greg-lunarg 2021-01-28 10:40:45 -07:00 committed by GitHub
commit f7c43377f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 65 additions and 0 deletions

View File

@ -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);
}

View File

@ -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

View 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

View 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);
}

View File

@ -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",