Emit debug info for buffer references

Using OpExtInstWithForwardRefs, the debug type information for buffer
reference types can be emitted alongside the OpFowardPointer opcode.
This commit is contained in:
Arcady Goldmints-Orlov 2024-03-11 18:53:37 -04:00 committed by arcady-lunarg
parent 996c5d3123
commit 81f7045aa0
3 changed files with 188 additions and 146 deletions

View file

@ -182,6 +182,10 @@ Id Builder::makeForwardPointer(StorageClass storageClass)
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type)); constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
module.mapInstruction(type); module.mapInstruction(type);
if (emitNonSemanticShaderDebugInfo) {
const Id debugResultId = makeForwardPointerDebugType(storageClass);
debugId[type->getResultId()] = debugResultId;
}
return type->getResultId(); return type->getResultId();
} }
@ -204,6 +208,15 @@ Id Builder::makePointerFromForwardPointer(StorageClass storageClass, Id forwardP
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type)); constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
module.mapInstruction(type); module.mapInstruction(type);
// If we are emitting nonsemantic debuginfo, we need to patch the debug pointer type
// that was emitted alongside the forward pointer, now that we have a pointee debug
// type for it to point to.
if (emitNonSemanticShaderDebugInfo) {
Instruction *debugForwardPointer = module.getInstruction(debugId[forwardPointerType]);
assert(debugId[pointee]);
debugForwardPointer->setIdOperand(2, debugId[pointee]);
}
return type->getResultId(); return type->getResultId();
} }
@ -1045,6 +1058,29 @@ Id Builder::makePointerDebugType(StorageClass storageClass, Id const baseType)
return type->getResultId(); return type->getResultId();
} }
// Emit a OpExtInstWithForwardRefs nonsemantic instruction for a pointer debug type
// where we don't have the pointee yet. Since we don't have the pointee yet, it just
// points to itself and we rely on patching it later.
Id Builder::makeForwardPointerDebugType(StorageClass storageClass)
{
const Id scID = makeUintConstant(storageClass);
this->addExtension(spv::E_SPV_KHR_relaxed_extended_instruction);
Instruction *type = new Instruction(getUniqueId(), makeVoidType(), OpExtInstWithForwardRefs);
type->addIdOperand(nonSemanticShaderDebugInfo);
type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypePointer);
type->addIdOperand(type->getResultId());
type->addIdOperand(scID);
type->addIdOperand(makeUintConstant(0));
groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypePointer].push_back(type);
constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
module.mapInstruction(type);
return type->getResultId();
}
Id Builder::makeDebugSource(const Id fileName) { Id Builder::makeDebugSource(const Id fileName) {
if (debugSourceId.find(fileName) != debugSourceId.end()) if (debugSourceId.find(fileName) != debugSourceId.end())
return debugSourceId[fileName]; return debugSourceId[fileName];

View file

@ -235,6 +235,7 @@ public:
Id makeCompositeDebugType(std::vector<Id> const& memberTypes, char const*const name, Id makeCompositeDebugType(std::vector<Id> const& memberTypes, char const*const name,
NonSemanticShaderDebugInfo100DebugCompositeType const tag, bool const isOpaqueType = false); NonSemanticShaderDebugInfo100DebugCompositeType const tag, bool const isOpaqueType = false);
Id makePointerDebugType(StorageClass storageClass, Id const baseType); Id makePointerDebugType(StorageClass storageClass, Id const baseType);
Id makeForwardPointerDebugType(StorageClass storageClass);
Id makeDebugSource(const Id fileName); Id makeDebugSource(const Id fileName);
Id makeDebugCompilationUnit(); Id makeDebugCompilationUnit();
Id createDebugGlobalVariable(Id const type, char const*const name, Id const variable); Id createDebugGlobalVariable(Id const type, char const*const name, Id const variable);

View file

@ -1,17 +1,18 @@
spv.debuginfo.bufferref.glsl.frag spv.debuginfo.bufferref.glsl.frag
// Module Version 10000 // Module Version 10000
// Generated by (magic number): 8000b // Generated by (magic number): 8000b
// Id's are bound by 142 // Id's are bound by 146
Capability Shader Capability Shader
Capability PhysicalStorageBufferAddressesEXT Capability PhysicalStorageBufferAddressesEXT
Extension "SPV_KHR_non_semantic_info" Extension "SPV_KHR_non_semantic_info"
Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_physical_storage_buffer"
Extension "SPV_KHR_relaxed_extended_instruction"
Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_storage_buffer_storage_class"
1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100"
3: ExtInstImport "GLSL.std.450" 3: ExtInstImport "GLSL.std.450"
MemoryModel PhysicalStorageBuffer64EXT GLSL450 MemoryModel PhysicalStorageBuffer64EXT GLSL450
EntryPoint Fragment 14 "main" 76 131 EntryPoint Fragment 14 "main" 82 135
ExecutionMode 14 OriginUpperLeft ExecutionMode 14 OriginUpperLeft
2: String "spv.debuginfo.bufferref.glsl.frag" 2: String "spv.debuginfo.bufferref.glsl.frag"
8: String "uint" 8: String "uint"
@ -52,46 +53,47 @@ void main() {
out_fragColor = vec4(vertex_pos0, 1.0); out_fragColor = vec4(vertex_pos0, 1.0);
} }
" "
31: String "Mesh" 33: String "positions"
34: String "float" 37: String "Mesh"
40: String "data" 40: String "float"
44: String "MeshVertexPositions" 46: String "data"
50: String "meshData" 49: String "MeshVertexPositions"
63: String "PerPass_meshes" 55: String "meshData"
69: String "perPass_meshes" 69: String "PerPass_meshes"
71: String "int" 75: String "perPass_meshes"
78: String "tri_idx0" 77: String "int"
94: String "vertex_pos0" 84: String "tri_idx0"
133: String "out_fragColor" 100: String "vertex_pos0"
137: String "out_fragColor"
SourceExtension "GL_EXT_buffer_reference" SourceExtension "GL_EXT_buffer_reference"
Name 14 "main" Name 14 "main"
Name 29 "Mesh" Name 31 "Mesh"
MemberName 29(Mesh) 0 "positions" MemberName 31(Mesh) 0 "positions"
Name 38 "MeshVertexPositions" Name 44 "MeshVertexPositions"
MemberName 38(MeshVertexPositions) 0 "data" MemberName 44(MeshVertexPositions) 0 "data"
Name 48 "meshData" Name 53 "meshData"
Name 54 "Mesh" Name 59 "Mesh"
MemberName 54(Mesh) 0 "positions" MemberName 59(Mesh) 0 "positions"
Name 58 "PerPass_meshes" Name 64 "PerPass_meshes"
MemberName 58(PerPass_meshes) 0 "data" MemberName 64(PerPass_meshes) 0 "data"
Name 67 "perPass_meshes" Name 73 "perPass_meshes"
Name 76 "tri_idx0" Name 82 "tri_idx0"
Name 92 "vertex_pos0" Name 98 "vertex_pos0"
Name 131 "out_fragColor" Name 135 "out_fragColor"
Decorate 36 ArrayStride 4 Decorate 42 ArrayStride 4
MemberDecorate 38(MeshVertexPositions) 0 Offset 0 MemberDecorate 44(MeshVertexPositions) 0 Offset 0
Decorate 38(MeshVertexPositions) Block Decorate 44(MeshVertexPositions) Block
MemberDecorate 54(Mesh) 0 Offset 0 MemberDecorate 59(Mesh) 0 Offset 0
Decorate 56 ArrayStride 8 Decorate 62 ArrayStride 8
MemberDecorate 58(PerPass_meshes) 0 NonWritable MemberDecorate 64(PerPass_meshes) 0 NonWritable
MemberDecorate 58(PerPass_meshes) 0 Offset 0 MemberDecorate 64(PerPass_meshes) 0 Offset 0
Decorate 58(PerPass_meshes) Block Decorate 64(PerPass_meshes) Block
Decorate 67(perPass_meshes) DescriptorSet 0 Decorate 73(perPass_meshes) DescriptorSet 0
Decorate 67(perPass_meshes) Binding 0 Decorate 73(perPass_meshes) Binding 0
Decorate 76(tri_idx0) Flat Decorate 82(tri_idx0) Flat
Decorate 76(tri_idx0) Location 0 Decorate 82(tri_idx0) Location 0
Decorate 131(out_fragColor) Location 0 Decorate 135(out_fragColor) Location 0
Decorate 48(meshData) DecorationAliasedPointerEXT Decorate 53(meshData) DecorationAliasedPointerEXT
4: TypeVoid 4: TypeVoid
5: TypeFunction 4 5: TypeFunction 4
7: TypeInt 32 0 7: TypeInt 32 0
@ -109,116 +111,119 @@ void main() {
21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24 21: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24
17: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20 17: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20
TypeForwardPointer 28 PhysicalStorageBufferEXT TypeForwardPointer 28 PhysicalStorageBufferEXT
29(Mesh): TypeStruct 28 29: 7(int) Constant 5349
32: 7(int) Constant 21 30: 4 ExtInstWithForwardRefs 1(NonSemantic.Shader.DebugInfo.100) 3 48 29 12
30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 31 22 18 32 12 21 31 12 13 31(Mesh): TypeStruct 28
33: TypeFloat 32 34: 7(int) Constant 9
35: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 34 10 13 12 35: 7(int) Constant 23
36: TypeRuntimeArray 33(float) 32: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 33 30 18 34 35 12 12 13
37: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 35 12 38: 7(int) Constant 21
38(MeshVertexPositions): TypeStruct 36 36: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 37 22 18 38 12 21 37 12 13 32
41: 7(int) Constant 5 39: TypeFloat 32
42: 7(int) Constant 9 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 40 10 13 12
39: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 40 37 18 41 42 12 12 13 42: TypeRuntimeArray 39(float)
43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 44 22 18 32 12 21 44 12 13 39 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 41 12
28: TypePointer PhysicalStorageBufferEXT 38(MeshVertexPositions) 44(MeshVertexPositions): TypeStruct 42
45: TypePointer Function 29(Mesh) 47: 7(int) Constant 5
46: 7(int) Constant 7 45: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 46 43 18 47 34 12 12 13
47: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 46 12 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 49 22 18 38 12 21 49 12 13 45
49: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 30 18 32 12 17 23 28: TypePointer PhysicalStorageBufferEXT 44(MeshVertexPositions)
52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) 50: TypePointer Function 31(Mesh)
54(Mesh): TypeStruct 28(ptr) 51: 7(int) Constant 7
55: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 31 22 18 32 12 21 31 12 13 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 36 51 12
56: TypeRuntimeArray 54(Mesh) 54: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 55 36 18 38 12 17 23
57: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 55 12 57: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
58(PerPass_meshes): TypeStruct 56 59(Mesh): TypeStruct 28(ptr)
60: 7(int) Constant 13 60: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 33 30 18 34 35 12 12 13
61: 7(int) Constant 8 61: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 37 22 18 38 12 21 37 12 13 60
59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 40 57 18 60 61 12 12 13 62: TypeRuntimeArray 59(Mesh)
62: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 63 22 18 32 12 21 63 12 13 59 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 61 12
64: TypePointer StorageBuffer 58(PerPass_meshes) 64(PerPass_meshes): TypeStruct 62
65: 7(int) Constant 12 66: 7(int) Constant 13
66: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 62 65 12 67: 7(int) Constant 8
67(perPass_meshes): 64(ptr) Variable StorageBuffer 65: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 46 63 18 66 67 12 12 13
68: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 69 62 18 32 12 21 69 67(perPass_meshes) 61 68: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 69 22 18 38 12 21 69 12 13 65
70: TypeInt 32 1 70: TypePointer StorageBuffer 64(PerPass_meshes)
72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 71 10 23 12 71: 7(int) Constant 12
73: 70(int) Constant 0 72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 68 71 12
74: TypePointer Input 7(int) 73(perPass_meshes): 70(ptr) Variable StorageBuffer
75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 22 12 74: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 75 68 18 38 12 21 75 73(perPass_meshes) 67
76(tri_idx0): 74(ptr) Variable Input 76: TypeInt 32 1
77: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 78 9 18 32 12 21 78 76(tri_idx0) 61 78: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 77 10 23 12
80: TypePointer StorageBuffer 54(Mesh) 79: 76(int) Constant 0
81: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 55 65 12 80: TypePointer Input 7(int)
85: TypePointer Function 28(ptr) 81: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 22 12
86: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone) 82(tri_idx0): 80(ptr) Variable Input
88: TypeVector 33(float) 3 83: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 84 9 18 38 12 21 84 82(tri_idx0) 67
89: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 35 13 86: TypePointer StorageBuffer 59(Mesh)
90: TypePointer Function 88(fvec3) 87: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 61 71 12
91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 89 46 12 91: TypePointer Function 28(ptr)
95: 7(int) Constant 23 92: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 51 12
93: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 94 89 18 95 12 17 23 94: TypeVector 39(float) 3
102: TypePointer PhysicalStorageBufferEXT 33(float) 95: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 41 13
103: 7(int) Constant 5349 96: TypePointer Function 94(fvec3)
104: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 35 103 12 97: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 95 51 12
109: 7(int) Constant 24 99: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 100 95 18 35 12 17 23
118: 7(int) Constant 25 107: TypePointer PhysicalStorageBufferEXT 39(float)
127: TypeVector 33(float) 4 108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 41 29 12
128: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 35 23 113: 7(int) Constant 24
129: TypePointer Output 127(fvec4) 122: 7(int) Constant 25
130: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 128 13 12 131: TypeVector 39(float) 4
131(out_fragColor): 129(ptr) Variable Output 132: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 41 23
134: 7(int) Constant 27 133: TypePointer Output 131(fvec4)
132: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 133 128 18 134 12 21 133 131(out_fragColor) 61 134: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 132 13 12
137: 33(float) Constant 1065353216 135(out_fragColor): 133(ptr) Variable Output
138: 7(int) Constant 27
136: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 137 132 18 138 12 21 137 135(out_fragColor) 67
141: 39(float) Constant 1065353216
14(main): 4 Function None 5 14(main): 4 Function None 5
15: Label 15: Label
48(meshData): 45(ptr) Variable Function 53(meshData): 50(ptr) Variable Function
92(vertex_pos0): 90(ptr) Variable Function 98(vertex_pos0): 96(ptr) Variable Function
26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17 26: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
27: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12 27: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12
25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main) 25: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main)
53: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 32 32 12 12 58: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 38 38 12 12
51: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 49 48(meshData) 52 56: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 54 53(meshData) 57
79: 7(int) Load 76(tri_idx0) 85: 7(int) Load 82(tri_idx0)
82: 80(ptr) AccessChain 67(perPass_meshes) 73 79 88: 86(ptr) AccessChain 73(perPass_meshes) 79 85
83: 54(Mesh) Load 82 89: 59(Mesh) Load 88
84: 28(ptr) CompositeExtract 83 0 90: 28(ptr) CompositeExtract 89 0
87: 85(ptr) AccessChain 48(meshData) 73 93: 91(ptr) AccessChain 53(meshData) 79
Store 87 84 Store 93 90
97: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 95 95 12 12 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 35 35 12 12
96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 93 92(vertex_pos0) 52 101: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 99 98(vertex_pos0) 57
98: 85(ptr) AccessChain 48(meshData) 73 103: 91(ptr) AccessChain 53(meshData) 79
99: 28(ptr) Load 98 104: 28(ptr) Load 103
100: 7(int) Load 76(tri_idx0) 105: 7(int) Load 82(tri_idx0)
101: 7(int) IMul 13 100 106: 7(int) IMul 13 105
105: 102(ptr) AccessChain 99 73 101 109: 107(ptr) AccessChain 104 79 106
106: 33(float) Load 105 Aligned 4 110: 39(float) Load 109 Aligned 4
108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 109 109 12 12 112: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 113 113 12 12
107: 85(ptr) AccessChain 48(meshData) 73 111: 91(ptr) AccessChain 53(meshData) 79
110: 28(ptr) Load 107 114: 28(ptr) Load 111
111: 7(int) Load 76(tri_idx0) 115: 7(int) Load 82(tri_idx0)
112: 7(int) IMul 13 111 116: 7(int) IMul 13 115
113: 7(int) IAdd 112 22 117: 7(int) IAdd 116 22
114: 102(ptr) AccessChain 110 73 113 118: 107(ptr) AccessChain 114 79 117
115: 33(float) Load 114 Aligned 4 119: 39(float) Load 118 Aligned 4
117: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 118 118 12 12 121: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 122 122 12 12
116: 85(ptr) AccessChain 48(meshData) 73 120: 91(ptr) AccessChain 53(meshData) 79
119: 28(ptr) Load 116 123: 28(ptr) Load 120
120: 7(int) Load 76(tri_idx0) 124: 7(int) Load 82(tri_idx0)
121: 7(int) IMul 13 120 125: 7(int) IMul 13 124
122: 7(int) IAdd 121 24 126: 7(int) IAdd 125 24
123: 102(ptr) AccessChain 119 73 122 127: 107(ptr) AccessChain 123 79 126
124: 33(float) Load 123 Aligned 4 128: 39(float) Load 127 Aligned 4
125: 88(fvec3) CompositeConstruct 106 115 124 129: 94(fvec3) CompositeConstruct 110 119 128
126: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 95 95 12 12 130: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 35 35 12 12
Store 92(vertex_pos0) 125 Store 98(vertex_pos0) 129
136: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 134 134 12 12 140: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 138 138 12 12
135: 88(fvec3) Load 92(vertex_pos0) 139: 94(fvec3) Load 98(vertex_pos0)
138: 33(float) CompositeExtract 135 0 142: 39(float) CompositeExtract 139 0
139: 33(float) CompositeExtract 135 1 143: 39(float) CompositeExtract 139 1
140: 33(float) CompositeExtract 135 2 144: 39(float) CompositeExtract 139 2
141: 127(fvec4) CompositeConstruct 138 139 140 137 145: 131(fvec4) CompositeConstruct 142 143 144 141
Store 131(out_fragColor) 141 Store 135(out_fragColor) 145
Return Return
FunctionEnd FunctionEnd