Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/DXIL.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3218,6 +3218,7 @@ INSTR.LINALGMATRIXLAYOUTREQSTRIDE Matrix layout '%0' require
INSTR.LINALGMATRIXLOADTHREADREQUIRESBAB Loading matrix with Thread scope requires ByteAddressBuffer.
INSTR.LINALGMATRIXNOTEXACTMATCH Matrix '%0' must exactly match matrix '%1'.
INSTR.LINALGMATRIXOUTPUTBIASVECMISMATCH Output vector element type '%0' must match Bias vector element type '%1'
INSTR.LINALGMATRIXREQUIRESLAYOUT2 %0 requires layout %1 or %2.
INSTR.LINALGMATRIXREQUIRESRWBAB %0 requires RWByteAddressBuffer.
INSTR.LINALGMATRIXSCOPEMISMATCH Matrix Scope '%0' does not match expected scope %1.
INSTR.LINALGMATRIXSCOPEMISMATCH2 Matrix Scope '%0' does not match expected scope %1 or %2.
Expand Down
57 changes: 57 additions & 0 deletions lib/DxilValidation/DxilValidation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1129,6 +1129,63 @@ static void ValidateLinAlgMatrixGetElement(CallInst *CI,
static void ValidateLinAlgMatrixStoreToDescriptor(CallInst *CI,
ValidationContext &ValCtx) {
ValidateLinAlgOpParameters(CI, ValCtx);
Comment thread
V-FEXrt marked this conversation as resolved.

DxilInst_LinAlgMatrixStoreToDescriptor Op(CI);
Type *MatTy = Op.get_matrix()->getType();

assert(dxilutil::IsHLSLLinAlgMatrixType(MatTy) && "Must be LinAlg type");
auto MatIt = ValCtx.LinAlgTargetTypeMap.find(MatTy);
if (MatIt == ValCtx.LinAlgTargetTypeMap.end())
return;
Comment thread
bob80905 marked this conversation as resolved.
LinAlgTargetType MatLATT = MatIt->second;

ConstantInt *LayoutCI = dyn_cast<ConstantInt>(Op.get_layout());
if (!LayoutCI) {
ValCtx.EmitInstrFormatError(CI, ValidationRule::InstrOpConst,
{"Layout", "LinAlgMatrixStoreToDescriptor"});
return;
Comment thread
V-FEXrt marked this conversation as resolved.
}
auto Layout = static_cast<DXIL::MatrixLayout>(LayoutCI->getLimitedValue());

// Layout must be Row/Col Major
if (Layout != DXIL::MatrixLayout::RowMajor &&
Layout != DXIL::MatrixLayout::ColumnMajor)
ValCtx.EmitInstrFormatError(
CI, ValidationRule::InstrLinAlgMatrixRequiresLayout2,
{"LinAlgMatrixStoreToDescriptor", "RowMajor", "ColumnMajor"});

// Scope must be wave/threadgroup
if (MatLATT.Scope != DXIL::MatrixScope::Wave &&
MatLATT.Scope != DXIL::MatrixScope::ThreadGroup)
ValCtx.EmitInstrFormatError(
CI, ValidationRule::InstrLinAlgMatrixScopeMismatch2,
{MatrixScopeToString(MatLATT.Scope), "Wave", "ThreadGroup"});

// handle must be a UAV Raw buffer (RWByteAddressBuffer)
DXIL::ComponentType ResCompTy;
DXIL::ResourceClass ResClass;
DXIL::ResourceKind ResKind =
GetResourceKindAndCompTy(Op.get_handle(), ResCompTy, ResClass, ValCtx);
if (ResClass != DXIL::ResourceClass::UAV ||
ResKind != DXIL::ResourceKind::RawBuffer)
ValCtx.EmitInstrFormatError(CI,
ValidationRule::InstrLinAlgMatrixRequiresRWBAB,
{"LinAlgMatrixStoreToDescriptor"});

// Align must be an immediate constant that is a multiple of 128 greater than
// 0
ConstantInt *AlignCI = dyn_cast<ConstantInt>(Op.get_align());
if (AlignCI) {
unsigned Align = AlignCI->getLimitedValue();
if (Align == 0)
ValCtx.EmitInstrFormatError(CI, ValidationRule::InstrParamMinimumValue,
{"Align", "0", std::to_string(Align)});
if (Align % 128 != 0)
ValCtx.EmitInstrFormatError(CI, ValidationRule::InstrParamMultiple,
{"Align", "128", std::to_string(Align)});
} else
ValCtx.EmitInstrFormatError(CI, ValidationRule::InstrOpConst,
{"Align", "LinAlgMatrixStoreToDescriptor"});
}

static void ValidateLinAlgMatrixStoreToMemory(CallInst *CI,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@ void main() {
// CHECK-LABEL: define void @main()

// CHECK: call void @dx.op.linAlgMatrixStoreToDescriptor.mC4M5N4U1S2(i32 -2147483628,
// CHECK-SAME: %dx.types.LinAlgMatrixC4M5N4U1S2 %{{.*}}, %dx.types.Handle %{{.*}}, i32 1, i32 1, i32 0, i32 4)
// CHECK-SAME: %dx.types.LinAlgMatrixC4M5N4U1S2 %{{.*}}, %dx.types.Handle %{{.*}}, i32 1, i32 1, i32 0, i32 256)
// CHECK-SAME: ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

// CHECK2: call void @"dx.hl.op..void (i32, %dx.types.LinAlgMatrixC4M5N4U1S2, %dx.types.Handle, i32, i32, i32, i32)
// CHECK2-SAME: "(i32 409, %dx.types.LinAlgMatrixC4M5N4U1S2 %{{.*}}, %dx.types.Handle {{.*}}, i32 1, i32 1, i32 0, i32 4)
// CHECK2-SAME: "(i32 409, %dx.types.LinAlgMatrixC4M5N4U1S2 %{{.*}}, %dx.types.Handle {{.*}}, i32 1, i32 1, i32 0, i32 256)
__builtin_LinAlgMatrix [[__LinAlgMatrix_Attributes(4, 5, 4, 1, 2)]] mat;
__builtin_LinAlg_FillMatrix(mat, 1);
__builtin_LinAlg_MatrixStoreToDescriptor(mat, outbuf, 1, 1, 0, 4);
__builtin_LinAlg_MatrixStoreToDescriptor(mat, outbuf, 1, 1, 0, 256);
}
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ define void @mainAS() {
%v14 = call %dx.types.LinAlgMatrixC4M5N4U0S2 @dx.op.linAlgMatrixSetElement.mC4M5N4U0S2.mC4M5N4U0S2.i32(i32 -2147483629, %dx.types.LinAlgMatrixC4M5N4U0S2 %v9, i32 1, i32 1) ; LinAlgMatrixSetElement(matrix,threadLocalIndex,value)

; dx.op.linAlgMatrixStoreToDescriptor
call void @dx.op.linAlgMatrixStoreToDescriptor.mC4M5N4U0S2(i32 -2147483628, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, %dx.types.Handle %rwbab, i32 1, i32 2, i32 3, i32 4) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)
call void @dx.op.linAlgMatrixStoreToDescriptor.mC4M5N4U0S2(i32 -2147483628, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, %dx.types.Handle %rwbab, i32 1, i32 2, i32 0, i32 128) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

; dx.op.linAlgMatrixAccumulateToMemory
call void @dx.op.linAlgMatrixAccumulateToMemory.mC4M5N4U0S2.f32(i32 -2147483620, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, float addrspace(3)* getelementptr inbounds ([64 x float], [64 x float] addrspace(3)* @"\01?SharedArr@@3PAMA", i32 0, i32 0), i32 0, i32 0, i32 0, i32 0) ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ define void @mainCS() {
%v14 = call %dx.types.LinAlgMatrixC4M5N4U0S2 @dx.op.linAlgMatrixSetElement.mC4M5N4U0S2.mC4M5N4U0S2.i32(i32 -2147483629, %dx.types.LinAlgMatrixC4M5N4U0S2 %v9, i32 1, i32 1) ; LinAlgMatrixSetElement(matrix,threadLocalIndex,value)

; dx.op.linAlgMatrixStoreToDescriptor
call void @dx.op.linAlgMatrixStoreToDescriptor.mC4M5N4U0S2(i32 -2147483628, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, %dx.types.Handle %rwbab, i32 1, i32 2, i32 3, i32 4) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)
call void @dx.op.linAlgMatrixStoreToDescriptor.mC4M5N4U0S2(i32 -2147483628, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, %dx.types.Handle %rwbab, i32 1, i32 2, i32 0, i32 128) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

; dx.op.linAlgMatrixAccumulateToMemory
call void @dx.op.linAlgMatrixAccumulateToMemory.mC4M5N4U0S2.f32(i32 -2147483620, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, float addrspace(3)* getelementptr inbounds ([64 x float], [64 x float] addrspace(3)* @"\01?SharedArr@@3PAMA", i32 0, i32 0), i32 0, i32 0, i32 0, i32 0) ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ define void @MainDS() {
%v14 = call %dx.types.LinAlgMatrixC4M5N4U0S2 @dx.op.linAlgMatrixSetElement.mC4M5N4U0S2.mC4M5N4U0S2.i32(i32 -2147483629, %dx.types.LinAlgMatrixC4M5N4U0S2 %v9, i32 1, i32 1) ; LinAlgMatrixSetElement(matrix,threadLocalIndex,value)

; dx.op.linAlgMatrixStoreToDescriptor
call void @dx.op.linAlgMatrixStoreToDescriptor.mC4M5N4U0S2(i32 -2147483628, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, %dx.types.Handle %rwbab, i32 1, i32 2, i32 3, i32 4) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)
call void @dx.op.linAlgMatrixStoreToDescriptor.mC4M5N4U0S2(i32 -2147483628, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, %dx.types.Handle %rwbab, i32 1, i32 2, i32 0, i32 128) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

; dx.op.linAlgMatrixAccumulateToMemory
call void @dx.op.linAlgMatrixAccumulateToMemory.mC4M5N4U0S2.f32(i32 -2147483620, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, float addrspace(3)* getelementptr inbounds ([64 x float], [64 x float] addrspace(3)* @"\01?SharedArr@@3PAMA", i32 0, i32 0), i32 0, i32 0, i32 0, i32 0) ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ define void @MainGS() {
%v14 = call %dx.types.LinAlgMatrixC4M5N4U0S2 @dx.op.linAlgMatrixSetElement.mC4M5N4U0S2.mC4M5N4U0S2.i32(i32 -2147483629, %dx.types.LinAlgMatrixC4M5N4U0S2 %v9, i32 1, i32 1) ; LinAlgMatrixSetElement(matrix,threadLocalIndex,value)

; dx.op.linAlgMatrixStoreToDescriptor
call void @dx.op.linAlgMatrixStoreToDescriptor.mC4M5N4U0S2(i32 -2147483628, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, %dx.types.Handle %rwbab, i32 1, i32 2, i32 3, i32 4) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)
call void @dx.op.linAlgMatrixStoreToDescriptor.mC4M5N4U0S2(i32 -2147483628, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, %dx.types.Handle %rwbab, i32 1, i32 2, i32 0, i32 128) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

; dx.op.linAlgMatrixAccumulateToMemory
call void @dx.op.linAlgMatrixAccumulateToMemory.mC4M5N4U0S2.f32(i32 -2147483620, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, float addrspace(3)* getelementptr inbounds ([64 x float], [64 x float] addrspace(3)* @"\01?SharedArr@@3PAMA", i32 0, i32 0), i32 0, i32 0, i32 0, i32 0) ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ define void @MainHS() {
%v14 = call %dx.types.LinAlgMatrixC4M5N4U0S2 @dx.op.linAlgMatrixSetElement.mC4M5N4U0S2.mC4M5N4U0S2.i32(i32 -2147483629, %dx.types.LinAlgMatrixC4M5N4U0S2 %v9, i32 1, i32 1) ; LinAlgMatrixSetElement(matrix,threadLocalIndex,value)

; dx.op.linAlgMatrixStoreToDescriptor
call void @dx.op.linAlgMatrixStoreToDescriptor.mC4M5N4U0S2(i32 -2147483628, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, %dx.types.Handle %rwbab, i32 1, i32 2, i32 3, i32 4) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)
call void @dx.op.linAlgMatrixStoreToDescriptor.mC4M5N4U0S2(i32 -2147483628, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, %dx.types.Handle %rwbab, i32 1, i32 2, i32 0, i32 128) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

; dx.op.linAlgMatrixAccumulateToMemory
call void @dx.op.linAlgMatrixAccumulateToMemory.mC4M5N4U0S2.f32(i32 -2147483620, %dx.types.LinAlgMatrixC4M5N4U0S2 %v14, float addrspace(3)* getelementptr inbounds ([64 x float], [64 x float] addrspace(3)* @"\01?SharedArr@@3PAMA", i32 0, i32 0), i32 0, i32 0, i32 0, i32 0) ; LinAlgMatrixAccumulateToMemory(matrix,memory,targetType,offset,stride,layout)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
; REQUIRES: dxil-1-10
; RUN: not %dxv %s 2>&1 | FileCheck %s
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-ms-dx"

%dx.types.Handle = type { i8* }
%dx.types.ResBind = type { i32, i32, i32, i8 }
%dx.types.ResourceProperties = type { i32, i32 }
%dx.types.LinAlgMatrixC8M4N4U0S1 = type { i8* }
%dx.types.LinAlgMatrixC8M4N4U2S0 = type { i8* }
%dx.types.ResRet.i32 = type { i32, i32, i32, i32, i32 }
%struct.ByteAddressBuffer = type { i32 }
%struct.RWByteAddressBuffer = type { i32 }

define void @main() {
%1 = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, %dx.types.ResBind { i32 0, i32 0, i32 0, i8 1 }, i32 0, i1 false) ; CreateHandleFromBinding(bind,index,nonUniformIndex)
%2 = call %dx.types.Handle @dx.op.createHandleFromBinding(i32 217, %dx.types.ResBind zeroinitializer, i32 0, i1 false) ; CreateHandleFromBinding(bind,index,nonUniformIndex)
%3 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %2, %dx.types.ResourceProperties { i32 11, i32 0 }) ; AnnotateHandle(res,props) resource: ByteAddressBuffer
%4 = call %dx.types.LinAlgMatrixC8M4N4U0S1 @dx.op.linAlgMatrixLoadFromDescriptor.mC8M4N4U0S1(i32 -2147483634, %dx.types.Handle %3, i32 0, i32 0, i32 0, i32 128) ; LinAlgMatrixLoadFromDescriptor(handle,offset,stride,layout,align)

; CHECK: Function: main: error: LinAlgMatrixStoreToDescriptor requires layout RowMajor or ColumnMajor.
; CHECK-NEXT: note: at {{.*}} @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1
%5 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %1, %dx.types.ResourceProperties { i32 4107, i32 0 }) ; AnnotateHandle(res,props) resource: RWByteAddressBuffer
call void @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1(i32 -2147483628, %dx.types.LinAlgMatrixC8M4N4U0S1 %4, %dx.types.Handle %5, i32 0, i32 0, i32 4, i32 256) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

