Update resource type names for globals variables that we generate in `DXILTranslateMetadata` pass to include element type. This change prevents duplicate types for identical resources and brings the DXIL metadata names it closer to what DXC generates.
80 lines
3.6 KiB
LLVM
80 lines
3.6 KiB
LLVM
; RUN: opt -S -dxil-translate-metadata < %s | FileCheck %s
|
|
; RUN: opt -S --passes="dxil-pretty-printer" < %s 2>&1 | FileCheck %s --check-prefix=PRINT
|
|
; RUN: llc %s --filetype=asm -o - < %s 2>&1 | FileCheck %s --check-prefixes=CHECK,PRINT
|
|
|
|
target datalayout = "e-m:e-p:32:32-i1:32-i8:8-i16:16-i32:32-i64:64-f16:16-f32:32-f64:64-n8:16:32:64"
|
|
target triple = "dxil-pc-shadermodel6.6-compute"
|
|
|
|
%__cblayout_CB1 = type <{ float, i32, double, <2 x i32> }>
|
|
@CB1.cb = global target("dx.CBuffer", target("dx.Layout", %__cblayout_CB1, 24, 0, 4, 8, 16)) poison
|
|
@CB1.str = private unnamed_addr constant [4 x i8] c"CB1\00", align 1
|
|
|
|
%__cblayout_CB2 = type <{ float, double, float, half, i16, i64, i32 }>
|
|
@CB2.cb = global target("dx.CBuffer", target("dx.Layout", %__cblayout_CB2, 36, 0, 8, 16, 20, 22, 24, 32)) poison
|
|
@CB2.str = private unnamed_addr constant [4 x i8] c"CB2\00", align 1
|
|
|
|
%__cblayout_MyConstants = type <{ double, <3 x float>, float, <3 x double>, half, <2 x double>, float, <3 x half>, <3 x half> }>
|
|
@MyConstants.cb = global target("dx.CBuffer", target("dx.Layout", %__cblayout_MyConstants, 96, 0, 16, 28, 32, 56, 64, 80, 84, 90)) poison
|
|
@MyConstants.str = private unnamed_addr constant [12 x i8] c"MyConstants\00", align 1
|
|
|
|
; PRINT:; Resource Bindings:
|
|
; PRINT-NEXT:;
|
|
; PRINT-NEXT:; Name Type Format Dim ID HLSL Bind Count
|
|
; PRINT-NEXT:; ------------------------------ ---------- ------- ----------- ------- -------------- ------
|
|
; PRINT-NEXT:; CB1 cbuffer NA NA CB0 cb0 1
|
|
; PRINT-NEXT:; CB2 cbuffer NA NA CB1 cb1 1
|
|
; PRINT-NEXT:; MyConstants cbuffer NA NA CB2 cb5,space15 1
|
|
|
|
define void @test() #0 {
|
|
|
|
; cbuffer CB1 : register(b0) {
|
|
; float a;
|
|
; int b;
|
|
; double c;
|
|
; int2 d;
|
|
; }
|
|
%CB1.cb_h = call target("dx.CBuffer", target("dx.Layout", %__cblayout_CB1, 24, 0, 4, 8, 16))
|
|
@llvm.dx.resource.handlefrombinding(i32 0, i32 0, i32 1, i32 0, i1 false, ptr @CB1.str)
|
|
; cbuffer CB2 : register(b0) {
|
|
; float a;
|
|
; double b;
|
|
; float c;
|
|
; half d;
|
|
; uint16_t e;
|
|
; int64_t f;
|
|
; int g;
|
|
;}
|
|
|
|
%CB2.cb_h = call target("dx.CBuffer", target("dx.Layout", %__cblayout_CB2, 36, 0, 8, 16, 20, 22, 24, 32))
|
|
@llvm.dx.resource.handlefrombinding(i32 0, i32 1, i32 1, i32 0, i1 false, ptr @CB2.str)
|
|
; cbuffer CB3 : register(b5) {
|
|
; double B0;
|
|
; float3 B1;
|
|
; float B2;
|
|
; double3 B3;
|
|
; half B4;
|
|
; double2 B5;
|
|
; float B6;
|
|
; half3 B7;
|
|
; half3 B8;
|
|
; }
|
|
%CB3.cb_h = call target("dx.CBuffer", target("dx.Layout", %__cblayout_MyConstants, 96, 0, 16, 28, 32, 56, 64, 80, 84, 90))
|
|
@llvm.dx.resource.handlefrombinding(i32 15, i32 5, i32 1, i32 0, i1 false, ptr @MyConstants.str)
|
|
|
|
ret void
|
|
}
|
|
|
|
attributes #0 = { noinline nounwind "hlsl.shader"="compute" }
|
|
|
|
; CHECK: @CB1 = external constant %CBuffer.CB1
|
|
; CHECK: @CB2 = external constant %CBuffer.CB2
|
|
; CHECK: @MyConstants = external constant %CBuffer.MyConstants
|
|
|
|
; CHECK: !dx.resources = !{[[ResList:[!][0-9]+]]}
|
|
|
|
; CHECK: [[ResList]] = !{null, null, [[CBList:[!][0-9]+]], null}
|
|
; CHECK: [[CBList]] = !{![[CB1:[0-9]+]], ![[CB2:[0-9]+]], ![[MYCONSTANTS:[0-9]+]]}
|
|
; CHECK: ![[CB1]] = !{i32 0, ptr @CB1, !"CB1", i32 0, i32 0, i32 1, i32 24, null}
|
|
; CHECK: ![[CB2]] = !{i32 1, ptr @CB2, !"CB2", i32 0, i32 1, i32 1, i32 36, null}
|
|
; CHECK: ![[MYCONSTANTS]] = !{i32 2, ptr @MyConstants, !"MyConstants", i32 15, i32 5, i32 1, i32 96, null}
|