From 81f7045aa00e1122a05b19a1fabf0ab22ddabb7b Mon Sep 17 00:00:00 2001 From: Arcady Goldmints-Orlov Date: Mon, 11 Mar 2024 18:53:37 -0400 Subject: [PATCH] Emit debug info for buffer references Using OpExtInstWithForwardRefs, the debug type information for buffer reference types can be emitted alongside the OpFowardPointer opcode. --- SPIRV/SpvBuilder.cpp | 36 +++ SPIRV/SpvBuilder.h | 1 + .../spv.debuginfo.bufferref.glsl.frag.out | 297 +++++++++--------- 3 files changed, 188 insertions(+), 146 deletions(-) diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index f07460d2..42fca364 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -182,6 +182,10 @@ Id Builder::makeForwardPointer(StorageClass storageClass) constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (emitNonSemanticShaderDebugInfo) { + const Id debugResultId = makeForwardPointerDebugType(storageClass); + debugId[type->getResultId()] = debugResultId; + } return type->getResultId(); } @@ -204,6 +208,15 @@ Id Builder::makePointerFromForwardPointer(StorageClass storageClass, Id forwardP constantsTypesGlobals.push_back(std::unique_ptr(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(); } @@ -1045,6 +1058,29 @@ Id Builder::makePointerDebugType(StorageClass storageClass, Id const baseType) 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(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + Id Builder::makeDebugSource(const Id fileName) { if (debugSourceId.find(fileName) != debugSourceId.end()) return debugSourceId[fileName]; diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index fd04f630..35327d6e 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -235,6 +235,7 @@ public: Id makeCompositeDebugType(std::vector const& memberTypes, char const*const name, NonSemanticShaderDebugInfo100DebugCompositeType const tag, bool const isOpaqueType = false); Id makePointerDebugType(StorageClass storageClass, Id const baseType); + Id makeForwardPointerDebugType(StorageClass storageClass); Id makeDebugSource(const Id fileName); Id makeDebugCompilationUnit(); Id createDebugGlobalVariable(Id const type, char const*const name, Id const variable); diff --git a/Test/baseResults/spv.debuginfo.bufferref.glsl.frag.out b/Test/baseResults/spv.debuginfo.bufferref.glsl.frag.out index f4628811..6b877bf5 100644 --- a/Test/baseResults/spv.debuginfo.bufferref.glsl.frag.out +++ b/Test/baseResults/spv.debuginfo.bufferref.glsl.frag.out @@ -1,17 +1,18 @@ spv.debuginfo.bufferref.glsl.frag // Module Version 10000 // Generated by (magic number): 8000b -// Id's are bound by 142 +// Id's are bound by 146 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_non_semantic_info" Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_relaxed_extended_instruction" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "NonSemantic.Shader.DebugInfo.100" 3: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 - EntryPoint Fragment 14 "main" 76 131 + EntryPoint Fragment 14 "main" 82 135 ExecutionMode 14 OriginUpperLeft 2: String "spv.debuginfo.bufferref.glsl.frag" 8: String "uint" @@ -52,46 +53,47 @@ void main() { out_fragColor = vec4(vertex_pos0, 1.0); } " - 31: String "Mesh" - 34: String "float" - 40: String "data" - 44: String "MeshVertexPositions" - 50: String "meshData" - 63: String "PerPass_meshes" - 69: String "perPass_meshes" - 71: String "int" - 78: String "tri_idx0" - 94: String "vertex_pos0" - 133: String "out_fragColor" + 33: String "positions" + 37: String "Mesh" + 40: String "float" + 46: String "data" + 49: String "MeshVertexPositions" + 55: String "meshData" + 69: String "PerPass_meshes" + 75: String "perPass_meshes" + 77: String "int" + 84: String "tri_idx0" + 100: String "vertex_pos0" + 137: String "out_fragColor" SourceExtension "GL_EXT_buffer_reference" Name 14 "main" - Name 29 "Mesh" - MemberName 29(Mesh) 0 "positions" - Name 38 "MeshVertexPositions" - MemberName 38(MeshVertexPositions) 0 "data" - Name 48 "meshData" - Name 54 "Mesh" - MemberName 54(Mesh) 0 "positions" - Name 58 "PerPass_meshes" - MemberName 58(PerPass_meshes) 0 "data" - Name 67 "perPass_meshes" - Name 76 "tri_idx0" - Name 92 "vertex_pos0" - Name 131 "out_fragColor" - Decorate 36 ArrayStride 4 - MemberDecorate 38(MeshVertexPositions) 0 Offset 0 - Decorate 38(MeshVertexPositions) Block - MemberDecorate 54(Mesh) 0 Offset 0 - Decorate 56 ArrayStride 8 - MemberDecorate 58(PerPass_meshes) 0 NonWritable - MemberDecorate 58(PerPass_meshes) 0 Offset 0 - Decorate 58(PerPass_meshes) Block - Decorate 67(perPass_meshes) DescriptorSet 0 - Decorate 67(perPass_meshes) Binding 0 - Decorate 76(tri_idx0) Flat - Decorate 76(tri_idx0) Location 0 - Decorate 131(out_fragColor) Location 0 - Decorate 48(meshData) DecorationAliasedPointerEXT + Name 31 "Mesh" + MemberName 31(Mesh) 0 "positions" + Name 44 "MeshVertexPositions" + MemberName 44(MeshVertexPositions) 0 "data" + Name 53 "meshData" + Name 59 "Mesh" + MemberName 59(Mesh) 0 "positions" + Name 64 "PerPass_meshes" + MemberName 64(PerPass_meshes) 0 "data" + Name 73 "perPass_meshes" + Name 82 "tri_idx0" + Name 98 "vertex_pos0" + Name 135 "out_fragColor" + Decorate 42 ArrayStride 4 + MemberDecorate 44(MeshVertexPositions) 0 Offset 0 + Decorate 44(MeshVertexPositions) Block + MemberDecorate 59(Mesh) 0 Offset 0 + Decorate 62 ArrayStride 8 + MemberDecorate 64(PerPass_meshes) 0 NonWritable + MemberDecorate 64(PerPass_meshes) 0 Offset 0 + Decorate 64(PerPass_meshes) Block + Decorate 73(perPass_meshes) DescriptorSet 0 + Decorate 73(perPass_meshes) Binding 0 + Decorate 82(tri_idx0) Flat + Decorate 82(tri_idx0) Location 0 + Decorate 135(out_fragColor) Location 0 + Decorate 53(meshData) DecorationAliasedPointerEXT 4: TypeVoid 5: TypeFunction 4 7: TypeInt 32 0 @@ -109,116 +111,119 @@ void main() { 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 TypeForwardPointer 28 PhysicalStorageBufferEXT - 29(Mesh): TypeStruct 28 - 32: 7(int) Constant 21 - 30: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 31 22 18 32 12 21 31 12 13 - 33: TypeFloat 32 - 35: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 34 10 13 12 - 36: TypeRuntimeArray 33(float) - 37: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 35 12 -38(MeshVertexPositions): TypeStruct 36 - 41: 7(int) Constant 5 - 42: 7(int) Constant 9 - 39: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 40 37 18 41 42 12 12 13 - 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 44 22 18 32 12 21 44 12 13 39 - 28: TypePointer PhysicalStorageBufferEXT 38(MeshVertexPositions) - 45: TypePointer Function 29(Mesh) - 46: 7(int) Constant 7 - 47: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 46 12 - 49: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 30 18 32 12 17 23 - 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression) - 54(Mesh): TypeStruct 28(ptr) - 55: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 31 22 18 32 12 21 31 12 13 - 56: TypeRuntimeArray 54(Mesh) - 57: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 55 12 -58(PerPass_meshes): TypeStruct 56 - 60: 7(int) Constant 13 - 61: 7(int) Constant 8 - 59: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 40 57 18 60 61 12 12 13 - 62: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 63 22 18 32 12 21 63 12 13 59 - 64: TypePointer StorageBuffer 58(PerPass_meshes) - 65: 7(int) Constant 12 - 66: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 62 65 12 -67(perPass_meshes): 64(ptr) Variable StorageBuffer - 68: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 69 62 18 32 12 21 69 67(perPass_meshes) 61 - 70: TypeInt 32 1 - 72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 71 10 23 12 - 73: 70(int) Constant 0 - 74: TypePointer Input 7(int) - 75: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 22 12 - 76(tri_idx0): 74(ptr) Variable Input - 77: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 78 9 18 32 12 21 78 76(tri_idx0) 61 - 80: TypePointer StorageBuffer 54(Mesh) - 81: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 55 65 12 - 85: TypePointer Function 28(ptr) - 86: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone) - 88: TypeVector 33(float) 3 - 89: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 35 13 - 90: TypePointer Function 88(fvec3) - 91: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 89 46 12 - 95: 7(int) Constant 23 - 93: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 94 89 18 95 12 17 23 - 102: TypePointer PhysicalStorageBufferEXT 33(float) - 103: 7(int) Constant 5349 - 104: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 35 103 12 - 109: 7(int) Constant 24 - 118: 7(int) Constant 25 - 127: TypeVector 33(float) 4 - 128: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 35 23 - 129: TypePointer Output 127(fvec4) - 130: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 128 13 12 -131(out_fragColor): 129(ptr) Variable Output - 134: 7(int) Constant 27 - 132: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 133 128 18 134 12 21 133 131(out_fragColor) 61 - 137: 33(float) Constant 1065353216 + 29: 7(int) Constant 5349 + 30: 4 ExtInstWithForwardRefs 1(NonSemantic.Shader.DebugInfo.100) 3 48 29 12 + 31(Mesh): TypeStruct 28 + 34: 7(int) Constant 9 + 35: 7(int) Constant 23 + 32: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 33 30 18 34 35 12 12 13 + 38: 7(int) Constant 21 + 36: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 37 22 18 38 12 21 37 12 13 32 + 39: TypeFloat 32 + 41: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 40 10 13 12 + 42: TypeRuntimeArray 39(float) + 43: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 41 12 +44(MeshVertexPositions): TypeStruct 42 + 47: 7(int) Constant 5 + 45: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 46 43 18 47 34 12 12 13 + 48: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 49 22 18 38 12 21 49 12 13 45 + 28: TypePointer PhysicalStorageBufferEXT 44(MeshVertexPositions) + 50: TypePointer Function 31(Mesh) + 51: 7(int) Constant 7 + 52: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 36 51 12 + 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) 31(DebugExpression) + 59(Mesh): TypeStruct 28(ptr) + 60: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 33 30 18 34 35 12 12 13 + 61: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 37 22 18 38 12 21 37 12 13 60 + 62: TypeRuntimeArray 59(Mesh) + 63: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 61 12 +64(PerPass_meshes): TypeStruct 62 + 66: 7(int) Constant 13 + 67: 7(int) Constant 8 + 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) 10(DebugTypeComposite) 69 22 18 38 12 21 69 12 13 65 + 70: TypePointer StorageBuffer 64(PerPass_meshes) + 71: 7(int) Constant 12 + 72: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 68 71 12 +73(perPass_meshes): 70(ptr) Variable StorageBuffer + 74: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 75 68 18 38 12 21 75 73(perPass_meshes) 67 + 76: TypeInt 32 1 + 78: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 77 10 23 12 + 79: 76(int) Constant 0 + 80: TypePointer Input 7(int) + 81: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 22 12 + 82(tri_idx0): 80(ptr) Variable Input + 83: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 84 9 18 38 12 21 84 82(tri_idx0) 67 + 86: TypePointer StorageBuffer 59(Mesh) + 87: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 61 71 12 + 91: TypePointer Function 28(ptr) + 92: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 51 12 + 94: TypeVector 39(float) 3 + 95: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 41 13 + 96: TypePointer Function 94(fvec3) + 97: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 95 51 12 + 99: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 100 95 18 35 12 17 23 + 107: TypePointer PhysicalStorageBufferEXT 39(float) + 108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 41 29 12 + 113: 7(int) Constant 24 + 122: 7(int) Constant 25 + 131: TypeVector 39(float) 4 + 132: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 41 23 + 133: TypePointer Output 131(fvec4) + 134: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 132 13 12 +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 15: Label - 48(meshData): 45(ptr) Variable Function - 92(vertex_pos0): 90(ptr) Variable Function + 53(meshData): 50(ptr) Variable Function + 98(vertex_pos0): 96(ptr) Variable Function 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 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 - 51: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 49 48(meshData) 52 - 79: 7(int) Load 76(tri_idx0) - 82: 80(ptr) AccessChain 67(perPass_meshes) 73 79 - 83: 54(Mesh) Load 82 - 84: 28(ptr) CompositeExtract 83 0 - 87: 85(ptr) AccessChain 48(meshData) 73 - Store 87 84 - 97: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 95 95 12 12 - 96: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 93 92(vertex_pos0) 52 - 98: 85(ptr) AccessChain 48(meshData) 73 - 99: 28(ptr) Load 98 - 100: 7(int) Load 76(tri_idx0) - 101: 7(int) IMul 13 100 - 105: 102(ptr) AccessChain 99 73 101 - 106: 33(float) Load 105 Aligned 4 - 108: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 109 109 12 12 - 107: 85(ptr) AccessChain 48(meshData) 73 - 110: 28(ptr) Load 107 - 111: 7(int) Load 76(tri_idx0) - 112: 7(int) IMul 13 111 - 113: 7(int) IAdd 112 22 - 114: 102(ptr) AccessChain 110 73 113 - 115: 33(float) Load 114 Aligned 4 - 117: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 118 118 12 12 - 116: 85(ptr) AccessChain 48(meshData) 73 - 119: 28(ptr) Load 116 - 120: 7(int) Load 76(tri_idx0) - 121: 7(int) IMul 13 120 - 122: 7(int) IAdd 121 24 - 123: 102(ptr) AccessChain 119 73 122 - 124: 33(float) Load 123 Aligned 4 - 125: 88(fvec3) CompositeConstruct 106 115 124 - 126: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 95 95 12 12 - Store 92(vertex_pos0) 125 - 136: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 134 134 12 12 - 135: 88(fvec3) Load 92(vertex_pos0) - 138: 33(float) CompositeExtract 135 0 - 139: 33(float) CompositeExtract 135 1 - 140: 33(float) CompositeExtract 135 2 - 141: 127(fvec4) CompositeConstruct 138 139 140 137 - Store 131(out_fragColor) 141 + 58: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 38 38 12 12 + 56: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 54 53(meshData) 57 + 85: 7(int) Load 82(tri_idx0) + 88: 86(ptr) AccessChain 73(perPass_meshes) 79 85 + 89: 59(Mesh) Load 88 + 90: 28(ptr) CompositeExtract 89 0 + 93: 91(ptr) AccessChain 53(meshData) 79 + Store 93 90 + 102: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 35 35 12 12 + 101: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 99 98(vertex_pos0) 57 + 103: 91(ptr) AccessChain 53(meshData) 79 + 104: 28(ptr) Load 103 + 105: 7(int) Load 82(tri_idx0) + 106: 7(int) IMul 13 105 + 109: 107(ptr) AccessChain 104 79 106 + 110: 39(float) Load 109 Aligned 4 + 112: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 113 113 12 12 + 111: 91(ptr) AccessChain 53(meshData) 79 + 114: 28(ptr) Load 111 + 115: 7(int) Load 82(tri_idx0) + 116: 7(int) IMul 13 115 + 117: 7(int) IAdd 116 22 + 118: 107(ptr) AccessChain 114 79 117 + 119: 39(float) Load 118 Aligned 4 + 121: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 122 122 12 12 + 120: 91(ptr) AccessChain 53(meshData) 79 + 123: 28(ptr) Load 120 + 124: 7(int) Load 82(tri_idx0) + 125: 7(int) IMul 13 124 + 126: 7(int) IAdd 125 24 + 127: 107(ptr) AccessChain 123 79 126 + 128: 39(float) Load 127 Aligned 4 + 129: 94(fvec3) CompositeConstruct 110 119 128 + 130: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 35 35 12 12 + Store 98(vertex_pos0) 129 + 140: 4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 138 138 12 12 + 139: 94(fvec3) Load 98(vertex_pos0) + 142: 39(float) CompositeExtract 139 0 + 143: 39(float) CompositeExtract 139 1 + 144: 39(float) CompositeExtract 139 2 + 145: 131(fvec4) CompositeConstruct 142 143 144 141 + Store 135(out_fragColor) 145 Return FunctionEnd