Pass correct proxy type for atomicStore

Fixes #2564
This commit is contained in:
Greg Fischer 2021-03-08 14:02:06 -07:00
parent c7c7982ebe
commit b5c8fd4fcf
4 changed files with 72 additions and 1 deletions

View File

@ -3164,7 +3164,9 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
#endif
if (atomic) {
// Handle all atomics
result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(),
glslang::TBasicType typeProxy = (node->getOp() == glslang::EOpAtomicStore)
? node->getSequence()[0]->getAsTyped()->getBasicType() : node->getBasicType();
result = createAtomicOperation(node->getOp(), precision, resultType(), operands, typeProxy,
lvalueCoherentFlags);
} else if (node->getOp() == glslang::EOpDebugPrintf) {
if (!nonSemanticDebugPrintf) {

View File

@ -0,0 +1,57 @@
spv.atomicStoreInt64.comp
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 25
Capability Shader
Capability Int64
Capability Int64Atomics
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint GLCompute 4 "main"
ExecutionMode 4 LocalSize 1 1 1
Source GLSL 450
SourceExtension "GL_EXT_shader_atomic_int64"
SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64"
SourceExtension "GL_KHR_memory_scope_semantics"
Name 4 "main"
Name 7 "ssbo"
MemberName 7(ssbo) 0 "y"
Name 9 ""
Name 14 "ubo"
MemberName 14(ubo) 0 "z"
Name 16 ""
MemberDecorate 7(ssbo) 0 Offset 0
Decorate 7(ssbo) BufferBlock
Decorate 9 DescriptorSet 0
Decorate 9 Binding 0
MemberDecorate 14(ubo) 0 Offset 0
Decorate 14(ubo) Block
Decorate 16 DescriptorSet 0
Decorate 16 Binding 1
2: TypeVoid
3: TypeFunction 2
6: TypeInt 64 0
7(ssbo): TypeStruct 6(int64_t)
8: TypePointer Uniform 7(ssbo)
9: 8(ptr) Variable Uniform
10: TypeInt 32 1
11: 10(int) Constant 0
12: TypePointer Uniform 6(int64_t)
14(ubo): TypeStruct 6(int64_t)
15: TypePointer Uniform 14(ubo)
16: 15(ptr) Variable Uniform
19: 10(int) Constant 1
20: 10(int) Constant 64
21: TypeInt 32 0
22: 21(int) Constant 1
23: 21(int) Constant 0
24: 21(int) Constant 64
4(main): 2 Function None 3
5: Label
13: 12(ptr) AccessChain 9 11
17: 12(ptr) AccessChain 16 11
18: 6(int64_t) Load 17
AtomicStore 13 19 24 18
Return
FunctionEnd

View File

@ -0,0 +1,11 @@
#version 450
#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable
#extension GL_EXT_shader_atomic_int64 : enable
#extension GL_KHR_memory_scope_semantics : enable
layout(set = 0, binding = 0) buffer ssbo { uint64_t y; };
layout(set = 0, binding = 1) uniform ubo { uint64_t z; };
void main() {
atomicStore(y, z, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed);
}

View File

@ -714,6 +714,7 @@ INSTANTIATE_TEST_SUITE_P(
"spv.multiviewPerViewAttributes.vert",
"spv.multiviewPerViewAttributes.tesc",
"spv.atomicInt64.comp",
"spv.atomicStoreInt64.comp",
"spv.shadingRate.frag",
"spv.RayGenShader.rgen",
"spv.RayGenShaderArray.rgen",