Merge pull request #2513 from jeffbolznv/missingcap
Add missing capability when QueueFamily scope is used
This commit is contained in:
commit
f7c43377f0
@ -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
|
||||
|
||||
|
||||
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_Error.comp",
|
||||
"spv.multiView.frag",
|
||||
"spv.queueFamilyScope.comp",
|
||||
"spv.RayGenShader11.rgen",
|
||||
"spv.subgroup.frag",
|
||||
"spv.subgroup.geom",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user