scopeId = builder.makeUintConstant(spv::ScopeDevice);
}
// semantics default to relaxed
- spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() ?
+ spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() && glslangIntermediate->usingVulkanMemoryModel() ?
spv::MemorySemanticsVolatileMask :
spv::MemorySemanticsMaskNone);
spv::Id semanticsId2 = semanticsId;
--- /dev/null
+spv.volatileAtomic.comp
+// Module Version 10000
+// Generated by (magic number): 80007
+// Id's are bound by 18
+
+ Capability Shader
+ 1: ExtInstImport "GLSL.std.450"
+ MemoryModel Logical GLSL450
+ EntryPoint GLCompute 4 "main"
+ ExecutionMode 4 LocalSize 1 1 1
+ Source GLSL 450
+ Name 4 "main"
+ Name 8 "D"
+ MemberName 8(D) 0 "d"
+ Name 10 "d"
+ Decorate 7 ArrayStride 4
+ MemberDecorate 8(D) 0 Volatile
+ MemberDecorate 8(D) 0 Coherent
+ MemberDecorate 8(D) 0 Offset 0
+ Decorate 8(D) BufferBlock
+ Decorate 10(d) DescriptorSet 0
+ Decorate 10(d) Binding 3
+ 2: TypeVoid
+ 3: TypeFunction 2
+ 6: TypeInt 32 0
+ 7: TypeRuntimeArray 6(int)
+ 8(D): TypeStruct 7
+ 9: TypePointer Uniform 8(D)
+ 10(d): 9(ptr) Variable Uniform
+ 11: TypeInt 32 1
+ 12: 11(int) Constant 0
+ 13: TypePointer Uniform 6(int)
+ 15: 6(int) Constant 0
+ 16: 6(int) Constant 1
+ 4(main): 2 Function None 3
+ 5: Label
+ 14: 13(ptr) AccessChain 10(d) 12 12
+ 17: 6(int) AtomicExchange 14 16 15 15
+ Return
+ FunctionEnd
--- /dev/null
+#version 450 core\r
+\r
+layout(set=0, binding=3) volatile buffer D { uint d[]; } d;\r
+\r
+void main()\r
+{\r
+ atomicExchange(d.d[0], 0);\r
+}\r
"spv.storageBuffer.vert",
"spv.precise.tese",
"spv.precise.tesc",
+ "spv.volatileAtomic.comp",
"spv.vulkan100.subgroupArithmetic.comp",
"spv.vulkan100.subgroupPartitioned.comp",
"spv.xfb.vert",