Merge pull request #2565 from greg-lunarg/i2564
Pass correct proxy type for atomicStore
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 28a1ffe..6d9c7cf 100644
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -3166,7 +3166,9 @@
#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) {
diff --git a/Test/baseResults/spv.atomicStoreInt64.comp.out b/Test/baseResults/spv.atomicStoreInt64.comp.out
new file mode 100644
index 0000000..3adadcb
--- /dev/null
+++ b/Test/baseResults/spv.atomicStoreInt64.comp.out
@@ -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
diff --git a/Test/spv.atomicStoreInt64.comp b/Test/spv.atomicStoreInt64.comp
new file mode 100644
index 0000000..879c37a
--- /dev/null
+++ b/Test/spv.atomicStoreInt64.comp
@@ -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);
+}
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index e2a837d..5456fb8 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -714,6 +714,7 @@
"spv.multiviewPerViewAttributes.vert",
"spv.multiviewPerViewAttributes.tesc",
"spv.atomicInt64.comp",
+ "spv.atomicStoreInt64.comp",
"spv.shadingRate.frag",
"spv.RayGenShader.rgen",
"spv.RayGenShaderArray.rgen",