Skip to content

Commit bf01592

Browse files
committed
Merge remote-tracking branch 'ms/main' into ser_hlsltraceinvoke_patch
2 parents 35aa6bb + 0beaa76 commit bf01592

18 files changed

Lines changed: 378 additions & 97 deletions

File tree

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
// HitObject::TraceRay
437441
const unsigned kHitObjectTraceRay_RayDescOpIdx = 8;
438442
const unsigned kHitObjectTraceRay_NumOp = 10;

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>
@@ -6188,19 +6189,114 @@ Value *TranslateUnpack(CallInst *CI, IntrinsicOp IOP, OP::OpCode opcode,
61886189

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

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

62066302
Value *TranslateHitObjectFromRayQuery(CallInst *CI, IntrinsicOp IOP,
@@ -7012,11 +7108,9 @@ IntrinsicLower gLowerTable[] = {
70127108
{IntrinsicOp::MOP_InterlockedUMin, TranslateMopAtomicBinaryOperation,
70137109
DXIL::OpCode::NumOpCodes},
70147110
{IntrinsicOp::MOP_DxHitObject_MakeNop, TranslateHitObjectMake,
7015-
DXIL::OpCode::NumOpCodes_Dxil_1_8}, // FIXME: Just a placeholder Dxil
7016-
// opcode
7111+
DXIL::OpCode::HitObject_MakeNop},
70177112
{IntrinsicOp::IOP_DxMaybeReorderThread, TranslateMaybeReorderThread,
7018-
DXIL::OpCode::NumOpCodes_Dxil_1_8}, // FIXME: Just a placeholder Dxil
7019-
// opcode
7113+
DXIL::OpCode::MaybeReorderThread},
70207114
{IntrinsicOp::IOP_Vkstatic_pointer_cast, UnsupportedVulkanIntrinsic,
70217115
DXIL::OpCode::NumOpCodes},
70227116
{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
@@ -2777,6 +2777,14 @@ void SROA_Helper::RewriteCall(CallInst *CI) {
27772777
RewriteCallArg(CI, HLOperandIndex::kCallShaderPayloadOpIdx,
27782778
/*bIn*/ true, /*bOut*/ true);
27792779
} break;
2780+
case IntrinsicOp::MOP_DxHitObject_MakeMiss: {
2781+
if (OldVal ==
2782+
CI->getArgOperand(HLOperandIndex::kHitObjectMakeMissRayDescOpIdx)) {
2783+
RewriteWithFlattenedHLIntrinsicCall(CI, OldVal, NewElts,
2784+
/*loadElts*/ true);
2785+
DeadInsts.push_back(CI);
2786+
}
2787+
} break;
27802788
case IntrinsicOp::MOP_TraceRayInline: {
27812789
if (OldVal ==
27822790
CI->getArgOperand(HLOperandIndex::kTraceRayInlineRayDescOpIdx)) {

tools/clang/lib/SPIRV/DeclResultIdMapper.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3522,7 +3522,8 @@ SpirvVariable *DeclResultIdMapper::createSpirvInterfaceVariable(
35223522
// Decorate with PerPrimitiveNV for per-primitive out variables.
35233523
spvBuilder.decoratePerPrimitiveNV(varInstr,
35243524
varInstr->getSourceLocation());
3525-
} else {
3525+
} else if (stageVar.getSemanticInfo().getKind() !=
3526+
hlsl::Semantic::Kind::DomainLocation) {
35263527
spvBuilder.decoratePatch(varInstr, varInstr->getSourceLocation());
35273528
}
35283529
}

tools/clang/lib/Sema/SemaHLSL.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12067,6 +12067,7 @@ void Sema::DiagnoseReachableHLSLCall(CallExpr *CE, const hlsl::ShaderModel *SM,
1206712067
DiagnoseTraceRayInline(*this, CE);
1206812068
break;
1206912069
case hlsl::IntrinsicOp::MOP_DxHitObject_Invoke:
12070+
case hlsl::IntrinsicOp::MOP_DxHitObject_MakeMiss:
1207012071
case hlsl::IntrinsicOp::MOP_DxHitObject_MakeNop:
1207112072
case hlsl::IntrinsicOp::MOP_DxHitObject_TraceRay:
1207212073
DiagnoseReachableSERCall(*this, CE, EntrySK, EntryDecl, false);
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/CodeGenSPIRV/bezier.domain.hlsl2spv

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ DS_OUTPUT BezierEvalDS( HS_CONSTANT_DATA_OUTPUT input,
9696
// CHECK-NEXT: OpDecorate %in_var_TANVCORNER Patch
9797
// CHECK-NEXT: OpDecorate %in_var_TANWEIGHTS Patch
9898
// CHECK-NEXT: OpDecorate %gl_TessCoord BuiltIn TessCoord
99-
// CHECK-NEXT: OpDecorate %gl_TessCoord Patch
10099
// CHECK-NEXT: OpDecorate %gl_Position BuiltIn Position
101100
// CHECK-NEXT: OpDecorate %in_var_BEZIERPOS Location 0
102101
// CHECK-NEXT: OpDecorate %in_var_TANGENT Location 1

tools/clang/test/CodeGenSPIRV/semantic.domain-location.ds.hlsl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
// CHECK-SAME: %gl_TessCoord
55

66
// CHECK: OpDecorate %gl_TessCoord BuiltIn TessCoord
7-
// CHECK: OpDecorate %gl_TessCoord Patch
87

98
// CHECK: %gl_TessCoord = OpVariable %_ptr_Input_v3float Input
109

0 commit comments

Comments
 (0)