; CHECK-NEXT: Function: main: error: LinAlgMatrixStoreToDescriptor requires RWByteAddressBuffer.
; CHECK-NEXT: note: at {{.*}} @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1
%6 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %2, %dx.types.ResourceProperties { i32 11, i32 0 }) ; AnnotateHandle(res,props) resource: ByteAddressBuffer
call void @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1(i32 -2147483628, %dx.types.LinAlgMatrixC8M4N4U0S1 %4, %dx.types.Handle %6, i32 0, i32 0, i32 0, i32 128) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

; CHECK-NEXT: Function: main: error: parameter 'Align' must be a multiple of 128, got 296
; CHECK-NEXT: note: at {{.*}} @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1
%7 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %1, %dx.types.ResourceProperties { i32 4107, i32 0 }) ; AnnotateHandle(res,props) resource: RWByteAddressBuffer
call void @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1(i32 -2147483628, %dx.types.LinAlgMatrixC8M4N4U0S1 %4, %dx.types.Handle %7, i32 0, i32 0, i32 0, i32 296) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

; CHECK-NEXT: Function: main: error: parameter 'Align' must be greater than 0, got 0
; CHECK-NEXT: note: at {{.*}} @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1
%8 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %1, %dx.types.ResourceProperties { i32 4107, i32 0 }) ; AnnotateHandle(res,props) resource: RWByteAddressBuffer
call void @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1(i32 -2147483628, %dx.types.LinAlgMatrixC8M4N4U0S1 %4, %dx.types.Handle %8, i32 0, i32 0, i32 0, i32 0) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

