Skip to content

Commit 0beaa76

Browse files
authored
[SER] MaybeReorderThread + Make(Nop|Miss) HLSL -> DXIL lowering and tests (microsoft#7262)
- HLSL -> DXIL lowering - ast, hlsl->dxil, dxilgen, and ScalarReplAggregatesHLSL tests SER implementation tracker (microsoft#7214)
1 parent 0a470b5 commit 0beaa76

File tree

14 files changed

+376
-93
lines changed

14 files changed

+376
-93
lines changed

include/dxc/HLSL/HLOperations.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,10 @@ const unsigned kNodeHandleToResCastOpIdx = 1;
433433
const unsigned kAnnotateNodeHandleNodePropIdx = 2;
434434
const unsigned kAnnotateNodeRecordHandleNodeRecordPropIdx = 2;
435435

436+
// HitObject::MakeMiss
437+
const unsigned kHitObjectMakeMiss_NumOp = 8;
438+
const unsigned kHitObjectMakeMissRayDescOpIdx = 4;
439+
436440
} // namespace HLOperandIndex
437441

438442
llvm::Function *GetOrCreateHLFunction(llvm::Module &M,

lib/HLSL/HLOperationLower.cpp

Lines changed: 105 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
// //
1313
///////////////////////////////////////////////////////////////////////////////
1414

15+
#include "dxc/DXIL/DxilConstants.h"
1516
#define _USE_MATH_DEFINES
1617
#include <array>
1718
#include <cmath>
@@ -6183,19 +6184,114 @@ Value *TranslateUnpack(CallInst *CI, IntrinsicOp IOP, OP::OpCode opcode,
61836184

61846185
// Shader Execution Reordering.
61856186
namespace {
6186-
Value *TranslateHitObjectMake(CallInst *CI, IntrinsicOp IOP, OP::OpCode opcode,
6187-
HLOperationLowerHelper &helper,
6188-
HLObjectOperationLowerHelper *pObjHelper,
6187+
Value *TranslateHitObjectMake(CallInst *CI, IntrinsicOp IOP, OP::OpCode Opcode,
6188+
HLOperationLowerHelper &Helper,
6189+
HLObjectOperationLowerHelper *ObjHelper,
61896190
bool &Translated) {
6190-
return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches
6191+
hlsl::OP *HlslOP = &Helper.hlslOP;
6192+
IRBuilder<> Builder(CI);
6193+
unsigned SrcIdx = 1;
6194+
Value *HitObjectPtr = CI->getArgOperand(SrcIdx++);
6195+
if (Opcode == OP::OpCode::HitObject_MakeNop) {
6196+
Value *HitObject = TrivialDxilOperation(
6197+
Opcode, {nullptr}, Type::getVoidTy(CI->getContext()), CI, HlslOP);
6198+
Builder.CreateStore(HitObject, HitObjectPtr);
6199+
DXASSERT(
6200+
CI->use_empty(),
6201+
"Default ctor return type is a Clang artifact. Value must not be used");
6202+
return nullptr;
6203+
}
6204+
6205+
DXASSERT_NOMSG(CI->getNumArgOperands() ==
6206+
HLOperandIndex::kHitObjectMakeMiss_NumOp);
6207+
Value *RayFlags = CI->getArgOperand(SrcIdx++);
6208+
Value *MissShaderIdx = CI->getArgOperand(SrcIdx++);
6209+
DXASSERT_NOMSG(SrcIdx == HLOperandIndex::kHitObjectMakeMissRayDescOpIdx);
6210+
Value *RayDescOrigin = CI->getArgOperand(SrcIdx++);
6211+
Value *RayDescOriginX =
6212+
Builder.CreateExtractElement(RayDescOrigin, (uint64_t)0);
6213+
Value *RayDescOriginY =
6214+
Builder.CreateExtractElement(RayDescOrigin, (uint64_t)1);
6215+
Value *RayDescOriginZ =
6216+
Builder.CreateExtractElement(RayDescOrigin, (uint64_t)2);
6217+
6218+
Value *RayDescTMin = CI->getArgOperand(SrcIdx++);
6219+
Value *RayDescDirection = CI->getArgOperand(SrcIdx++);
6220+
Value *RayDescDirectionX =
6221+
Builder.CreateExtractElement(RayDescDirection, (uint64_t)0);
6222+
Value *RayDescDirectionY =
6223+
Builder.CreateExtractElement(RayDescDirection, (uint64_t)1);
6224+
Value *RayDescDirectionZ =
6225+
Builder.CreateExtractElement(RayDescDirection, (uint64_t)2);
6226+
6227+
Value *RayDescTMax = CI->getArgOperand(SrcIdx++);
6228+
DXASSERT_NOMSG(SrcIdx == CI->getNumArgOperands());
6229+
6230+
Value *OutHitObject = TrivialDxilOperation(
6231+
Opcode,
6232+
{nullptr, RayFlags, MissShaderIdx, RayDescOriginX, RayDescOriginY,
6233+
RayDescOriginZ, RayDescTMin, RayDescDirectionX, RayDescDirectionY,
6234+
RayDescDirectionZ, RayDescTMax},
6235+
Helper.voidTy, CI, HlslOP);
6236+
Builder.CreateStore(OutHitObject, HitObjectPtr);
6237+
return nullptr;
61916238
}
61926239

61936240
Value *TranslateMaybeReorderThread(CallInst *CI, IntrinsicOp IOP,
6194-
OP::OpCode opcode,
6195-
HLOperationLowerHelper &helper,
6241+
OP::OpCode OpCode,
6242+
HLOperationLowerHelper &Helper,
61966243
HLObjectOperationLowerHelper *pObjHelper,
61976244
bool &Translated) {
6198-
return nullptr; // TODO: Merge SER DXIL patches
6245+
hlsl::OP *OP = &Helper.hlslOP;
6246+
6247+
// clang-format off
6248+
// Match MaybeReorderThread overload variants:
6249+
// void MaybeReorderThread(<Op>,
6250+
// HitObject Hit);
6251+
// void MaybeReorderThread(<Op>,
6252+
// uint CoherenceHint,
6253+
// uint NumCoherenceHintBitsFromLSB );
6254+
// void MaybeReorderThread(<Op>,
6255+
// HitObject Hit,
6256+
// uint CoherenceHint,
6257+
// uint NumCoherenceHintBitsFromLSB);
6258+
// clang-format on
6259+
const unsigned NumHLArgs = CI->getNumArgOperands();
6260+
DXASSERT_NOMSG(NumHLArgs >= 2);
6261+
6262+
// Use a NOP HitObject for MaybeReorderThread without HitObject.
6263+
Value *HitObject = nullptr;
6264+
unsigned HLIndex = 1;
6265+
if (3 == NumHLArgs) {
6266+
HitObject = TrivialDxilOperation(DXIL::OpCode::HitObject_MakeNop, {nullptr},
6267+
Type::getVoidTy(CI->getContext()), CI, OP);
6268+
} else {
6269+
Value *FirstParam = CI->getArgOperand(HLIndex);
6270+
DXASSERT_NOMSG(isa<PointerType>(FirstParam->getType()));
6271+
IRBuilder<> Builder(CI);
6272+
HitObject = Builder.CreateLoad(FirstParam);
6273+
HLIndex++;
6274+
}
6275+
6276+
// If there are trailing parameters, these have to be the two coherence bit
6277+
// parameters
6278+
Value *CoherenceHint = nullptr;
6279+
Value *NumCoherenceHintBits = nullptr;
6280+
if (2 != NumHLArgs) {
6281+
DXASSERT_NOMSG(HLIndex + 2 == NumHLArgs);
6282+
CoherenceHint = CI->getArgOperand(HLIndex++);
6283+
NumCoherenceHintBits = CI->getArgOperand(HLIndex++);
6284+
DXASSERT_NOMSG(Helper.i32Ty == CoherenceHint->getType());
6285+
DXASSERT_NOMSG(Helper.i32Ty == NumCoherenceHintBits->getType());
6286+
} else {
6287+
CoherenceHint = UndefValue::get(Helper.i32Ty);
6288+
NumCoherenceHintBits = OP->GetU32Const(0);
6289+
}
6290+
6291+
TrivialDxilOperation(
6292+
OpCode, {nullptr, HitObject, CoherenceHint, NumCoherenceHintBits},
6293+
Type::getVoidTy(CI->getContext()), CI, OP);
6294+
return nullptr;
61996295
}
62006296

62016297
Value *TranslateHitObjectFromRayQuery(CallInst *CI, IntrinsicOp IOP,
@@ -6968,11 +7064,9 @@ IntrinsicLower gLowerTable[] = {
69687064
{IntrinsicOp::MOP_InterlockedUMin, TranslateMopAtomicBinaryOperation,
69697065
DXIL::OpCode::NumOpCodes},
69707066
{IntrinsicOp::MOP_DxHitObject_MakeNop, TranslateHitObjectMake,
6971-
DXIL::OpCode::NumOpCodes_Dxil_1_8}, // FIXME: Just a placeholder Dxil
6972-
// opcode
7067+
DXIL::OpCode::HitObject_MakeNop},
69737068
{IntrinsicOp::IOP_DxMaybeReorderThread, TranslateMaybeReorderThread,
6974-
DXIL::OpCode::NumOpCodes_Dxil_1_8}, // FIXME: Just a placeholder Dxil
6975-
// opcode
7069+
DXIL::OpCode::MaybeReorderThread},
69767070
{IntrinsicOp::IOP_Vkstatic_pointer_cast, UnsupportedVulkanIntrinsic,
69777071
DXIL::OpCode::NumOpCodes},
69787072
{IntrinsicOp::IOP_Vkreinterpret_pointer_cast, UnsupportedVulkanIntrinsic,

lib/Transforms/Scalar/ScalarReplAggregatesHLSL.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2775,6 +2775,14 @@ void SROA_Helper::RewriteCall(CallInst *CI) {
27752775
RewriteCallArg(CI, HLOperandIndex::kCallShaderPayloadOpIdx,
27762776
/*bIn*/ true, /*bOut*/ true);
27772777
} break;
2778+
case IntrinsicOp::MOP_DxHitObject_MakeMiss: {
2779+
if (OldVal ==
2780+
CI->getArgOperand(HLOperandIndex::kHitObjectMakeMissRayDescOpIdx)) {
2781+
RewriteWithFlattenedHLIntrinsicCall(CI, OldVal, NewElts,
2782+
/*loadElts*/ true);
2783+
DeadInsts.push_back(CI);
2784+
}
2785+
} break;
27782786
case IntrinsicOp::MOP_TraceRayInline: {
27792787
if (OldVal ==
27802788
CI->getArgOperand(HLOperandIndex::kTraceRayInlineRayDescOpIdx)) {

tools/clang/lib/Sema/SemaHLSL.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12066,6 +12066,7 @@ void Sema::DiagnoseReachableHLSLCall(CallExpr *CE, const hlsl::ShaderModel *SM,
1206612066
case hlsl::IntrinsicOp::MOP_TraceRayInline:
1206712067
DiagnoseTraceRayInline(*this, CE);
1206812068
break;
12069+
case hlsl::IntrinsicOp::MOP_DxHitObject_MakeMiss:
1206912070
case hlsl::IntrinsicOp::MOP_DxHitObject_MakeNop:
1207012071
DiagnoseReachableSERCall(*this, CE, EntrySK, EntryDecl, false);
1207112072
break;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// RUN: %dxc -T lib_6_9 -E main %s | FileCheck %s --check-prefix DXIL
2+
// RUN: %dxc -T lib_6_9 -E main %s -fcgl | FileCheck %s --check-prefix FCGL
3+
// RUN: %dxc -T lib_6_9 -E main %s -ast-dump-implicit | FileCheck %s --check-prefix AST
4+
5+
// AST: |-FunctionDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> implicit used MaybeReorderThread 'void (dx::HitObject)' extern
6+
// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> HitObject 'dx::HitObject':'dx::HitObject'
7+
// AST-NEXT: | |-HLSLIntrinsicAttr {{[^ ]+}} <<invalid sloc>> Implicit "op" "" 359
8+
// AST-NEXT: | `-AvailabilityAttr {{[^ ]+}} <<invalid sloc>> Implicit 6.9 0 0 ""
9+
10+
// AST: |-FunctionDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> implicit used MaybeReorderThread 'void (dx::HitObject, unsigned int, unsigned int)' extern
11+
// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> HitObject 'dx::HitObject':'dx::HitObject'
12+
// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> CoherenceHint 'unsigned int'
13+
// AST-NEXT: | |-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> NumCoherenceHintBitsFromLSB 'unsigned int'
14+
// AST-NEXT: | |-HLSLIntrinsicAttr {{[^ ]+}} <<invalid sloc>> Implicit "op" "" 359
15+
// AST-NEXT: | `-AvailabilityAttr {{[^ ]+}} <<invalid sloc>> Implicit 6.9 0 0 ""
16+
17+
// AST: `-FunctionDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> implicit used MaybeReorderThread 'void (unsigned int, unsigned int)' extern
18+
// AST-NEXT: |-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> CoherenceHint 'unsigned int'
19+
// AST-NEXT: |-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> NumCoherenceHintBitsFromLSB 'unsigned int'
20+
// AST-NEXT: |-HLSLIntrinsicAttr {{[^ ]+}} <<invalid sloc>> Implicit "op" "" 359
21+
// AST-NEXT: `-AvailabilityAttr {{[^ ]+}} <<invalid sloc>> Implicit 6.9 0 0 ""
22+
23+
// FCGL: call void @"dx.hl.op..void (i32, %dx.types.HitObject*)"(i32 359, %dx.types.HitObject* %[[NOP:[^ ]+]])
24+
// FCGL-NEXT: call void @"dx.hl.op..void (i32, %dx.types.HitObject*, i32, i32)"(i32 359, %dx.types.HitObject* %[[NOP]], i32 241, i32 3)
25+
// FCGL-NEXT: call void @"dx.hl.op..void (i32, i32, i32)"(i32 359, i32 242, i32 7)
26+
27+
// DXIL: call void @dx.op.maybeReorderThread(i32 268, %dx.types.HitObject %[[NOP:[^ ]+]], i32 undef, i32 0) ; MaybeReorderThread(hitObject,coherenceHint,numCoherenceHintBitsFromLSB)
28+
// DXIL-NEXT: call void @dx.op.maybeReorderThread(i32 268, %dx.types.HitObject %[[NOP]], i32 241, i32 3) ; MaybeReorderThread(hitObject,coherenceHint,numCoherenceHintBitsFromLSB)
29+
// DXIL-NEXT: call void @dx.op.maybeReorderThread(i32 268, %dx.types.HitObject %[[NOP]], i32 242, i32 7) ; MaybeReorderThread(hitObject,coherenceHint,numCoherenceHintBitsFromLSB)
30+
31+
[shader("raygeneration")]
32+
void main() {
33+
dx::HitObject hit;
34+
dx::MaybeReorderThread(hit);
35+
dx::MaybeReorderThread(hit, 0xf1, 3);
36+
dx::MaybeReorderThread(0xf2, 7);
37+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// RUN: %dxc -T lib_6_9 -E main %s | FileCheck %s --check-prefix DXIL
2+
// RUN: %dxc -T lib_6_9 -E main %s -fcgl | FileCheck %s --check-prefix FCGL
3+
// RUN: %dxc -T lib_6_9 -E main %s -ast-dump-implicit | FileCheck %s --check-prefix AST
4+
5+
// AST: | |-CXXRecordDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> implicit referenced class HitObject definition
6+
// AST-NEXT: | | |-FinalAttr {{[^ ]+}} <<invalid sloc>> Implicit final
7+
// AST-NEXT: | | |-AvailabilityAttr {{[^ ]+}} <<invalid sloc>> Implicit 6.9 0 0 ""
8+
// AST-NEXT: | | |-HLSLHitObjectAttr {{[^ ]+}} <<invalid sloc>> Implicit
9+
// AST-NEXT: | | |-FieldDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> implicit h 'int'
10+
// AST-NEXT: | | |-CXXConstructorDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> used HitObject 'void ()'
11+
// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <<invalid sloc>> Implicit "op" "" 358
12+
// AST-NEXT: | | | `-HLSLCXXOverloadAttr {{[^ ]+}} <<invalid sloc>> Implicit
13+
14+
// AST: | | |-FunctionTemplateDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> MakeMiss
15+
// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> class TResult
16+
// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> class TRayFlags
17+
// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> class TMissShaderIndex
18+
// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> class TRay
19+
// AST-NEXT: | | | |-CXXMethodDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> implicit MakeMiss 'TResult (TRayFlags, TMissShaderIndex, TRay) const' static
20+
// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> RayFlags 'TRayFlags'
21+
// AST-NEXT: | | | | |-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> MissShaderIndex 'TMissShaderIndex'
22+
// AST-NEXT: | | | | `-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> Ray 'TRay'
23+
// AST-NEXT: | | | `-CXXMethodDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> used MakeMiss 'dx::HitObject (unsigned int, unsigned int, RayDesc)' static
24+
// AST-NEXT: | | | |-TemplateArgument type 'dx::HitObject'
25+
// AST-NEXT: | | | |-TemplateArgument type 'unsigned int'
26+
// AST-NEXT: | | | |-TemplateArgument type 'unsigned int'
27+
// AST-NEXT: | | | |-TemplateArgument type 'RayDesc'
28+
// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> MakeMiss 'unsigned int'
29+
// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> RayFlags 'unsigned int'
30+
// AST-NEXT: | | | |-ParmVarDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> MissShaderIndex 'RayDesc'
31+
// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <<invalid sloc>> Implicit "op" "" 387
32+
// AST-NEXT: | | | `-AvailabilityAttr {{[^ ]+}} <<invalid sloc>> Implicit 6.9 0 0 ""
33+
34+
// AST: | | |-FunctionTemplateDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> MakeNop
35+
// AST-NEXT: | | | |-TemplateTypeParmDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> class TResult
36+
// AST-NEXT: | | | |-CXXMethodDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> implicit MakeNop 'TResult () const' static
37+
// AST-NEXT: | | | `-CXXMethodDecl {{[^ ]+}} <<invalid sloc>> <invalid sloc> used MakeNop 'dx::HitObject ()' static
38+
// AST-NEXT: | | | |-TemplateArgument type 'dx::HitObject'
39+
// AST-NEXT: | | | |-HLSLIntrinsicAttr {{[^ ]+}} <<invalid sloc>> Implicit "op" "" 358
40+
// AST-NEXT: | | | `-AvailabilityAttr {{[^ ]+}} <<invalid sloc>> Implicit 6.9 0 0 ""
41+
42+
// FCGL: %{{[^ ]+}} = call %dx.types.HitObject* @"dx.hl.op..%dx.types.HitObject* (i32, %dx.types.HitObject*)"(i32 358, %dx.types.HitObject* %{{[^ ]+}})
43+
// FCGL: call void @"dx.hl.op..void (i32, %dx.types.HitObject*)"(i32 358, %dx.types.HitObject* %{{[^ ]+}})
44+
// FCGL: call void @"dx.hl.op..void (i32, %dx.types.HitObject*, i32, i32, %struct.RayDesc*)"(i32 387, %dx.types.HitObject* %{{[^ ]+}}, i32 0, i32 1, %struct.RayDesc* %{{[^ ]+}})
45+
// FCGL: call void @"dx.hl.op..void (i32, %dx.types.HitObject*, i32, i32, %struct.RayDesc*)"(i32 387, %dx.types.HitObject* %{{[^ ]+}}, i32 0, i32 2, %struct.RayDesc* %{{[^ ]+}})
46+
47+
// Expect HitObject_Make* calls with identical parameters to be folded.
48+
// DXIL: {{[^ ]+}} = call %dx.types.HitObject @dx.op.hitObject_MakeNop(i32 266) ; HitObject_MakeNop()
49+
// DXIL-NOT: {{[^ ]+}} = call %dx.types.HitObject @dx.op.hitObject_MakeNop
50+
// DXIL: %{{[^ ]+}} = call %dx.types.HitObject @dx.op.hitObject_MakeMiss(i32 265, i32 0, i32 1, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0x3FA99999A0000000, float 1.000000e+03) ; HitObject_MakeMiss(RayFlags,MissShaderIndex,Origin_X,Origin_Y,Origin_Z,TMin,Direction_X,Direction_Y,Direction_Z,TMax)
51+
// DXIL-NOT: %{{[^ ]+}} = call %dx.types.HitObject @dx.op.hitObject_MakeMiss(i32 265, i32 0, i32 1
52+
// DXIL: %{{[^ ]+}} = call %dx.types.HitObject @dx.op.hitObject_MakeMiss(i32 265, i32 0, i32 2, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00, float 1.000000e+00, float 0x3FA99999A0000000, float 1.000000e+03) ; HitObject_MakeMiss(RayFlags,MissShaderIndex,Origin_X,Origin_Y,Origin_Z,TMin,Direction_X,Direction_Y,Direction_Z,TMax)
53+
54+
void Use(in dx::HitObject hit) {
55+
dx::MaybeReorderThread(hit);
56+
}
57+
58+
[shader("raygeneration")]
59+
void main() {
60+
dx::HitObject nop;
61+
Use(nop);
62+
63+
dx::HitObject nop2 = dx::HitObject::MakeNop();
64+
Use(nop2);
65+
66+
RayDesc ray = {{0,0,0}, {0,0,1}, 0.05, 1000.0};
67+
dx::HitObject miss = dx::HitObject::MakeMiss(0, 1, ray);
68+
Use(miss);
69+
70+
dx::HitObject miss2 = dx::HitObject::MakeMiss(0, 1, ray);
71+
Use(miss2);
72+
73+
dx::HitObject miss3 = dx::HitObject::MakeMiss(0, 2, ray);
74+
Use(miss3);
75+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
config.unsupported = 'dxil-1-9' not in config.available_features

tools/clang/test/DXC/Passes/DxilGen/hitobject_dxilgen.ll

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
; RUN: %dxopt %s -hlsl-passes-resume -dxilgen -S | FileCheck %s
22
; REQUIRES: dxil-1-9
33

4-
; CHECK-NOT: @dx.op.hitObject_
5-
; CHECK-NOT: @dx.op.maybeReorderThread
6-
74
;
85
; Buffer Definitions:
96
;
@@ -37,9 +34,11 @@ entry:
3734
%tmp = alloca %dx.types.HitObject, align 4
3835
%0 = bitcast %dx.types.HitObject* %hit to i8*, !dbg !19 ; line:9 col:3
3936
call void @llvm.lifetime.start(i64 4, i8* %0) #0, !dbg !19 ; line:9 col:3
37+
; CHECK: %{{[^ ]+}} = call %dx.types.HitObject @dx.op.hitObject_MakeNop(i32 266)
4038
%1 = call %dx.types.HitObject* @"dx.hl.op..%dx.types.HitObject* (i32, %dx.types.HitObject*)"(i32 358, %dx.types.HitObject* %hit), !dbg !23 ; line:9 col:17
4139
%2 = bitcast %dx.types.HitObject* %tmp to i8*, !dbg !24 ; line:10 col:3
4240
call void @llvm.lifetime.start(i64 4, i8* %2) #0, !dbg !24 ; line:10 col:3
41+
; CHECK: %{{[^ ]+}} = call %dx.types.HitObject @dx.op.hitObject_MakeNop(i32 266)
4342
call void @"dx.hl.op..void (i32, %dx.types.HitObject*)"(i32 358, %dx.types.HitObject* %tmp), !dbg !24 ; line:10 col:3
4443
%3 = bitcast %dx.types.HitObject* %tmp to i8*, !dbg !24 ; line:10 col:3
4544
call void @llvm.lifetime.end(i64 4, i8* %3) #0, !dbg !24 ; line:10 col:3

tools/clang/test/DXC/Passes/DxilGen/maybereorder_dxilgen.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
; RUN: %dxopt %s -hlsl-passes-resume -dxilgen -S | FileCheck %s
22
; REQUIRES: dxil-1-9
33

4-
; CHECK-NOT: @dx.op.hitObject_
5-
; CHECK-NOT: @dx.op.maybeReorderThread
64

75
;
86
; Buffer Definitions:
@@ -36,6 +34,7 @@ entry:
3634
%hit = alloca %dx.types.HitObject, align 4
3735
%0 = bitcast %dx.types.HitObject* %hit to i8*, !dbg !19 ; line:9 col:3
3836
call void @llvm.lifetime.start(i64 4, i8* %0) #0, !dbg !19 ; line:9 col:3
37+
; CHECK: %{{[^ ]+}} = call %dx.types.HitObject @dx.op.hitObject_MakeNop(i32 266)
3938
%1 = call %dx.types.HitObject* @"dx.hl.op..%dx.types.HitObject* (i32, %dx.types.HitObject*)"(i32 358, %dx.types.HitObject* %hit), !dbg !23 ; line:9 col:17
4039
call void @"dx.hl.op..void (i32, %dx.types.HitObject*)"(i32 359, %dx.types.HitObject* %hit), !dbg !24 ; line:10 col:3
4140
call void @"dx.hl.op..void (i32, %dx.types.HitObject*, i32, i32)"(i32 359, %dx.types.HitObject* %hit, i32 241, i32 3), !dbg !25 ; line:11 col:3

0 commit comments

Comments
 (0)