Skip to content

Commit 605c7f6

Browse files
vainiovanoarcady-lunarg
authored andcommitted
Test struct access to descriptor heap-bound buffers
This was previously broken, so add a test to ensure that it keeps working.
1 parent f0be268 commit 605c7f6

3 files changed

Lines changed: 135 additions & 0 deletions

File tree

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
spv.descriptorHeap.BufferStruct.comp
2+
// Module Version 10400
3+
// Generated by (magic number): 8000b
4+
// Id's are bound by 53
5+
6+
Capability Shader
7+
Capability UntypedPointersKHR
8+
Capability DescriptorHeapEXT
9+
Extension "SPV_EXT_descriptor_heap"
10+
Extension "SPV_KHR_untyped_pointers"
11+
1: ExtInstImport "GLSL.std.450"
12+
MemoryModel Logical GLSL450
13+
EntryPoint GLCompute 4 "main" 13
14+
ExecutionMode 4 LocalSize 1 1 1
15+
Source GLSL 450
16+
SourceExtension "GL_EXT_descriptor_heap"
17+
Name 4 "main"
18+
Name 9 "Data"
19+
MemberName 9(Data) 0 "m"
20+
MemberName 9(Data) 1 "f"
21+
Name 11 "data"
22+
Name 13 "resource_heap"
23+
Name 16 "Data"
24+
MemberName 16(Data) 0 "m"
25+
MemberName 16(Data) 1 "f"
26+
Name 17 "U"
27+
MemberName 17(U) 0 "inputData"
28+
Name 19 "Data"
29+
MemberName 19(Data) 0 "m"
30+
MemberName 19(Data) 1 "f"
31+
Name 37 "Data"
32+
MemberName 37(Data) 0 "m"
33+
MemberName 37(Data) 1 "f"
34+
Name 39 "O"
35+
MemberName 39(O) 0 "outputData"
36+
Name 40 "Data"
37+
MemberName 40(Data) 0 "m"
38+
MemberName 40(Data) 1 "f"
39+
Name 42 "Data"
40+
MemberName 42(Data) 0 "m"
41+
MemberName 42(Data) 1 "f"
42+
Decorate 13(resource_heap) BuiltIn ResourceHeapEXT
43+
MemberDecorate 16(Data) 0 ColMajor
44+
MemberDecorate 16(Data) 0 MatrixStride 16
45+
MemberDecorate 16(Data) 0 Offset 0
46+
MemberDecorate 16(Data) 1 Offset 64
47+
Decorate 17(U) Block
48+
MemberDecorate 17(U) 0 Offset 0
49+
MemberDecorate 19(Data) 0 ColMajor
50+
DecorateId 23 DecorationArrayStrideIdEXT 22
51+
MemberDecorate 37(Data) 0 ColMajor
52+
MemberDecorate 37(Data) 0 MatrixStride 16
53+
MemberDecorate 37(Data) 0 Offset 0
54+
MemberDecorate 37(Data) 1 Offset 64
55+
Decorate 38 ArrayStride 80
56+
Decorate 39(O) Block
57+
MemberDecorate 39(O) 0 Offset 0
58+
MemberDecorate 40(Data) 0 ColMajor
59+
MemberDecorate 42(Data) 0 ColMajor
60+
DecorateId 47 DecorationArrayStrideIdEXT 46
61+
2: TypeVoid
62+
3: TypeFunction 2
63+
6: TypeFloat 32
64+
7: TypeVector 6(float) 4
65+
8: TypeMatrix 7(fvec4) 4
66+
9(Data): TypeStruct 8 6(float)
67+
10: TypePointer Function 9(Data)
68+
12: TypeUntypedPointerKHR UniformConstant
69+
13(resource_heap): 12(ptr) UntypedVariableKHR UniformConstant
70+
14: TypeInt 32 1
71+
15: 14(int) Constant 1
72+
16(Data): TypeStruct 8 6(float)
73+
17(U): TypeStruct 16(Data)
74+
18: 14(int) Constant 0
75+
19(Data): TypeStruct 8 6(float)
76+
21: TypeBufferEXT Uniform
77+
22: 14(int) ConstantSizeOfEXT 21
78+
23: TypeRuntimeArray 21
79+
24: TypePointer Uniform 17(U)
80+
26: TypePointer Uniform 16(Data)
81+
30: 6(float) Constant 1065353216
82+
31: TypePointer Function 6(float)
83+
36: 14(int) Constant 2
84+
37(Data): TypeStruct 8 6(float)
85+
38: TypeRuntimeArray 37(Data)
86+
39(O): TypeStruct 38
87+
40(Data): TypeStruct 8 6(float)
88+
41: 14(int) Constant 3
89+
42(Data): TypeStruct 8 6(float)
90+
45: TypeBufferEXT StorageBuffer
91+
46: 14(int) ConstantSizeOfEXT 45
92+
47: TypeRuntimeArray 45
93+
48: TypePointer StorageBuffer 39(O)
94+
50: TypePointer StorageBuffer 37(Data)
95+
4(main): 2 Function None 3
96+
5: Label
97+
11(data): 10(ptr) Variable Function
98+
20: 12(ptr) UntypedAccessChainKHR 23 13(resource_heap) 15
99+
25: 24(ptr) BufferPointerEXT 20
100+
27: 26(ptr) AccessChain 25 18
101+
28: 16(Data) Load 27
102+
29: 9(Data) CopyLogical 28
103+
Store 11(data) 29
104+
32: 31(ptr) AccessChain 11(data) 15
105+
33: 6(float) Load 32
106+
34: 6(float) FAdd 33 30
107+
35: 31(ptr) AccessChain 11(data) 15
108+
Store 35 34
109+
43: 9(Data) Load 11(data)
110+
44: 12(ptr) UntypedAccessChainKHR 47 13(resource_heap) 36
111+
49: 48(ptr) BufferPointerEXT 44
112+
51: 50(ptr) AccessChain 49 18 41
113+
52: 37(Data) CopyLogical 43
114+
Store 51 52
115+
Return
116+
FunctionEnd
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#version 450
2+
#extension GL_EXT_descriptor_heap: require
3+
4+
struct Data
5+
{
6+
mat4 m;
7+
float f;
8+
};
9+
10+
layout(descriptor_heap) uniform U { Data inputData; } ubo[];
11+
layout(descriptor_heap) buffer O { Data outputData[]; } ssbo[];
12+
13+
void main()
14+
{
15+
Data data = ubo[1].inputData;
16+
data.f += 1.0;
17+
ssbo[2].outputData[3] = data;
18+
}

gtests/Spv.FromFile.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -866,6 +866,7 @@ INSTANTIATE_TEST_SUITE_P(
866866
"spv.descriptorHeap.AtomicImage.comp",
867867
"spv.descriptorHeap.AtomicImage.error.comp",
868868
"spv.descriptorHeap.Buffer.comp",
869+
"spv.descriptorHeap.BufferStruct.comp",
869870
"spv.descriptorHeap.Stride.comp",
870871
"spv.descriptorHeap.DebugPrintf.comp",
871872
"spv.descriptorHeap.HeapNotArray.error.comp",

0 commit comments

Comments
 (0)