%9 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %2, %dx.types.ResourceProperties { i32 11, i32 0 }) ; AnnotateHandle(res,props) resource: ByteAddressBuffer
%10 = call %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32 139, %dx.types.Handle %9, i32 0, i32 undef, i8 1, i32 4) ; RawBufferLoad(srv,index,elementOffset,mask,alignment)
%11 = extractvalue %dx.types.ResRet.i32 %10, 0

; CHECK-NEXT: Function: main: error: Align of LinAlgMatrixStoreToDescriptor must be an immediate constant.
; CHECK-NEXT: note: at {{.*}} @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1
%12 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %1, %dx.types.ResourceProperties { i32 4107, i32 0 }) ; AnnotateHandle(res,props) resource: RWByteAddressBuffer
call void @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1(i32 -2147483628, %dx.types.LinAlgMatrixC8M4N4U0S1 %4, %dx.types.Handle %12, i32 0, i32 0, i32 0, i32 %11) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

; CHECK-NEXT: Function: main: error: Layout of LinAlgMatrixStoreToDescriptor must be an immediate constant.
; CHECK-NEXT: note: at {{.*}} @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1
%13 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %1, %dx.types.ResourceProperties { i32 4107, i32 0 }) ; AnnotateHandle(res,props) resource: RWByteAddressBuffer
call void @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1(i32 -2147483628, %dx.types.LinAlgMatrixC8M4N4U0S1 %4, %dx.types.Handle %13, i32 0, i32 0, i32 %11, i32 256) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

