; The module of debug_info.ps.dxil (its listing's IR) with a named metadata list of the debug nodes no HLSL
; compiler writes: GenericDINode, DILexicalBlockFile, DIModule, DIObjCProperty, DIImportedEntity, and nodes whose
; fields take the printer's other paths (an unspecified type, a negative subrange, flag bits without a name, a
; tag without a name, invalid expressions, a distinct location). ../disasm/assemble.py assembles it with
; dxcompiler 1.9.2609's IDxcAssembler into debug_nodes.dxil, which dxc -dumpbin lists.
target datalayout = "e-m:e-p:32:32-i1:32-i8:32-i16:32-i32:32-i64:64-f16:32-f32:32-f64:64-n8:16:32:64"
target triple = "dxil-ms-dx"
%dx.types.Handle = type { i8* }
%dx.types.ResRet.f32 = type { float, float, float, float, i32 }
%dx.types.CBufRet.i32 = type { i32, i32, i32, i32 }
%dx.types.CBufRet.f32 = type { float, float, float, float }
%"class.Texture2D<vector<float, 4> >" = type { <4 x float>, %"class.Texture2D<vector<float, 4> >::mips_type" }
%"class.Texture2D<vector<float, 4> >::mips_type" = type { i32 }
%hostlayout.C = type { [4 x <4 x float>], <4 x float>, i32, i32 }
%struct.SamplerState = type { i32 }
define void @ps() {
.lr.ph:
%t_texture_2d = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 0, i32 0, i32 0, i1 false), !dbg !152
%ss_sampler = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 3, i32 0, i32 0, i1 false), !dbg !152
%C_cbuffer = call %dx.types.Handle @dx.op.createHandle(i32 57, i8 2, i32 0, i32 0, i1 false), !dbg !152
%0 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 0, i32 undef), !dbg !156
%1 = call float @dx.op.loadInput.f32(i32 4, i32 1, i32 0, i8 1, i32 undef), !dbg !156
call void @llvm.dbg.value(metadata float %0, i64 0, metadata !157, metadata !158), !dbg !156
call void @llvm.dbg.value(metadata float %1, i64 0, metadata !157, metadata !159), !dbg !156
call void @llvm.dbg.value(metadata <4 x float> zeroinitializer, i64 0, metadata !160, metadata !161), !dbg !162
call void @llvm.dbg.value(metadata <4 x float> zeroinitializer, i64 0, metadata !163, metadata !161), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !158), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !158), !dbg !162
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !166, metadata !167), !dbg !168
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !169), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !170), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !171), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !172), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !169), !dbg !162
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !170), !dbg !162
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !171), !dbg !162
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !172), !dbg !162
call void @llvm.dbg.value(metadata float %0, i64 0, metadata !173, metadata !169), !dbg !174
call void @llvm.dbg.value(metadata float %1, i64 0, metadata !173, metadata !170), !dbg !174
%2 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %t_texture_2d, %dx.types.Handle %ss_sampler, float %0, float %1, float undef, float undef, i32 0, i32 0, i32 undef, float undef), !dbg !152
call void @llvm.dbg.value(metadata %dx.types.ResRet.f32 %2, i64 0, metadata !175, metadata !167), !dbg !176
%3 = extractvalue %dx.types.ResRet.f32 %2, 0, !dbg !152
%4 = extractvalue %dx.types.ResRet.f32 %2, 1, !dbg !152
%5 = extractvalue %dx.types.ResRet.f32 %2, 2, !dbg !152
%6 = extractvalue %dx.types.ResRet.f32 %2, 3, !dbg !152
call void @llvm.dbg.value(metadata float 2.500000e-01, i64 0, metadata !177, metadata !167), !dbg !178
call void @llvm.dbg.value(metadata float 2.500000e-01, i64 0, metadata !179, metadata !158), !dbg !180
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !158), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !158), !dbg !162
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !166, metadata !167), !dbg !168
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !169), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !170), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !171), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !172), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !169), !dbg !162
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !170), !dbg !162
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !171), !dbg !162
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !172), !dbg !162
%.i01.1 = fadd fast float %0, 0x3F847AE140000000, !dbg !181
call void @llvm.dbg.value(metadata float %0, i64 0, metadata !173, metadata !169), !dbg !174
call void @llvm.dbg.value(metadata float %1, i64 0, metadata !173, metadata !170), !dbg !174
%7 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %t_texture_2d, %dx.types.Handle %ss_sampler, float %.i01.1, float %1, float undef, float undef, i32 0, i32 0, i32 undef, float undef), !dbg !152
call void @llvm.dbg.value(metadata %dx.types.ResRet.f32 %2, i64 0, metadata !175, metadata !167), !dbg !176
%8 = extractvalue %dx.types.ResRet.f32 %7, 0, !dbg !152
%9 = extractvalue %dx.types.ResRet.f32 %7, 1, !dbg !152
%10 = extractvalue %dx.types.ResRet.f32 %7, 2, !dbg !152
%11 = extractvalue %dx.types.ResRet.f32 %7, 3, !dbg !152
call void @llvm.dbg.value(metadata float 2.500000e-01, i64 0, metadata !177, metadata !167), !dbg !178
%.i03.1 = fmul fast float %8, 5.000000e-01, !dbg !182
%.i14.1 = fmul fast float %9, 5.000000e-01, !dbg !182
%.i25.1 = fmul fast float %10, 5.000000e-01, !dbg !182
%.i36.1 = fmul fast float %11, 5.000000e-01, !dbg !182
call void @llvm.dbg.value(metadata float 2.500000e-01, i64 0, metadata !179, metadata !158), !dbg !180
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !158), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !158), !dbg !162
call void @llvm.dbg.value(metadata i32 0, i64 0, metadata !166, metadata !167), !dbg !168
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !169), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !170), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !171), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !163, metadata !172), !dbg !164
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !169), !dbg !162
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !170), !dbg !162
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !171), !dbg !162
call void @llvm.dbg.value(metadata float 0.000000e+00, i64 0, metadata !160, metadata !172), !dbg !162
%.i01.2 = fadd fast float %0, 0x3F947AE140000000, !dbg !181
call void @llvm.dbg.value(metadata float %0, i64 0, metadata !173, metadata !169), !dbg !174
call void @llvm.dbg.value(metadata float %1, i64 0, metadata !173, metadata !170), !dbg !174
%12 = call %dx.types.ResRet.f32 @dx.op.sample.f32(i32 60, %dx.types.Handle %t_texture_2d, %dx.types.Handle %ss_sampler, float %.i01.2, float %1, float undef, float undef, i32 0, i32 0, i32 undef, float undef), !dbg !152
call void @llvm.dbg.value(metadata %dx.types.ResRet.f32 %2, i64 0, metadata !175, metadata !167), !dbg !176
%13 = extractvalue %dx.types.ResRet.f32 %12, 0, !dbg !152
%14 = extractvalue %dx.types.ResRet.f32 %12, 1, !dbg !152
%15 = extractvalue %dx.types.ResRet.f32 %12, 2, !dbg !152
%16 = extractvalue %dx.types.ResRet.f32 %12, 3, !dbg !152
call void @llvm.dbg.value(metadata float 2.500000e-01, i64 0, metadata !177, metadata !167), !dbg !178
%tmp = fadd fast float %13, %3
%tmp33 = fmul fast float %tmp, 2.500000e-01
%.i0.2 = fadd fast float %tmp33, %.i03.1, !dbg !183
%tmp34 = fadd fast float %14, %4
%tmp35 = fmul fast float %tmp34, 2.500000e-01
%.i1.2 = fadd fast float %tmp35, %.i14.1, !dbg !183
%tmp36 = fadd fast float %15, %5
%tmp37 = fmul fast float %tmp36, 2.500000e-01
%.i2.2 = fadd fast float %tmp37, %.i25.1, !dbg !183
%tmp38 = fadd fast float %16, %6
%tmp39 = fmul fast float %tmp38, 2.500000e-01
%.i3.2 = fadd fast float %tmp39, %.i36.1, !dbg !183
call void @llvm.dbg.value(metadata float 2.500000e-01, i64 0, metadata !179, metadata !158), !dbg !180
call void @llvm.dbg.value(metadata i32 1, i64 0, metadata !166, metadata !167), !dbg !168
call void @llvm.dbg.value(metadata float 2.500000e-01, i64 0, metadata !163, metadata !158), !dbg !164
call void @llvm.dbg.value(metadata float 2.500000e-01, i64 0, metadata !160, metadata !158), !dbg !162
%17 = call %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32 59, %dx.types.Handle %C_cbuffer, i32 5), !dbg !184
%18 = extractvalue %dx.types.CBufRet.i32 %17, 0, !dbg !184
call void @llvm.dbg.value(metadata i32 %18, i64 0, metadata !185, metadata !167), !dbg !186
call void @llvm.dbg.value(metadata float %.i0.2, i64 0, metadata !188, metadata !169), !dbg !189
call void @llvm.dbg.value(metadata float %.i1.2, i64 0, metadata !188, metadata !170), !dbg !189
call void @llvm.dbg.value(metadata float %.i2.2, i64 0, metadata !188, metadata !171), !dbg !189
call void @llvm.dbg.value(metadata float %.i3.2, i64 0, metadata !188, metadata !172), !dbg !189
%19 = icmp eq i32 %18, -3, !dbg !190
br i1 %19, label %20, label %21, !dbg !192
; <label>:20 ; preds = %.lr.ph
%.i015 = fsub fast float 1.000000e+00, %.i0.2, !dbg !193
%.i116 = fsub fast float 1.000000e+00, %.i1.2, !dbg !193
%.i217 = fsub fast float 1.000000e+00, %.i2.2, !dbg !193
%.i318 = fsub fast float 1.000000e+00, %.i3.2, !dbg !193
call void @llvm.dbg.value(metadata float %.i015, i64 0, metadata !195, metadata !169), !dbg !196
call void @llvm.dbg.value(metadata float %.i116, i64 0, metadata !195, metadata !170), !dbg !196
call void @llvm.dbg.value(metadata float %.i217, i64 0, metadata !195, metadata !171), !dbg !196
call void @llvm.dbg.value(metadata float %.i318, i64 0, metadata !195, metadata !172), !dbg !196
br label %"\01?tint@Shade@@YA?AV?$vector@M$03@@V2@W4Mode@1@@Z.exit", !dbg !197
; <label>:21 ; preds = %.lr.ph
%22 = icmp eq i32 %18, 2, !dbg !198
%.i120 = fmul fast float %.i1.2, 5.000000e-01, !dbg !199
%.i221 = fmul fast float %.i2.2, 5.000000e-01, !dbg !199
%.i124 = select i1 %22, float %.i120, float %.i1.2, !dbg !200
%.i225 = select i1 %22, float %.i221, float %.i2.2, !dbg !200
br label %"\01?tint@Shade@@YA?AV?$vector@M$03@@V2@W4Mode@1@@Z.exit", !dbg !201
"\01?tint@Shade@@YA?AV?$vector@M$03@@V2@W4Mode@1@@Z.exit": ; preds = %21, %20
%.0.i0 = phi float [ %.i015, %20 ], [ %.i0.2, %21 ]
%.0.i1 = phi float [ %.i116, %20 ], [ %.i124, %21 ]
%.0.i2 = phi float [ %.i217, %20 ], [ %.i225, %21 ]
%.0.i3 = phi float [ %.i318, %20 ], [ %.i3.2, %21 ]
%23 = call %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32 59, %dx.types.Handle %C_cbuffer, i32 4), !dbg !202
%24 = extractvalue %dx.types.CBufRet.f32 %23, 0, !dbg !202
%25 = extractvalue %dx.types.CBufRet.f32 %23, 1, !dbg !202
%26 = extractvalue %dx.types.CBufRet.f32 %23, 2, !dbg !202
%27 = extractvalue %dx.types.CBufRet.f32 %23, 3, !dbg !202
%.i027 = fmul fast float %24, %.0.i0, !dbg !203
%.i128 = fmul fast float %25, %.0.i1, !dbg !203
%.i229 = fmul fast float %26, %.0.i2, !dbg !203
%.i330 = fmul fast float %27, %.0.i3, !dbg !203
call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 0, float %.i027), !dbg !204
call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 1, float %.i128), !dbg !204
call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 2, float %.i229), !dbg !204
call void @dx.op.storeOutput.f32(i32 5, i32 0, i32 0, i8 3, float %.i330), !dbg !204
ret void, !dbg !204
}
; Function Attrs: nounwind readnone
declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #0
; Function Attrs: nounwind readnone
declare float @dx.op.loadInput.f32(i32, i32, i32, i8, i32) #0
; Function Attrs: nounwind
declare void @dx.op.storeOutput.f32(i32, i32, i32, i8, float) #1
; Function Attrs: nounwind readonly
declare %dx.types.ResRet.f32 @dx.op.sample.f32(i32, %dx.types.Handle, %dx.types.Handle, float, float, float, float, i32, i32, i32, float) #2
; Function Attrs: nounwind readonly
declare %dx.types.CBufRet.i32 @dx.op.cbufferLoadLegacy.i32(i32, %dx.types.Handle, i32) #2
; Function Attrs: nounwind readonly
declare %dx.types.CBufRet.f32 @dx.op.cbufferLoadLegacy.f32(i32, %dx.types.Handle, i32) #2
; Function Attrs: nounwind readonly
declare %dx.types.Handle @dx.op.createHandle(i32, i8, i32, i32, i1) #2
attributes #0 = { nounwind readnone }
attributes #1 = { nounwind }
attributes #2 = { nounwind readonly }
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!114, !115}
!llvm.ident = !{!116}
!dx.source.contents = !{!117}
!dx.source.defines = !{!107}
!dx.source.mainFileName = !{!118}
!dx.source.args = !{!119}
!dx.version = !{!120}
!dx.valver = !{!121}
!dx.shaderModel = !{!122}
!dx.resources = !{!123}
!dx.typeAnnotations = !{!131, !138}
!dx.viewIdState = !{!141}
!dx.entryPoints = !{!142}
!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "dxcoob 1.9.2609.5 (01b62ad47)", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !2, retainedTypes: !9, subprograms: !29, globals: !66)
!1 = !DIFile(filename: "debug_info.hlsl", directory: "")
!2 = !{!3}
!3 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Mode", scope: !4, file: !1, line: 17, size: 32, align: 32, elements: !5)
!4 = !DINamespace(name: "Shade", scope: null, file: !1, line: 16)
!5 = !{!6, !7, !8}
!6 = !DIEnumerator(name: "Plain", value: 0)
!7 = !DIEnumerator(name: "Tinted", value: 2)
!8 = !DIEnumerator(name: "Inverted", value: -3)
!9 = !{!10, !22, !3}
!10 = !DIDerivedType(tag: DW_TAG_typedef, name: "float4", file: !1, line: 27, baseType: !11)
!11 = !DICompositeType(tag: DW_TAG_class_type, name: "vector<float, 4>", file: !1, line: 27, size: 128, align: 32, elements: !12, templateParams: !18)
!12 = !{!13, !15, !16, !17}
!13 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !11, file: !1, line: 27, baseType: !14, size: 32, align: 32, flags: DIFlagPublic)
!14 = !DIBasicType(name: "float", size: 32, align: 32, encoding: DW_ATE_float)
!15 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !11, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 32, flags: DIFlagPublic)
!16 = !DIDerivedType(tag: DW_TAG_member, name: "z", scope: !11, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 64, flags: DIFlagPublic)
!17 = !DIDerivedType(tag: DW_TAG_member, name: "w", scope: !11, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 96, flags: DIFlagPublic)
!18 = !{!19, !20}
!19 = !DITemplateTypeParameter(name: "element", type: !14)
!20 = !DITemplateValueParameter(name: "element_count", type: !21, value: i32 4)
!21 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!22 = !DIDerivedType(tag: DW_TAG_typedef, name: "float2", file: !1, line: 27, baseType: !23)
!23 = !DICompositeType(tag: DW_TAG_class_type, name: "vector<float, 2>", file: !1, line: 27, size: 64, align: 32, elements: !24, templateParams: !27)
!24 = !{!25, !26}
!25 = !DIDerivedType(tag: DW_TAG_member, name: "x", scope: !23, file: !1, line: 27, baseType: !14, size: 32, align: 32, flags: DIFlagPublic)
!26 = !DIDerivedType(tag: DW_TAG_member, name: "y", scope: !23, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 32, flags: DIFlagPublic)
!27 = !{!19, !28}
!28 = !DITemplateValueParameter(name: "element_count", type: !21, value: i32 2)
!29 = !{!30, !37, !56, !63}
!30 = !DISubprogram(name: "ps", scope: !1, file: !1, line: 44, type: !31, isLocal: false, isDefinition: true, scopeLine: 44, flags: DIFlagPrototyped, isOptimized: false, function: void ()* @ps)
!31 = !DISubroutineType(types: !32)
!32 = !{!10, !33}
!33 = !DICompositeType(tag: DW_TAG_structure_type, name: "V", file: !1, line: 30, size: 192, align: 32, elements: !34)
!34 = !{!35, !36}
!35 = !DIDerivedType(tag: DW_TAG_member, name: "p", scope: !33, file: !1, line: 30, baseType: !10, size: 128, align: 32)
!36 = !DIDerivedType(tag: DW_TAG_member, name: "uv", scope: !33, file: !1, line: 30, baseType: !22, size: 64, align: 32, offset: 128)
!37 = !DISubprogram(name: "pc", linkageName: "\01?pc@@YA?AUPC@@V?$InputPatch@UV@@$02@@@Z", scope: !1, file: !1, line: 60, type: !38, isLocal: false, isDefinition: true, scopeLine: 60, flags: DIFlagPrototyped, isOptimized: false)
!38 = !DISubroutineType(types: !39)
!39 = !{!40, !47}
!40 = !DICompositeType(tag: DW_TAG_structure_type, name: "PC", file: !1, line: 59, size: 128, align: 32, elements: !41)
!41 = !{!42, !46}
!42 = !DIDerivedType(tag: DW_TAG_member, name: "e", scope: !40, file: !1, line: 59, baseType: !43, size: 96, align: 32)
!43 = !DICompositeType(tag: DW_TAG_array_type, baseType: !14, size: 96, align: 32, elements: !44)
!44 = !{!45}
!45 = !DISubrange(count: 3)
!46 = !DIDerivedType(tag: DW_TAG_member, name: "n", scope: !40, file: !1, line: 59, baseType: !14, size: 32, align: 32, offset: 96)
!47 = !DICompositeType(tag: DW_TAG_class_type, name: "InputPatch<V, 3>", file: !1, line: 51, size: 576, align: 32, elements: !48, templateParams: !53)
!48 = !{!49, !51}
!49 = !DIDerivedType(tag: DW_TAG_member, name: "Length", scope: !47, file: !1, line: 51, baseType: !50, flags: DIFlagPublic | DIFlagStaticMember, extraData: i32 3)
!50 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !21)
!51 = !DIDerivedType(tag: DW_TAG_member, name: "h", scope: !47, file: !1, line: 51, baseType: !52, size: 576, align: 32)
!52 = !DICompositeType(tag: DW_TAG_array_type, baseType: !33, size: 576, align: 32, elements: !44)
!53 = !{!54, !55}
!54 = !DITemplateTypeParameter(name: "element", type: !33)
!55 = !DITemplateValueParameter(name: "count", type: !21, value: i32 3)
!56 = !DISubprogram(name: "accumulate", linkageName: "\01?accumulate@@YA?AUBlend@@U1@V?$vector@M$03@@M@Z", scope: !1, file: !1, line: 32, type: !57, isLocal: false, isDefinition: true, scopeLine: 32, flags: DIFlagPrototyped, isOptimized: false)
!57 = !DISubroutineType(types: !58)
!58 = !{!59, !59, !10, !14}
!59 = !DICompositeType(tag: DW_TAG_structure_type, name: "Blend", file: !1, line: 31, size: 160, align: 32, elements: !60)
!60 = !{!61, !62}
!61 = !DIDerivedType(tag: DW_TAG_member, name: "sum", scope: !59, file: !1, line: 31, baseType: !10, size: 128, align: 32)
!62 = !DIDerivedType(tag: DW_TAG_member, name: "total", scope: !59, file: !1, line: 31, baseType: !14, size: 32, align: 32, offset: 128)
!63 = !DISubprogram(name: "tint", linkageName: "\01?tint@Shade@@YA?AV?$vector@M$03@@V2@W4Mode@1@@Z", scope: !4, file: !1, line: 19, type: !64, isLocal: false, isDefinition: true, scopeLine: 19, flags: DIFlagPrototyped, isOptimized: false)
!64 = !DISubroutineType(types: !65)
!65 = !{!10, !10, !3}
!66 = !{!67, !91, !93, !94, !98, !102, !105, !110, !112}
!67 = !DIGlobalVariable(name: "wvp", linkageName: "\01?wvp@C@@3V?$matrix@M$03$03@@B", scope: !0, file: !1, line: 27, type: !68, isLocal: false, isDefinition: true)
!68 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !69)
!69 = !DIDerivedType(tag: DW_TAG_typedef, name: "float4x4", file: !1, line: 27, baseType: !70)
!70 = !DICompositeType(tag: DW_TAG_class_type, name: "matrix<float, 4, 4>", file: !1, line: 27, size: 512, align: 32, elements: !71, templateParams: !88)
!71 = !{!72, !73, !74, !75, !76, !77, !78, !79, !80, !81, !82, !83, !84, !85, !86, !87}
!72 = !DIDerivedType(tag: DW_TAG_member, name: "_11", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, flags: DIFlagPublic)
!73 = !DIDerivedType(tag: DW_TAG_member, name: "_12", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 32, flags: DIFlagPublic)
!74 = !DIDerivedType(tag: DW_TAG_member, name: "_13", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 64, flags: DIFlagPublic)
!75 = !DIDerivedType(tag: DW_TAG_member, name: "_14", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 96, flags: DIFlagPublic)
!76 = !DIDerivedType(tag: DW_TAG_member, name: "_21", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 128, flags: DIFlagPublic)
!77 = !DIDerivedType(tag: DW_TAG_member, name: "_22", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 160, flags: DIFlagPublic)
!78 = !DIDerivedType(tag: DW_TAG_member, name: "_23", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 192, flags: DIFlagPublic)
!79 = !DIDerivedType(tag: DW_TAG_member, name: "_24", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 224, flags: DIFlagPublic)
!80 = !DIDerivedType(tag: DW_TAG_member, name: "_31", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 256, flags: DIFlagPublic)
!81 = !DIDerivedType(tag: DW_TAG_member, name: "_32", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 288, flags: DIFlagPublic)
!82 = !DIDerivedType(tag: DW_TAG_member, name: "_33", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 320, flags: DIFlagPublic)
!83 = !DIDerivedType(tag: DW_TAG_member, name: "_34", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 352, flags: DIFlagPublic)
!84 = !DIDerivedType(tag: DW_TAG_member, name: "_41", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 384, flags: DIFlagPublic)
!85 = !DIDerivedType(tag: DW_TAG_member, name: "_42", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 416, flags: DIFlagPublic)
!86 = !DIDerivedType(tag: DW_TAG_member, name: "_43", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 448, flags: DIFlagPublic)
!87 = !DIDerivedType(tag: DW_TAG_member, name: "_44", scope: !70, file: !1, line: 27, baseType: !14, size: 32, align: 32, offset: 480, flags: DIFlagPublic)
!88 = !{!19, !89, !90}
!89 = !DITemplateValueParameter(name: "row_count", type: !21, value: i32 4)
!90 = !DITemplateValueParameter(name: "col_count", type: !21, value: i32 4)
!91 = !DIGlobalVariable(name: "colour", linkageName: "\01?colour@C@@3V?$vector@M$03@@B", scope: !0, file: !1, line: 27, type: !92, isLocal: false, isDefinition: true)
!92 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !10)
!93 = !DIGlobalVariable(name: "mode", linkageName: "\01?mode@C@@3HB", scope: !0, file: !1, line: 27, type: !50, isLocal: false, isDefinition: true)
!94 = !DIGlobalVariable(name: "count", linkageName: "\01?count@C@@3IB", scope: !0, file: !1, line: 27, type: !95, isLocal: false, isDefinition: true)
!95 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !96)
!96 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint", file: !1, line: 27, baseType: !97)
!97 = !DIBasicType(name: "unsigned int", size: 32, align: 32, encoding: DW_ATE_unsigned)
!98 = !DIGlobalVariable(name: "shared_rows", linkageName: "\01?shared_rows@@3PAV?$vector@M$03@@A", scope: !0, file: !1, line: 75, type: !99, isLocal: false, isDefinition: true)
!99 = !DICompositeType(tag: DW_TAG_array_type, baseType: !10, size: 1024, align: 32, elements: !100)
!100 = !{!101}
!101 = !DISubrange(count: 8)
!102 = !DIGlobalVariable(name: "weights", linkageName: "\01?weights@Shade@@3QBMB", scope: !4, file: !1, line: 18, type: !103, isLocal: true, isDefinition: true)
!103 = !DICompositeType(tag: DW_TAG_array_type, baseType: !104, size: 96, align: 32, elements: !44)
!104 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !14)
!105 = !DIGlobalVariable(name: "t", linkageName: "\01?t@@3V?$Texture2D@V?$vector@M$03@@@@A", scope: !0, file: !1, line: 28, type: !106, isLocal: false, isDefinition: true)
!106 = !DICompositeType(tag: DW_TAG_class_type, name: "Texture2D<vector<float, 4> >", file: !1, line: 28, size: 160, align: 32, elements: !107, templateParams: !108)
!107 = !{}
!108 = !{!109}
!109 = !DITemplateTypeParameter(name: "element", type: !11)
!110 = !DIGlobalVariable(name: "ss", linkageName: "\01?ss@@3USamplerState@@A", scope: !0, file: !1, line: 29, type: !111, isLocal: false, isDefinition: true)
!111 = !DICompositeType(tag: DW_TAG_structure_type, name: "SamplerState", file: !1, line: 29, size: 32, align: 32, elements: !107)
!112 = !DIGlobalVariable(name: "o", linkageName: "\01?o@@3V?$RWStructuredBuffer@V?$vector@M$03@@@@A", scope: !0, file: !1, line: 74, type: !113, isLocal: false, isDefinition: true)
!113 = !DICompositeType(tag: DW_TAG_class_type, name: "RWStructuredBuffer<vector<float, 4> >", file: !1, line: 74, size: 128, align: 32, elements: !107, templateParams: !108)
!114 = !{i32 2, !"Dwarf Version", i32 4}
!115 = !{i32 2, !"Debug Info Version", i32 3}
!116 = !{!"dxcoob 1.9.2609.5 (01b62ad47)"}
!117 = !{!"debug_info.hlsl", !"// dxc: -T vs_6_0 -E vs -Zi -Qembed_debug -Fo debug_info.vs.dxil\0A// dxc: -T ps_6_0 -E ps -Zi -Qembed_debug -Fo debug_info.ps.dxil\0A// dxc: -T ps_6_0 -E ps -Zi -Qembed_debug -Od -Fo debug_info.ps.od.dxil\0A// dxc: -T gs_6_0 -E gs -Zi -Qembed_debug -Fo debug_info.gs.dxil\0A// dxc: -T hs_6_0 -E hs -Zi -Qembed_debug -Fo debug_info.hs.dxil\0A// dxc: -T ds_6_0 -E ds -Zi -Qembed_debug -Fo debug_info.ds.dxil\0A// dxc: -T cs_6_0 -E cs -Zi -Qembed_debug -Fo debug_info.cs.dxil\0A// dxc: -T cs_6_0 -E cs -Zi -Qembed_debug -Od -Fo debug_info.cs.od.dxil\0A// dxc: -T lib_6_3 -Zi -Qembed_debug -Fo debug_info.lib.dxil\0A// Programs of every stage and a library built with debug information in the module (-Zi -Qembed_debug), optimized\0A// and not (-Od): the listing prints the debug metadata nodes, each instruction's !dbg location with its line and\0A// column, and the debug intrinsics with the variable and expression they describe. The source has an enumeration, a\0A// namespace, structs, arrays, a matrix, static data, loops with their own locals and helper functions the compiler\0A// inlines, so the nodes include enumerators, namespaces, lexical blocks, global variables, subranges and inlined\0A// locations.\0Anamespace Shade {\0Aenum Mode { Plain = 0, Tinted = 2, Inverted = -3 };\0Astatic const float weights[3] = { 0.25, 0.5, 0.25 };\0Afloat4 tint(float4 c, Mode m) {\0A if (m == Inverted) {\0A float4 inv = 1 - c;\0A return inv;\0A }\0A return m == Tinted ? c * float4(1, 0.5, 0.5, 1) : c;\0A}\0A}\0Acbuffer C : register(b0) { float4x4 wvp; float4 colour; int mode; uint count; };\0ATexture2D t : register(t0);\0ASamplerState ss : register(s0);\0Astruct V { float4 p : SV_Position; float2 uv : TEXCOORD0; };\0Astruct Blend { float4 sum; float total; };\0ABlend accumulate(Blend b, float4 c, float w) {\0A Blend o;\0A o.sum = b.sum + c * w;\0A o.total = b.total + w;\0A return o;\0A}\0AV vs(float3 p : POSITION, float2 uv : TEXCOORD0) {\0A V o;\0A o.p = mul(float4(p, 1), wvp);\0A o.uv = uv;\0A return o;\0A}\0Afloat4 ps(V i) : SV_Target {\0A Blend b = { float4(0, 0, 0, 0), 0 };\0A for (uint k = 0; k < 3; k++) {\0A float2 at = i.uv + float2(k * 0.01, 0);\0A b = accumulate(b, t.Sample(ss, at), Shade::weights[k]);\0A }\0A return Shade::tint(b.sum / b.total, (Shade::Mode)mode) * colour;\0A}\0A[maxvertexcount(3)] void gs(triangle V i[3], inout TriangleStream<V> s) {\0A for (int k = 0; k < 3; k++) {\0A V v = i[k];\0A v.uv *= 2;\0A s.Append(v);\0A }\0A}\0Astruct PC { float e[3] : SV_TessFactor; float n : SV_InsideTessFactor; };\0APC pc(InputPatch<V, 3> p) {\0A PC o;\0A o.e[0] = o.e[1] = o.e[2] = colour.x;\0A o.n = colour.y;\0A return o;\0A}\0A[domain(\22tri\22)][partitioning(\22integer\22)][outputtopology(\22triangle_cw\22)][outputcontrolpoints(3)][patchconstantfunc(\22pc\22)]\0AV hs(InputPatch<V, 3> p, uint i : SV_OutputControlPointID) { return p[i]; }\0A[domain(\22tri\22)] V ds(PC c, float3 b : SV_DomainLocation, const OutputPatch<V, 3> p) {\0A V o;\0A o.p = p[0].p * b.x + p[1].p * b.y + p[2].p * b.z;\0A o.uv = p[0].uv * c.n;\0A return o;\0A}\0ARWStructuredBuffer<float4> o : register(u0);\0Agroupshared float4 shared_rows[8];\0A[numthreads(8, 1, 1)] void cs(uint i : SV_GroupIndex) {\0A shared_rows[i] = colour * i;\0A GroupMemoryBarrierWithGroupSync();\0A float4 sum = 0;\0A for (uint k = 0; k < count && k < 8; k++) {\0A sum += shared_rows[k];\0A }\0A o[i] = Shade::tint(sum, (Shade::Mode)mode);\0A}\0Astruct Payload { float4 colour; };\0A[shader(\22miss\22)] void miss(inout Payload p) { p.colour = Shade::tint(colour, Shade::Tinted); }\0A[shader(\22closesthit\22)] void hit(inout Payload p, BuiltInTriangleIntersectionAttributes a) {\0A p.colour = float4(a.barycentrics, 1 - a.barycentrics.x - a.barycentrics.y, 1);\0A}\0A"}
!118 = !{!"debug_info.hlsl"}
!119 = !{!"-E", !"ps", !"-T", !"ps_6_0", !"-Zi", !"-Qembed_debug", !"-Fo", !"debug_info.ps.dxil"}
!120 = !{i32 1, i32 0}
!121 = !{i32 1, i32 9}
!122 = !{!"ps", i32 6, i32 0}
!123 = !{!124, null, !127, !129}
!124 = !{!125}
!125 = !{i32 0, %"class.Texture2D<vector<float, 4> >"* undef, !"t", i32 0, i32 0, i32 1, i32 2, i32 0, !126}
!126 = !{i32 0, i32 9}
!127 = !{!128}
!128 = !{i32 0, %hostlayout.C* undef, !"C", i32 0, i32 0, i32 1, i32 88, null}
!129 = !{!130}
!130 = !{i32 0, %struct.SamplerState* undef, !"ss", i32 0, i32 0, i32 1, i32 0, null}
!131 = !{i32 0, %hostlayout.C undef, !132}
!132 = !{i32 88, !133, !135, !136, !137}
!133 = !{i32 6, !"wvp", i32 2, !134, i32 3, i32 0, i32 7, i32 9}
!134 = !{i32 4, i32 4, i32 2}
!135 = !{i32 6, !"colour", i32 3, i32 64, i32 7, i32 9}
!136 = !{i32 6, !"mode", i32 3, i32 80, i32 7, i32 4}
!137 = !{i32 6, !"count", i32 3, i32 84, i32 7, i32 5}
!138 = !{i32 1, void ()* @ps, !139}
!139 = !{!140}
!140 = !{i32 0, !107, !107}
!141 = !{[8 x i32] [i32 6, i32 4, i32 0, i32 0, i32 0, i32 0, i32 15, i32 15]}
!142 = !{void ()* @ps, !"ps", !143, !123, null}
!143 = !{!144, !149, null}
!144 = !{!145, !147}
!145 = !{i32 0, !"SV_Position", i8 9, i8 3, !146, i8 4, i32 1, i8 4, i32 0, i8 0, null}
!146 = !{i32 0}
!147 = !{i32 1, !"TEXCOORD", i8 9, i8 0, !146, i8 2, i32 1, i8 2, i32 1, i8 0, !148}
!148 = !{i32 3, i32 3}
!149 = !{!150}
!150 = !{i32 0, !"SV_Target", i8 9, i8 16, !146, i8 0, i32 1, i8 4, i32 0, i8 0, !151}
!151 = !{i32 3, i32 15}
!152 = !DILocation(line: 48, column: 27, scope: !153)
!153 = distinct !DILexicalBlock(scope: !154, file: !1, line: 46, column: 34)
!154 = distinct !DILexicalBlock(scope: !155, file: !1, line: 46, column: 5)
!155 = distinct !DILexicalBlock(scope: !30, file: !1, line: 46, column: 5)
!156 = !DILocation(line: 44, column: 13, scope: !30)
!157 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "i", arg: 1, scope: !30, file: !1, line: 44, type: !33)
!158 = !DIExpression(DW_OP_bit_piece, 128, 32)
!159 = !DIExpression(DW_OP_bit_piece, 160, 32)
!160 = !DILocalVariable(tag: DW_TAG_auto_variable, name: "b", scope: !30, file: !1, line: 45, type: !59)
!161 = !DIExpression(DW_OP_bit_piece, 0, 128)
!162 = !DILocation(line: 45, column: 11, scope: !30)
!163 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "b", arg: 1, scope: !56, file: !1, line: 32, type: !59)
!164 = !DILocation(line: 32, column: 24, scope: !56, inlinedAt: !165)
!165 = distinct !DILocation(line: 48, column: 13, scope: !153)
!166 = !DILocalVariable(tag: DW_TAG_auto_variable, name: "k", scope: !155, file: !1, line: 46, type: !96)
!167 = !DIExpression()
!168 = !DILocation(line: 46, column: 15, scope: !155)
!169 = !DIExpression(DW_OP_bit_piece, 0, 32)
!170 = !DIExpression(DW_OP_bit_piece, 32, 32)
!171 = !DIExpression(DW_OP_bit_piece, 64, 32)
!172 = !DIExpression(DW_OP_bit_piece, 96, 32)
!173 = !DILocalVariable(tag: DW_TAG_auto_variable, name: "at", scope: !153, file: !1, line: 47, type: !22)
!174 = !DILocation(line: 47, column: 16, scope: !153)
!175 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "c", arg: 2, scope: !56, file: !1, line: 32, type: !10)
!176 = !DILocation(line: 32, column: 34, scope: !56, inlinedAt: !165)
!177 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "w", arg: 3, scope: !56, file: !1, line: 32, type: !14)
!178 = !DILocation(line: 32, column: 43, scope: !56, inlinedAt: !165)
!179 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "o", arg: 0, scope: !56, file: !1, line: 33, type: !59)
!180 = !DILocation(line: 33, column: 11, scope: !56, inlinedAt: !165)
!181 = !DILocation(line: 47, column: 26, scope: !153)
!182 = !DILocation(line: 34, column: 23, scope: !56, inlinedAt: !165)
!183 = !DILocation(line: 34, column: 19, scope: !56, inlinedAt: !165)
!184 = !DILocation(line: 50, column: 54, scope: !30)
!185 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "m", arg: 2, scope: !63, file: !1, line: 19, type: !3)
!186 = !DILocation(line: 19, column: 28, scope: !63, inlinedAt: !187)
!187 = distinct !DILocation(line: 50, column: 12, scope: !30)
!188 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "c", arg: 1, scope: !63, file: !1, line: 19, type: !10)
!189 = !DILocation(line: 19, column: 20, scope: !63, inlinedAt: !187)
!190 = !DILocation(line: 20, column: 11, scope: !191, inlinedAt: !187)
!191 = distinct !DILexicalBlock(scope: !63, file: !1, line: 20, column: 9)
!192 = !DILocation(line: 20, column: 9, scope: !63, inlinedAt: !187)
!193 = !DILocation(line: 21, column: 24, scope: !194, inlinedAt: !187)
!194 = distinct !DILexicalBlock(scope: !191, file: !1, line: 20, column: 24)
!195 = !DILocalVariable(tag: DW_TAG_auto_variable, name: "inv", scope: !194, file: !1, line: 21, type: !10)
!196 = !DILocation(line: 21, column: 16, scope: !194, inlinedAt: !187)
!197 = !DILocation(line: 22, column: 9, scope: !194, inlinedAt: !187)
!198 = !DILocation(line: 24, column: 14, scope: !63, inlinedAt: !187)
!199 = !DILocation(line: 24, column: 28, scope: !63, inlinedAt: !187)
!200 = !DILocation(line: 24, column: 12, scope: !63, inlinedAt: !187)
!201 = !DILocation(line: 24, column: 5, scope: !63, inlinedAt: !187)
!202 = !DILocation(line: 50, column: 62, scope: !30)
!203 = !DILocation(line: 50, column: 60, scope: !30)
!204 = !DILocation(line: 50, column: 5, scope: !30)
!skip.census = !{!900, !901, !902, !903, !904, !905, !906, !907, !908, !909, !910, !911, !912, !913, !914, !915, !916, !917, !918, !919, !920, !921, !930, !931, !932, !933}
!900 = !GenericDINode(tag: DW_TAG_entry_point, header: "hdr", operands: {null, !1, !"text"})
!901 = distinct !GenericDINode(tag: 12345)
!902 = !DILexicalBlockFile(scope: !30, file: !1, discriminator: 0)
!903 = !DIModule(scope: null, name: "M", configMacros: "-DX", includePath: "/inc", isysroot: "/sys")
!904 = !DIObjCProperty(name: "p", file: !1, line: 3, setter: "setP:", getter: "p", attributes: 5, type: !14)
!905 = !DIImportedEntity(tag: DW_TAG_imported_module, name: "n", scope: !1, entity: !902, line: 7)
!906 = !DIBasicType(tag: DW_TAG_unspecified_type, name: "decltype(nullptr)")
!907 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64, flags: DIFlagPrivate | DIFlagVector | 1048576)
!908 = !DISubrange(count: -1, lowerBound: -5)
!909 = !DIEnumerator(name: "neg", value: -9223372036854775808)
!910 = !DIExpression(DW_OP_plus, 4, DW_OP_deref, DW_OP_bit_piece, 0, 8)
!911 = !DICompositeType(tag: DW_TAG_enumeration_type, name: "E", file: !1, line: 2, baseType: !14, size: 32, align: 32, offset: 8, flags: DIFlagFwdDecl, runtimeLang: DW_LANG_C99, vtableHolder: !911, identifier: "_ZTS1E")
!912 = !DISubprogram(name: "v", linkageName: "_v", scope: !911, file: !1, line: 9, isLocal: true, isDefinition: false, scopeLine: 10, containingType: !911, virtuality: DW_VIRTUALITY_pure_virtual, virtualIndex: 2, flags: DIFlagProtected | DIFlagArtificial, isOptimized: true, templateParams: !{}, declaration: !912, variables: !{})
!913 = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "p", isOptimized: true, flags: "-O2", runtimeVersion: 3, splitDebugFilename: "x.dwo", emissionKind: 2, enums: !{}, retainedTypes: !{}, imports: !{}, dwoId: 7)
!914 = !DITemplateValueParameter(tag: DW_TAG_GNU_template_parameter_pack, name: "pack", value: !{})
!915 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "a", arg: 0, scope: !30, file: !1, line: 1, type: !14, flags: DIFlagObjectPointer)
!916 = !DILocation(line: 0, scope: !30, inlinedAt: !917)
!917 = distinct !DILocation(line: 4, column: 65535, scope: !30)
!918 = !DINamespace(scope: null, file: !1, line: 0)
!919 = !DIGlobalVariable(name: "g", linkageName: "_g", scope: null, file: !1, line: 3, type: !14, isLocal: true, isDefinition: false, declaration: !907)
!920 = !DISubroutineType(flags: DIFlagLValueReference, types: null)
!921 = !DIDerivedType(tag: 17185, name: "odd", baseType: !14, flags: 16384, extraData: !"x")
!930 = !DIExpression(DW_OP_bit_piece, 0, 8, DW_OP_deref)
!931 = !DIExpression(DW_OP_lit0, 7)
!932 = !DIExpression(DW_OP_plus)
!933 = distinct !DIExpression(DW_OP_deref)