Skip to content

Commit ea3d846

Browse files
authored
[SER] Declare all SER HLSL intrinsics (microsoft#7347)
Simplify merging the SER lowering PRs by declaring all missing SER HLSL intrinsics up front. This reserves stable HLSL opcodes similar to what was done for the DXIL opcodes before. Specification: https://github.com/microsoft/hlsl-specs/blob/main/proposals/0027-shader-execution-reordering.md DXC SER implementation tracker: microsoft#7214
1 parent 30a7579 commit ea3d846

File tree

7 files changed

+225
-9
lines changed

7 files changed

+225
-9
lines changed

include/dxc/HlslIntrinsicOp.h

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,34 @@ enum class IntrinsicOp {
336336
MOP_TraceRayInline = 325,
337337
MOP_WorldRayDirection = 326,
338338
MOP_WorldRayOrigin = 327,
339+
MOP_DxHitObject_FromRayQuery = 363,
340+
MOP_DxHitObject_GetAttributes = 364,
341+
MOP_DxHitObject_GetGeometryIndex = 365,
342+
MOP_DxHitObject_GetHitKind = 366,
343+
MOP_DxHitObject_GetInstanceID = 367,
344+
MOP_DxHitObject_GetInstanceIndex = 368,
345+
MOP_DxHitObject_GetObjectRayDirection = 369,
346+
MOP_DxHitObject_GetObjectRayOrigin = 370,
347+
MOP_DxHitObject_GetObjectToWorld3x4 = 371,
348+
MOP_DxHitObject_GetObjectToWorld4x3 = 372,
349+
MOP_DxHitObject_GetPrimitiveIndex = 373,
350+
MOP_DxHitObject_GetRayFlags = 374,
351+
MOP_DxHitObject_GetRayTCurrent = 375,
352+
MOP_DxHitObject_GetRayTMin = 376,
353+
MOP_DxHitObject_GetShaderTableIndex = 377,
354+
MOP_DxHitObject_GetWorldRayDirection = 378,
355+
MOP_DxHitObject_GetWorldRayOrigin = 379,
356+
MOP_DxHitObject_GetWorldToObject3x4 = 380,
357+
MOP_DxHitObject_GetWorldToObject4x3 = 381,
358+
MOP_DxHitObject_Invoke = 382,
359+
MOP_DxHitObject_IsHit = 383,
360+
MOP_DxHitObject_IsMiss = 384,
361+
MOP_DxHitObject_IsNop = 385,
362+
MOP_DxHitObject_LoadLocalRootTableConstant = 386,
363+
MOP_DxHitObject_MakeMiss = 387,
339364
MOP_DxHitObject_MakeNop = 358,
365+
MOP_DxHitObject_SetShaderTableIndex = 388,
366+
MOP_DxHitObject_TraceRay = 389,
340367
IOP_DxMaybeReorderThread = 359,
341368
MOP_Count = 328,
342369
MOP_FinishedCrossGroupSharing = 329,
@@ -369,7 +396,7 @@ enum class IntrinsicOp {
369396
IOP_usign = 355,
370397
MOP_InterlockedUMax = 356,
371398
MOP_InterlockedUMin = 357,
372-
Num_Intrinsics = 363,
399+
Num_Intrinsics = 390,
373400
};
374401
inline bool HasUnsignedIntrinsicOpcode(IntrinsicOp opcode) {
375402
switch (opcode) {

include/dxc/dxcapi.internal.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,13 @@ enum LEGAL_INTRINSIC_COMPTYPES {
131131
LICOMPTYPE_THREAD_NODE_OUTPUT_RECORDS = 50,
132132

133133
LICOMPTYPE_HIT_OBJECT = 51,
134+
LICOMPTYPE_RAY_QUERY = 52,
134135

135136
#ifdef ENABLE_SPIRV_CODEGEN
136-
LICOMPTYPE_VK_BUFFER_POINTER = 52,
137-
LICOMPTYPE_COUNT = 53
137+
LICOMPTYPE_VK_BUFFER_POINTER = 53,
138+
LICOMPTYPE_COUNT = 54
138139
#else
139-
LICOMPTYPE_COUNT = 52
140+
LICOMPTYPE_COUNT = 53
140141
#endif
141142
};
142143

lib/HLSL/HLOperationLower.cpp

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6197,6 +6197,77 @@ Value *TranslateMaybeReorderThread(CallInst *CI, IntrinsicOp IOP,
61976197
bool &Translated) {
61986198
return nullptr; // TODO: Merge SER DXIL patches
61996199
}
6200+
6201+
Value *TranslateHitObjectFromRayQuery(CallInst *CI, IntrinsicOp IOP,
6202+
OP::OpCode OpCode,
6203+
HLOperationLowerHelper &Helper,
6204+
HLObjectOperationLowerHelper *pObjHelper,
6205+
bool &Translated) {
6206+
return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches
6207+
}
6208+
6209+
Value *TranslateHitObjectTraceRay(CallInst *CI, IntrinsicOp IOP,
6210+
OP::OpCode OpCode,
6211+
HLOperationLowerHelper &Helper,
6212+
HLObjectOperationLowerHelper *pObjHelper,
6213+
bool &Translated) {
6214+
return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches
6215+
}
6216+
6217+
Value *TranslateHitObjectInvoke(CallInst *CI, IntrinsicOp IOP,
6218+
OP::OpCode OpCode,
6219+
HLOperationLowerHelper &Helper,
6220+
HLObjectOperationLowerHelper *pObjHelper,
6221+
bool &Translated) {
6222+
return nullptr; // TODO: Merge SER DXIL patches
6223+
}
6224+
6225+
Value *TranslateHitObjectGetAttributes(CallInst *CI, IntrinsicOp IOP,
6226+
OP::OpCode OpCode,
6227+
HLOperationLowerHelper &Helper,
6228+
HLObjectOperationLowerHelper *pObjHelper,
6229+
bool &Translated) {
6230+
return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches
6231+
}
6232+
6233+
Value *TranslateHitObjectScalarGetter(CallInst *CI, IntrinsicOp IOP,
6234+
OP::OpCode OpCode,
6235+
HLOperationLowerHelper &Helper,
6236+
HLObjectOperationLowerHelper *pObjHelper,
6237+
bool &Translated) {
6238+
return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches
6239+
}
6240+
6241+
Value *TranslateHitObjectVectorGetter(CallInst *CI, IntrinsicOp IOP,
6242+
OP::OpCode OpCode,
6243+
HLOperationLowerHelper &Helper,
6244+
HLObjectOperationLowerHelper *pObjHelper,
6245+
bool &Translated) {
6246+
return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches
6247+
}
6248+
6249+
Value *TranslateHitObjectMatrixGetter(CallInst *CI, IntrinsicOp IOP,
6250+
OP::OpCode OpCode,
6251+
HLOperationLowerHelper &Helper,
6252+
HLObjectOperationLowerHelper *pObjHelper,
6253+
bool &Translated) {
6254+
return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches
6255+
}
6256+
6257+
Value *TranslateHitObjectLoadLocalRootTableConstant(
6258+
CallInst *CI, IntrinsicOp IOP, OP::OpCode OpCode,
6259+
HLOperationLowerHelper &Helper, HLObjectOperationLowerHelper *pObjHelper,
6260+
bool &Translated) {
6261+
return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches
6262+
}
6263+
6264+
Value *TranslateHitObjectSetShaderTableIndex(
6265+
CallInst *CI, IntrinsicOp IOP, OP::OpCode OpCode,
6266+
HLOperationLowerHelper &Helper, HLObjectOperationLowerHelper *pObjHelper,
6267+
bool &Translated) {
6268+
return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches
6269+
}
6270+
62006271
} // namespace
62016272

62026273
// Resource Handle.
@@ -6908,6 +6979,63 @@ IntrinsicLower gLowerTable[] = {
69086979
DXIL::OpCode::NumOpCodes},
69096980
{IntrinsicOp::MOP_GetBufferContents, UnsupportedVulkanIntrinsic,
69106981
DXIL::OpCode::NumOpCodes},
6982+
{IntrinsicOp::MOP_DxHitObject_FromRayQuery, TranslateHitObjectFromRayQuery,
6983+
DXIL::OpCode::HitObject_FromRayQuery},
6984+
{IntrinsicOp::MOP_DxHitObject_GetAttributes,
6985+
TranslateHitObjectGetAttributes, DXIL::OpCode::HitObject_Attributes},
6986+
{IntrinsicOp::MOP_DxHitObject_GetGeometryIndex,
6987+
TranslateHitObjectScalarGetter, DXIL::OpCode::HitObject_GeometryIndex},
6988+
{IntrinsicOp::MOP_DxHitObject_GetHitKind, TranslateHitObjectScalarGetter,
6989+
DXIL::OpCode::HitObject_HitKind},
6990+
{IntrinsicOp::MOP_DxHitObject_GetInstanceID, TranslateHitObjectScalarGetter,
6991+
DXIL::OpCode::HitObject_InstanceID},
6992+
{IntrinsicOp::MOP_DxHitObject_GetInstanceIndex,
6993+
TranslateHitObjectScalarGetter, DXIL::OpCode::HitObject_InstanceIndex},
6994+
{IntrinsicOp::MOP_DxHitObject_GetObjectRayDirection,
6995+
TranslateHitObjectVectorGetter,
6996+
DXIL::OpCode::HitObject_ObjectRayDirection},
6997+
{IntrinsicOp::MOP_DxHitObject_GetObjectRayOrigin,
6998+
TranslateHitObjectVectorGetter, DXIL::OpCode::HitObject_ObjectRayOrigin},
6999+
{IntrinsicOp::MOP_DxHitObject_GetObjectToWorld3x4,
7000+
TranslateHitObjectMatrixGetter, DXIL::OpCode::HitObject_ObjectToWorld3x4},
7001+
{IntrinsicOp::MOP_DxHitObject_GetObjectToWorld4x3,
7002+
TranslateHitObjectMatrixGetter, DXIL::OpCode::HitObject_ObjectToWorld3x4},
7003+
{IntrinsicOp::MOP_DxHitObject_GetPrimitiveIndex,
7004+
TranslateHitObjectScalarGetter, DXIL::OpCode::HitObject_PrimitiveIndex},
7005+
{IntrinsicOp::MOP_DxHitObject_GetRayFlags, TranslateHitObjectScalarGetter,
7006+
DXIL::OpCode::HitObject_RayFlags},
7007+
{IntrinsicOp::MOP_DxHitObject_GetRayTCurrent,
7008+
TranslateHitObjectScalarGetter, DXIL::OpCode::HitObject_RayTCurrent},
7009+
{IntrinsicOp::MOP_DxHitObject_GetRayTMin, TranslateHitObjectScalarGetter,
7010+
DXIL::OpCode::HitObject_RayTMin},
7011+
{IntrinsicOp::MOP_DxHitObject_GetShaderTableIndex,
7012+
TranslateHitObjectScalarGetter, DXIL::OpCode::HitObject_ShaderTableIndex},
7013+
{IntrinsicOp::MOP_DxHitObject_GetWorldRayDirection,
7014+
TranslateHitObjectVectorGetter, DXIL::OpCode::HitObject_WorldRayDirection},
7015+
{IntrinsicOp::MOP_DxHitObject_GetWorldRayOrigin,
7016+
TranslateHitObjectVectorGetter, DXIL::OpCode::HitObject_WorldRayOrigin},
7017+
{IntrinsicOp::MOP_DxHitObject_GetWorldToObject3x4,
7018+
TranslateHitObjectMatrixGetter, DXIL::OpCode::HitObject_WorldToObject3x4},
7019+
{IntrinsicOp::MOP_DxHitObject_GetWorldToObject4x3,
7020+
TranslateHitObjectMatrixGetter, DXIL::OpCode::HitObject_WorldToObject3x4},
7021+
{IntrinsicOp::MOP_DxHitObject_Invoke, TranslateHitObjectInvoke,
7022+
DXIL::OpCode::HitObject_Invoke},
7023+
{IntrinsicOp::MOP_DxHitObject_IsHit, TranslateHitObjectScalarGetter,
7024+
DXIL::OpCode::HitObject_IsHit},
7025+
{IntrinsicOp::MOP_DxHitObject_IsMiss, TranslateHitObjectScalarGetter,
7026+
DXIL::OpCode::HitObject_IsMiss},
7027+
{IntrinsicOp::MOP_DxHitObject_IsNop, TranslateHitObjectScalarGetter,
7028+
DXIL::OpCode::HitObject_IsNop},
7029+
{IntrinsicOp::MOP_DxHitObject_LoadLocalRootTableConstant,
7030+
TranslateHitObjectLoadLocalRootTableConstant,
7031+
DXIL::OpCode::HitObject_LoadLocalRootTableConstant},
7032+
{IntrinsicOp::MOP_DxHitObject_MakeMiss, TranslateHitObjectMake,
7033+
DXIL::OpCode::HitObject_MakeMiss},
7034+
{IntrinsicOp::MOP_DxHitObject_SetShaderTableIndex,
7035+
TranslateHitObjectSetShaderTableIndex,
7036+
DXIL::OpCode::HitObject_SetShaderTableIndex},
7037+
{IntrinsicOp::MOP_DxHitObject_TraceRay, TranslateHitObjectTraceRay,
7038+
DXIL::OpCode::HitObject_TraceRay},
69117039
};
69127040
} // namespace
69137041
static_assert(

tools/clang/lib/Sema/SemaHLSL.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -580,9 +580,9 @@ const UINT g_uBasicKindProps[] = {
580580
0, // AR_OBJECT_PROCEDURAL_PRIMITIVE_HIT_GROUP,
581581
0, // AR_OBJECT_RAYTRACING_PIPELINE_CONFIG1,
582582

583-
BPROP_OBJECT, // AR_OBJECT_RAY_QUERY,
584-
BPROP_OBJECT, // AR_OBJECT_HEAP_RESOURCE,
585-
BPROP_OBJECT, // AR_OBJECT_HEAP_SAMPLER,
583+
LICOMPTYPE_RAY_QUERY, // AR_OBJECT_RAY_QUERY,
584+
BPROP_OBJECT, // AR_OBJECT_HEAP_RESOURCE,
585+
BPROP_OBJECT, // AR_OBJECT_HEAP_SAMPLER,
586586

587587
BPROP_OBJECT | BPROP_RWBUFFER | BPROP_TEXTURE, // AR_OBJECT_RWTEXTURE2DMS
588588
BPROP_OBJECT | BPROP_RWBUFFER |
@@ -1135,6 +1135,9 @@ static const ArBasicKind g_ResourceCT[] = {AR_OBJECT_HEAP_RESOURCE,
11351135

11361136
static const ArBasicKind g_RayDescCT[] = {AR_OBJECT_RAY_DESC, AR_BASIC_UNKNOWN};
11371137

1138+
static const ArBasicKind g_RayQueryCT[] = {AR_OBJECT_RAY_QUERY,
1139+
AR_BASIC_UNKNOWN};
1140+
11381141
static const ArBasicKind g_AccelerationStructCT[] = {
11391142
AR_OBJECT_ACCELERATION_STRUCT, AR_BASIC_UNKNOWN};
11401143

@@ -1297,6 +1300,7 @@ const ArBasicKind *g_LegalIntrinsicCompTypes[] = {
12971300
g_GroupNodeOutputRecordsCT, // LICOMPTYPE_GROUP_NODE_OUTPUT_RECORDS
12981301
g_ThreadNodeOutputRecordsCT, // LICOMPTYPE_THREAD_NODE_OUTPUT_RECORDS
12991302
g_DxHitObjectCT, // LICOMPTYPE_HIT_OBJECT
1303+
g_RayQueryCT, // LICOMPTYPE_RAY_QUERY
13001304
#ifdef ENABLE_SPIRV_CODEGEN
13011305
g_VKBufferPointerCT, // LICOMPTYPE_VK_BUFFER_POINTER
13021306
#endif

utils/hct/gen_intrin_main.txt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1101,6 +1101,34 @@ uint [[ro]] CommittedInstanceContributionToHitGroupIndex();
11011101
// Shader Execution Reordering
11021102
namespace DxHitObjectMethods {
11031103
DxHitObject [[static,class_prefix,min_sm=6.9]] MakeNop();
1104+
DxHitObject [[static,class_prefix,min_sm=6.9]] MakeMiss(in uint RayFlags, in uint MissShaderIndex, in ray_desc Ray);
1105+
DxHitObject [[static,class_prefix,min_sm=6.9]] FromRayQuery(in RayQuery rq);
1106+
DxHitObject [[static,class_prefix,min_sm=6.9]] FromRayQuery(in RayQuery rq, in uint HitKind, in udt Attributes);
1107+
DxHitObject [[static,class_prefix,min_sm=6.9]] TraceRay(in acceleration_struct AccelerationStructure, in uint RayFlags, in uint InstanceInclusionMask, in uint RayContributionToHitGroupIndex, in uint MultiplierForGeometryContributionToHitGroupIndex, in uint MissShaderIndex, in ray_desc Ray, inout udt Payload);
1108+
void [[static,class_prefix,min_sm=6.9]] Invoke(in DxHitObject ho, inout udt Payload);
1109+
bool [[rn,class_prefix,min_sm=6.9]] IsMiss();
1110+
bool [[rn,class_prefix,min_sm=6.9]] IsHit();
1111+
bool [[rn,class_prefix,min_sm=6.9]] IsNop();
1112+
uint [[rn,class_prefix,min_sm=6.9]] GetRayFlags();
1113+
float [[rn,class_prefix,min_sm=6.9]] GetRayTMin();
1114+
float [[rn,class_prefix,min_sm=6.9]] GetRayTCurrent();
1115+
float<3> [[rn,class_prefix,min_sm=6.9]] GetWorldRayOrigin();
1116+
float<3> [[rn,class_prefix,min_sm=6.9]] GetWorldRayDirection();
1117+
float<3> [[rn,class_prefix,min_sm=6.9]] GetObjectRayOrigin();
1118+
float<3> [[rn,class_prefix,min_sm=6.9]] GetObjectRayDirection();
1119+
float<3,4> [[rn,class_prefix,min_sm=6.9]] GetObjectToWorld3x4();
1120+
float<4,3> [[rn,class_prefix,min_sm=6.9]] GetObjectToWorld4x3();
1121+
float<3,4> [[rn,class_prefix,min_sm=6.9]] GetWorldToObject3x4();
1122+
float<4,3> [[rn,class_prefix,min_sm=6.9]] GetWorldToObject4x3();
1123+
uint [[rn,class_prefix,min_sm=6.9]] GetGeometryIndex();
1124+
uint [[rn,class_prefix,min_sm=6.9]] GetInstanceIndex();
1125+
uint [[rn,class_prefix,min_sm=6.9]] GetInstanceID();
1126+
uint [[rn,class_prefix,min_sm=6.9]] GetPrimitiveIndex();
1127+
uint [[rn,class_prefix,min_sm=6.9]] GetHitKind();
1128+
uint [[rn,class_prefix,min_sm=6.9]] GetShaderTableIndex();
1129+
$funcT [[class_prefix,min_sm=6.9]] GetAttributes();
1130+
void [[class_prefix,min_sm=6.9]] SetShaderTableIndex(in uint RecordIndex);
1131+
uint [[ro,class_prefix,min_sm=6.9]] LoadLocalRootTableConstant(in uint RootConstantOffsetInBytes);
11041132
} namespace
11051133

11061134
namespace DxIntrinsics {

utils/hct/hctdb.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9183,6 +9183,7 @@ def __init__(self, intrinsic_defs, opcode_data):
91839183
"ThreadNodeOutputRecords": "LICOMPTYPE_THREAD_NODE_OUTPUT_RECORDS",
91849184
"DxHitObject": "LICOMPTYPE_HIT_OBJECT",
91859185
"VkBufferPointer": "LICOMPTYPE_VK_BUFFER_POINTER",
9186+
"RayQuery": "LICOMPTYPE_RAY_QUERY",
91869187
}
91879188

91889189
self.trans_rowcol = {"r": "IA_R", "c": "IA_C", "r2": "IA_R2", "c2": "IA_C2"}

utils/hct/hlsl_intrinsic_opcodes.json

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"IntrinsicOpCodes": {
3-
"Num_Intrinsics": 363,
3+
"Num_Intrinsics": 390,
44
"IOP_AcceptHitAndEndSearch": 0,
55
"IOP_AddUint64": 1,
66
"IOP_AllMemoryBarrier": 2,
@@ -363,6 +363,33 @@
363363
"IOP_DxMaybeReorderThread": 359,
364364
"IOP_Vkreinterpret_pointer_cast": 360,
365365
"IOP_Vkstatic_pointer_cast": 361,
366-
"MOP_GetBufferContents": 362
366+
"MOP_GetBufferContents": 362,
367+
"MOP_DxHitObject_FromRayQuery": 363,
368+
"MOP_DxHitObject_GetAttributes": 364,
369+
"MOP_DxHitObject_GetGeometryIndex": 365,
370+
"MOP_DxHitObject_GetHitKind": 366,
371+
"MOP_DxHitObject_GetInstanceID": 367,
372+
"MOP_DxHitObject_GetInstanceIndex": 368,
373+
"MOP_DxHitObject_GetObjectRayDirection": 369,
374+
"MOP_DxHitObject_GetObjectRayOrigin": 370,
375+
"MOP_DxHitObject_GetObjectToWorld3x4": 371,
376+
"MOP_DxHitObject_GetObjectToWorld4x3": 372,
377+
"MOP_DxHitObject_GetPrimitiveIndex": 373,
378+
"MOP_DxHitObject_GetRayFlags": 374,
379+
"MOP_DxHitObject_GetRayTCurrent": 375,
380+
"MOP_DxHitObject_GetRayTMin": 376,
381+
"MOP_DxHitObject_GetShaderTableIndex": 377,
382+
"MOP_DxHitObject_GetWorldRayDirection": 378,
383+
"MOP_DxHitObject_GetWorldRayOrigin": 379,
384+
"MOP_DxHitObject_GetWorldToObject3x4": 380,
385+
"MOP_DxHitObject_GetWorldToObject4x3": 381,
386+
"MOP_DxHitObject_Invoke": 382,
387+
"MOP_DxHitObject_IsHit": 383,
388+
"MOP_DxHitObject_IsMiss": 384,
389+
"MOP_DxHitObject_IsNop": 385,
390+
"MOP_DxHitObject_LoadLocalRootTableConstant": 386,
391+
"MOP_DxHitObject_MakeMiss": 387,
392+
"MOP_DxHitObject_SetShaderTableIndex": 388,
393+
"MOP_DxHitObject_TraceRay": 389
367394
}
368395
}

0 commit comments

Comments
 (0)