; CHECK-NEXT: Function: main: error: Matrix Scope 'Thread' does not match expected scope Wave or ThreadGroup.
; CHECK-NEXT: note: at {{.*}} @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U2S0
%14 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %2, %dx.types.ResourceProperties { i32 11, i32 0 }) ; AnnotateHandle(res,props) resource: ByteAddressBuffer
%15 = call %dx.types.LinAlgMatrixC8M4N4U2S0 @dx.op.linAlgMatrixLoadFromDescriptor.mC8M4N4U2S0(i32 -2147483634, %dx.types.Handle %14, i32 0, i32 0, i32 4, i32 128) ; LinAlgMatrixLoadFromDescriptor(handle,offset,stride,layout,align)
%16 = call %dx.types.Handle @dx.op.annotateHandle(i32 216, %dx.types.Handle %1, %dx.types.ResourceProperties { i32 4107, i32 0 }) ; AnnotateHandle(res,props) resource: RWByteAddressBuffer
call void @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U2S0(i32 -2147483628, %dx.types.LinAlgMatrixC8M4N4U2S0 %15, %dx.types.Handle %16, i32 0, i32 0, i32 0, i32 128) ; LinAlgMatrixStoreToDescriptor(matrix,handle,offset,stride,layout,align)

; CHECK-NEXT: Validation failed.
ret void
}

