Merge pull request #1645 from KhronosGroup/dupe-accelstruct
Don't output duplicate OpTypeAccelerationStructureNV declarations
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index 3375ec4..8355d83 100755
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -565,6 +565,7 @@
Instruction *type;
if (groupedTypes[OpTypeAccelerationStructureNV].size() == 0) {
type = new Instruction(getUniqueId(), NoType, OpTypeAccelerationStructureNV);
+ groupedTypes[OpTypeAccelerationStructureNV].push_back(type);
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
module.mapInstruction(type);
} else {
diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out
index db6ecfc..7e15f26 100644
--- a/Test/baseResults/spv.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.RayGenShader.rgen.out
@@ -1,7 +1,7 @@
spv.RayGenShader.rgen
// Module Version 10000
// Generated by (magic number): 80007
-// Id's are bound by 60
+// Id's are bound by 61
Capability RayTracingNV
Extension "SPV_NV_ray_tracing"
@@ -17,21 +17,24 @@
Name 20 "sx"
Name 21 "gl_LaunchSizeNV"
Name 24 "sy"
- Name 29 "accNV"
+ Name 29 "accNV0"
Name 48 "block"
MemberName 48(block) 0 "arr"
MemberName 48(block) 1 "pad"
Name 50 ""
Name 56 "payload"
+ Name 60 "accNV1"
Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdNV
Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeNV
- Decorate 29(accNV) DescriptorSet 0
- Decorate 29(accNV) Binding 0
+ Decorate 29(accNV0) DescriptorSet 0
+ Decorate 29(accNV0) Binding 0
Decorate 46 ArrayStride 4
MemberDecorate 48(block) 0 Offset 0
MemberDecorate 48(block) 1 Offset 16
Decorate 48(block) BufferBlock
Decorate 56(payload) Location 0
+ Decorate 60(accNV1) DescriptorSet 0
+ Decorate 60(accNV1) Binding 1
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -45,7 +48,7 @@
21(gl_LaunchSizeNV): 10(ptr) Variable Input
27: TypeAccelerationStructureNV
28: TypePointer UniformConstant 27
- 29(accNV): 28(ptr) Variable UniformConstant
+ 29(accNV0): 28(ptr) Variable UniformConstant
35: TypeFloat 32
36: TypeVector 35(float) 3
37: 35(float) Constant 0
@@ -68,6 +71,7 @@
55: TypePointer RayPayloadNV 47(fvec4)
56(payload): 55(ptr) Variable RayPayloadNV
58: TypePointer ShaderRecordBufferNV 47(fvec4)
+ 60(accNV1): 28(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
8(lx): 7(ptr) Variable Function
@@ -86,7 +90,7 @@
25: 13(ptr) AccessChain 21(gl_LaunchSizeNV) 17
26: 6(int) Load 25
Store 24(sy) 26
- 30: 27 Load 29(accNV)
+ 30: 27 Load 29(accNV0)
31: 6(int) Load 8(lx)
32: 6(int) Load 16(ly)
33: 6(int) Load 20(sx)
diff --git a/Test/spv.RayGenShader.rgen b/Test/spv.RayGenShader.rgen
index 68f92b2..c36cae4 100644
--- a/Test/spv.RayGenShader.rgen
+++ b/Test/spv.RayGenShader.rgen
@@ -1,6 +1,7 @@
#version 460
#extension GL_NV_ray_tracing : enable
-layout(binding = 0, set = 0) uniform accelerationStructureNV accNV;
+layout(binding = 0, set = 0) uniform accelerationStructureNV accNV0;
+layout(binding = 1, set = 0) uniform accelerationStructureNV accNV1; // Unused
layout(location = 0) rayPayloadNV vec4 payload;
layout(shaderRecordNV) buffer block
{
@@ -13,7 +14,7 @@
uint ly = gl_LaunchIDNV.y;
uint sx = gl_LaunchSizeNV.x;
uint sy = gl_LaunchSizeNV.y;
- traceNV(accNV, lx, ly, sx, sy, 0u, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 1);
+ traceNV(accNV0, lx, ly, sx, sy, 0u, vec3(0.0f), 0.5f, vec3(1.0f), 0.75f, 1);
arr[3] = 1.0f;
pad = payload;
}