mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-28 06:46:07 +00:00
[DirectX] Update DXIL op codes for annotateHandle and createHandleFromBinding to match the spec and DXC (#114473)
DXIL spec for reference:
[DXIL.rst](5704c4744e/docs/DXIL.rst (L2330)
).
This commit is contained in:
parent
8f8e2b7326
commit
19ad7dd8dc
@ -788,14 +788,14 @@ def SplitDouble : DXILOp<102, splitDouble> {
|
||||
let attributes = [Attributes<DXIL1_0, [ReadNone]>];
|
||||
}
|
||||
|
||||
def AnnotateHandle : DXILOp<217, annotateHandle> {
|
||||
def AnnotateHandle : DXILOp<216, annotateHandle> {
|
||||
let Doc = "annotate handle with resource properties";
|
||||
let arguments = [HandleTy, ResPropsTy];
|
||||
let result = HandleTy;
|
||||
let stages = [Stages<DXIL1_6, [all_stages]>];
|
||||
}
|
||||
|
||||
def CreateHandleFromBinding : DXILOp<218, createHandleFromBinding> {
|
||||
def CreateHandleFromBinding : DXILOp<217, createHandleFromBinding> {
|
||||
let Doc = "create resource handle from binding";
|
||||
let arguments = [ResBindTy, Int32Ty, Int1Ty];
|
||||
let result = HandleTy;
|
||||
|
@ -7,8 +7,8 @@ declare void @vector_user(<4 x float>)
|
||||
declare void @check_user(i1)
|
||||
|
||||
define void @loadv4f32() {
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", <4 x float>, 0, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4f32_0_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
@ -63,8 +63,8 @@ define void @loadv4f32() {
|
||||
}
|
||||
|
||||
define void @index_dynamic(i32 %bufindex, i32 %elemindex) {
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", <4 x float>, 0, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4f32_0_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
@ -98,8 +98,8 @@ define void @index_dynamic(i32 %bufindex, i32 %elemindex) {
|
||||
}
|
||||
|
||||
define void @loadf32() {
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", float, 0, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_f32_0_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
@ -116,8 +116,8 @@ define void @loadf32() {
|
||||
}
|
||||
|
||||
define void @loadv2f32() {
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", <2 x float>, 0, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v2f32_0_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
@ -130,8 +130,8 @@ define void @loadv2f32() {
|
||||
}
|
||||
|
||||
define void @loadv4f32_checkbit() {
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", <4 x float>, 0, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4f32_0_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
@ -151,8 +151,8 @@ define void @loadv4f32_checkbit() {
|
||||
}
|
||||
|
||||
define void @loadv4i32() {
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", <4 x i32>, 0, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4i32_0_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
@ -165,8 +165,8 @@ define void @loadv4i32() {
|
||||
}
|
||||
|
||||
define void @loadv4f16() {
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", <4 x half>, 0, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4f16_0_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
@ -179,8 +179,8 @@ define void @loadv4f16() {
|
||||
}
|
||||
|
||||
define void @loadv4i16() {
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", <4 x i16>, 0, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4i16_0_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
|
@ -4,8 +4,8 @@ target triple = "dxil-pc-shadermodel6.6-compute"
|
||||
|
||||
define void @storefloat(<4 x float> %data, i32 %index) {
|
||||
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", <4 x float>, 1, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4f32_1_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
@ -27,8 +27,8 @@ define void @storefloat(<4 x float> %data, i32 %index) {
|
||||
|
||||
define void @storeint(<4 x i32> %data, i32 %index) {
|
||||
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", <4 x i32>, 1, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4i32_1_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
@ -47,8 +47,8 @@ define void @storeint(<4 x i32> %data, i32 %index) {
|
||||
|
||||
define void @storehalf(<4 x half> %data, i32 %index) {
|
||||
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", <4 x half>, 1, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4f16_1_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
@ -70,8 +70,8 @@ define void @storehalf(<4 x half> %data, i32 %index) {
|
||||
|
||||
define void @storei16(<4 x i16> %data, i32 %index) {
|
||||
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BIND]]
|
||||
; CHECK: [[BIND:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217,
|
||||
; CHECK: [[HANDLE:%.*]] = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BIND]]
|
||||
%buffer = call target("dx.TypedBuffer", <4 x i16>, 1, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4i16_1_0_0(
|
||||
i32 0, i32 0, i32 1, i32 0, i1 false)
|
||||
|
@ -19,15 +19,15 @@ define void @test_bindings() {
|
||||
%typed0 = call target("dx.TypedBuffer", <4 x float>, 1, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4f32_1_0_0(
|
||||
i32 3, i32 5, i32 1, i32 4, i1 false)
|
||||
; CHECK: [[BUF0:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 218, %dx.types.ResBind { i32 5, i32 5, i32 3, i8 1 }, i32 4, i1 false)
|
||||
; CHECK: call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BUF0]], %dx.types.ResourceProperties { i32 4106, i32 1033 })
|
||||
; CHECK: [[BUF0:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, %dx.types.ResBind { i32 5, i32 5, i32 3, i8 1 }, i32 4, i1 false)
|
||||
; CHECK: call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BUF0]], %dx.types.ResourceProperties { i32 4106, i32 1033 })
|
||||
|
||||
; RWBuffer<int> Buf : register(u7, space2)
|
||||
%typed1 = call target("dx.TypedBuffer", i32, 1, 0, 1)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_i32_1_0_0t(
|
||||
i32 2, i32 7, i32 1, i32 6, i1 false)
|
||||
; CHECK: [[BUF1:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 218, %dx.types.ResBind { i32 7, i32 7, i32 2, i8 1 }, i32 6, i1 false)
|
||||
; CHECK: call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BUF1]], %dx.types.ResourceProperties { i32 4106, i32 260 })
|
||||
; CHECK: [[BUF1:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, %dx.types.ResBind { i32 7, i32 7, i32 2, i8 1 }, i32 6, i1 false)
|
||||
; CHECK: call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BUF1]], %dx.types.ResourceProperties { i32 4106, i32 260 })
|
||||
|
||||
; Buffer<uint4> Buf[24] : register(t3, space5)
|
||||
; Buffer<uint4> typed2 = Buf[4]
|
||||
@ -35,23 +35,23 @@ define void @test_bindings() {
|
||||
%typed2 = call target("dx.TypedBuffer", <4 x i32>, 0, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_i32_0_0_0t(
|
||||
i32 5, i32 3, i32 24, i32 7, i1 false)
|
||||
; CHECK: [[BUF2:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 218, %dx.types.ResBind { i32 3, i32 26, i32 5, i8 0 }, i32 7, i1 false)
|
||||
; CHECK: call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BUF2]], %dx.types.ResourceProperties { i32 10, i32 1029 })
|
||||
; CHECK: [[BUF2:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, %dx.types.ResBind { i32 3, i32 26, i32 5, i8 0 }, i32 7, i1 false)
|
||||
; CHECK: call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BUF2]], %dx.types.ResourceProperties { i32 10, i32 1029 })
|
||||
|
||||
; struct S { float4 a; uint4 b; };
|
||||
; StructuredBuffer<S> Buf : register(t2, space4)
|
||||
%struct0 = call target("dx.RawBuffer", {<4 x float>, <4 x i32>}, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.RawBuffer_sl_v4f32v4i32s_0_0t(
|
||||
i32 4, i32 2, i32 1, i32 10, i1 true)
|
||||
; CHECK: [[BUF3:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 218, %dx.types.ResBind { i32 2, i32 2, i32 4, i8 0 }, i32 10, i1 true)
|
||||
; CHECK: = call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BUF3]], %dx.types.ResourceProperties { i32 1036, i32 32 })
|
||||
; CHECK: [[BUF3:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, %dx.types.ResBind { i32 2, i32 2, i32 4, i8 0 }, i32 10, i1 true)
|
||||
; CHECK: = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BUF3]], %dx.types.ResourceProperties { i32 1036, i32 32 })
|
||||
|
||||
; ByteAddressBuffer Buf : register(t8, space1)
|
||||
%byteaddr0 = call target("dx.RawBuffer", i8, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.RawBuffer_i8_0_0t(
|
||||
i32 1, i32 8, i32 1, i32 12, i1 false)
|
||||
; CHECK: [[BUF4:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 218, %dx.types.ResBind { i32 8, i32 8, i32 1, i8 0 }, i32 12, i1 false)
|
||||
; CHECK: call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BUF4]], %dx.types.ResourceProperties { i32 11, i32 0 })
|
||||
; CHECK: [[BUF4:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, %dx.types.ResBind { i32 8, i32 8, i32 1, i8 0 }, i32 12, i1 false)
|
||||
; CHECK: call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BUF4]], %dx.types.ResourceProperties { i32 11, i32 0 })
|
||||
|
||||
; Buffer<float4> Buf[] : register(t0)
|
||||
; Buffer<float4> typed3 = Buf[ix]
|
||||
@ -59,8 +59,8 @@ define void @test_bindings() {
|
||||
%typed3 = call target("dx.TypedBuffer", <4 x float>, 0, 0, 0)
|
||||
@llvm.dx.handle.fromBinding.tdx.TypedBuffer_v4f32_0_0_0t(
|
||||
i32 0, i32 0, i32 -1, i32 %typed3_ix, i1 false)
|
||||
; CHECK: [[BUF5:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 218, %dx.types.ResBind { i32 0, i32 -1, i32 0, i8 0 }, i32 %typed3_ix, i1 false)
|
||||
; CHECK: call %dx.types.Handle @dx.op.annotateHandle(i32 217, %dx.types.Handle [[BUF5]], %dx.types.ResourceProperties { i32 10, i32 1033 })
|
||||
; CHECK: [[BUF5:%.*]] = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, %dx.types.ResBind { i32 0, i32 -1, i32 0, i8 0 }, i32 %typed3_ix, i1 false)
|
||||
; CHECK: call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle [[BUF5]], %dx.types.ResourceProperties { i32 10, i32 1033 })
|
||||
|
||||
ret void
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user