; Function Attrs: nounwind
declare %dx.types.LinAlgMatrixC8M4N4U0S1 @dx.op.linAlgMatrixLoadFromDescriptor.mC8M4N4U0S1(i32, %dx.types.Handle, i32, i32, i32, i32) #0

; Function Attrs: nounwind
declare void @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U0S1(i32, %dx.types.LinAlgMatrixC8M4N4U0S1, %dx.types.Handle, i32, i32, i32, i32) #0

; Function Attrs: nounwind
declare %dx.types.LinAlgMatrixC8M4N4U2S0 @dx.op.linAlgMatrixLoadFromDescriptor.mC8M4N4U2S0(i32, %dx.types.Handle, i32, i32, i32, i32) #0

; Function Attrs: nounwind
declare void @dx.op.linAlgMatrixStoreToDescriptor.mC8M4N4U2S0(i32, %dx.types.LinAlgMatrixC8M4N4U2S0, %dx.types.Handle, i32, i32, i32, i32) #0

; Function Attrs: nounwind readonly
declare %dx.types.ResRet.i32 @dx.op.rawBufferLoad.i32(i32, %dx.types.Handle, i32, i32, i8, i32) #1

; Function Attrs: nounwind readnone
declare %dx.types.Handle @dx.op.annotateHandle(i32, %dx.types.Handle, %dx.types.ResourceProperties) #2

; Function Attrs: nounwind readnone
declare %dx.types.Handle @dx.op.createHandleFromBinding(i32, %dx.types.ResBind, i32, i1) #2

attributes #0 = { nounwind }
attributes #1 = { nounwind readnone }
attributes #2 = { nounwind readnone }

!dx.targetTypes = !{!0, !1}
!llvm.ident = !{!2}
!dx.version = !{!3}
!dx.valver = !{!3}
!dx.shaderModel = !{!4}
!dx.resources = !{!5}
!dx.entryPoints = !{!10}

!0 = !{%dx.types.LinAlgMatrixC8M4N4U0S1 undef, i32 8, i32 4, i32 4, i32 0, i32 1}
!1 = !{%dx.types.LinAlgMatrixC8M4N4U2S0 undef, i32 8, i32 4, i32 4, i32 2, i32 0}
!2 = !{!"dxc(private) 1.9.0.5436 (linalg-vali-matrixstoretodescriptor, 83eca680d-dirty)"}
!3 = !{i32 1, i32 10}
!4 = !{!"cs", i32 6, i32 10}
!5 = !{!6, !8, null, null}
!6 = !{!7}
!7 = !{i32 0, %struct.ByteAddressBuffer* undef, !"", i32 0, i32 0, i32 1, i32 11, i32 0, null}
!8 = !{!9}
!9 = !{i32 0, %struct.RWByteAddressBuffer* undef, !"", i32 0, i32 0, i32 1, i32 11, i1 false, i1 false, i1 false, null}
!10 = !{void ()* @main, !"main", null, !5, !11}
!11 = !{i32 0, i64 8598323216, i32 4, !12}
!12 = !{i32 1, i32 1, i32 1}

Loading
Loading