diff --git a/include/dxc/HlslIntrinsicOp.h b/include/dxc/HlslIntrinsicOp.h index 68b88822e8..d37c27a38e 100644 --- a/include/dxc/HlslIntrinsicOp.h +++ b/include/dxc/HlslIntrinsicOp.h @@ -336,7 +336,34 @@ enum class IntrinsicOp { MOP_TraceRayInline = 325, MOP_WorldRayDirection = 326, MOP_WorldRayOrigin = 327, + MOP_DxHitObject_FromRayQuery = 363, + MOP_DxHitObject_GetAttributes = 364, + MOP_DxHitObject_GetGeometryIndex = 365, + MOP_DxHitObject_GetHitKind = 366, + MOP_DxHitObject_GetInstanceID = 367, + MOP_DxHitObject_GetInstanceIndex = 368, + MOP_DxHitObject_GetObjectRayDirection = 369, + MOP_DxHitObject_GetObjectRayOrigin = 370, + MOP_DxHitObject_GetObjectToWorld3x4 = 371, + MOP_DxHitObject_GetObjectToWorld4x3 = 372, + MOP_DxHitObject_GetPrimitiveIndex = 373, + MOP_DxHitObject_GetRayFlags = 374, + MOP_DxHitObject_GetRayTCurrent = 375, + MOP_DxHitObject_GetRayTMin = 376, + MOP_DxHitObject_GetShaderTableIndex = 377, + MOP_DxHitObject_GetWorldRayDirection = 378, + MOP_DxHitObject_GetWorldRayOrigin = 379, + MOP_DxHitObject_GetWorldToObject3x4 = 380, + MOP_DxHitObject_GetWorldToObject4x3 = 381, + MOP_DxHitObject_Invoke = 382, + MOP_DxHitObject_IsHit = 383, + MOP_DxHitObject_IsMiss = 384, + MOP_DxHitObject_IsNop = 385, + MOP_DxHitObject_LoadLocalRootTableConstant = 386, + MOP_DxHitObject_MakeMiss = 387, MOP_DxHitObject_MakeNop = 358, + MOP_DxHitObject_SetShaderTableIndex = 388, + MOP_DxHitObject_TraceRay = 389, IOP_DxMaybeReorderThread = 359, MOP_Count = 328, MOP_FinishedCrossGroupSharing = 329, @@ -369,7 +396,7 @@ enum class IntrinsicOp { IOP_usign = 355, MOP_InterlockedUMax = 356, MOP_InterlockedUMin = 357, - Num_Intrinsics = 363, + Num_Intrinsics = 390, }; inline bool HasUnsignedIntrinsicOpcode(IntrinsicOp opcode) { switch (opcode) { diff --git a/include/dxc/dxcapi.internal.h b/include/dxc/dxcapi.internal.h index d37054194b..28bd3e7066 100644 --- a/include/dxc/dxcapi.internal.h +++ b/include/dxc/dxcapi.internal.h @@ -131,12 +131,13 @@ enum LEGAL_INTRINSIC_COMPTYPES { LICOMPTYPE_THREAD_NODE_OUTPUT_RECORDS = 50, LICOMPTYPE_HIT_OBJECT = 51, + LICOMPTYPE_RAY_QUERY = 52, #ifdef ENABLE_SPIRV_CODEGEN - LICOMPTYPE_VK_BUFFER_POINTER = 52, - LICOMPTYPE_COUNT = 53 + LICOMPTYPE_VK_BUFFER_POINTER = 53, + LICOMPTYPE_COUNT = 54 #else - LICOMPTYPE_COUNT = 52 + LICOMPTYPE_COUNT = 53 #endif }; diff --git a/lib/HLSL/HLOperationLower.cpp b/lib/HLSL/HLOperationLower.cpp index c0f9d7fddd..b5114fa34b 100644 --- a/lib/HLSL/HLOperationLower.cpp +++ b/lib/HLSL/HLOperationLower.cpp @@ -6197,6 +6197,77 @@ Value *TranslateMaybeReorderThread(CallInst *CI, IntrinsicOp IOP, bool &Translated) { return nullptr; // TODO: Merge SER DXIL patches } + +Value *TranslateHitObjectFromRayQuery(CallInst *CI, IntrinsicOp IOP, + OP::OpCode OpCode, + HLOperationLowerHelper &Helper, + HLObjectOperationLowerHelper *pObjHelper, + bool &Translated) { + return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches +} + +Value *TranslateHitObjectTraceRay(CallInst *CI, IntrinsicOp IOP, + OP::OpCode OpCode, + HLOperationLowerHelper &Helper, + HLObjectOperationLowerHelper *pObjHelper, + bool &Translated) { + return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches +} + +Value *TranslateHitObjectInvoke(CallInst *CI, IntrinsicOp IOP, + OP::OpCode OpCode, + HLOperationLowerHelper &Helper, + HLObjectOperationLowerHelper *pObjHelper, + bool &Translated) { + return nullptr; // TODO: Merge SER DXIL patches +} + +Value *TranslateHitObjectGetAttributes(CallInst *CI, IntrinsicOp IOP, + OP::OpCode OpCode, + HLOperationLowerHelper &Helper, + HLObjectOperationLowerHelper *pObjHelper, + bool &Translated) { + return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches +} + +Value *TranslateHitObjectScalarGetter(CallInst *CI, IntrinsicOp IOP, + OP::OpCode OpCode, + HLOperationLowerHelper &Helper, + HLObjectOperationLowerHelper *pObjHelper, + bool &Translated) { + return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches +} + +Value *TranslateHitObjectVectorGetter(CallInst *CI, IntrinsicOp IOP, + OP::OpCode OpCode, + HLOperationLowerHelper &Helper, + HLObjectOperationLowerHelper *pObjHelper, + bool &Translated) { + return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches +} + +Value *TranslateHitObjectMatrixGetter(CallInst *CI, IntrinsicOp IOP, + OP::OpCode OpCode, + HLOperationLowerHelper &Helper, + HLObjectOperationLowerHelper *pObjHelper, + bool &Translated) { + return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches +} + +Value *TranslateHitObjectLoadLocalRootTableConstant( + CallInst *CI, IntrinsicOp IOP, OP::OpCode OpCode, + HLOperationLowerHelper &Helper, HLObjectOperationLowerHelper *pObjHelper, + bool &Translated) { + return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches +} + +Value *TranslateHitObjectSetShaderTableIndex( + CallInst *CI, IntrinsicOp IOP, OP::OpCode OpCode, + HLOperationLowerHelper &Helper, HLObjectOperationLowerHelper *pObjHelper, + bool &Translated) { + return UndefValue::get(CI->getType()); // TODO: Merge SER DXIL patches +} + } // namespace // Resource Handle. @@ -6908,6 +6979,63 @@ IntrinsicLower gLowerTable[] = { DXIL::OpCode::NumOpCodes}, {IntrinsicOp::MOP_GetBufferContents, UnsupportedVulkanIntrinsic, DXIL::OpCode::NumOpCodes}, + {IntrinsicOp::MOP_DxHitObject_FromRayQuery, TranslateHitObjectFromRayQuery, + DXIL::OpCode::HitObject_FromRayQuery}, + {IntrinsicOp::MOP_DxHitObject_GetAttributes, + TranslateHitObjectGetAttributes, DXIL::OpCode::HitObject_Attributes}, + {IntrinsicOp::MOP_DxHitObject_GetGeometryIndex, + TranslateHitObjectScalarGetter, DXIL::OpCode::HitObject_GeometryIndex}, + {IntrinsicOp::MOP_DxHitObject_GetHitKind, TranslateHitObjectScalarGetter, + DXIL::OpCode::HitObject_HitKind}, + {IntrinsicOp::MOP_DxHitObject_GetInstanceID, TranslateHitObjectScalarGetter, + DXIL::OpCode::HitObject_InstanceID}, + {IntrinsicOp::MOP_DxHitObject_GetInstanceIndex, + TranslateHitObjectScalarGetter, DXIL::OpCode::HitObject_InstanceIndex}, + {IntrinsicOp::MOP_DxHitObject_GetObjectRayDirection, + TranslateHitObjectVectorGetter, + DXIL::OpCode::HitObject_ObjectRayDirection}, + {IntrinsicOp::MOP_DxHitObject_GetObjectRayOrigin, + TranslateHitObjectVectorGetter, DXIL::OpCode::HitObject_ObjectRayOrigin}, + {IntrinsicOp::MOP_DxHitObject_GetObjectToWorld3x4, + TranslateHitObjectMatrixGetter, DXIL::OpCode::HitObject_ObjectToWorld3x4}, + {IntrinsicOp::MOP_DxHitObject_GetObjectToWorld4x3, + TranslateHitObjectMatrixGetter, DXIL::OpCode::HitObject_ObjectToWorld3x4}, + {IntrinsicOp::MOP_DxHitObject_GetPrimitiveIndex, + TranslateHitObjectScalarGetter, DXIL::OpCode::HitObject_PrimitiveIndex}, + {IntrinsicOp::MOP_DxHitObject_GetRayFlags, TranslateHitObjectScalarGetter, + DXIL::OpCode::HitObject_RayFlags}, + {IntrinsicOp::MOP_DxHitObject_GetRayTCurrent, + TranslateHitObjectScalarGetter, DXIL::OpCode::HitObject_RayTCurrent}, + {IntrinsicOp::MOP_DxHitObject_GetRayTMin, TranslateHitObjectScalarGetter, + DXIL::OpCode::HitObject_RayTMin}, + {IntrinsicOp::MOP_DxHitObject_GetShaderTableIndex, + TranslateHitObjectScalarGetter, DXIL::OpCode::HitObject_ShaderTableIndex}, + {IntrinsicOp::MOP_DxHitObject_GetWorldRayDirection, + TranslateHitObjectVectorGetter, DXIL::OpCode::HitObject_WorldRayDirection}, + {IntrinsicOp::MOP_DxHitObject_GetWorldRayOrigin, + TranslateHitObjectVectorGetter, DXIL::OpCode::HitObject_WorldRayOrigin}, + {IntrinsicOp::MOP_DxHitObject_GetWorldToObject3x4, + TranslateHitObjectMatrixGetter, DXIL::OpCode::HitObject_WorldToObject3x4}, + {IntrinsicOp::MOP_DxHitObject_GetWorldToObject4x3, + TranslateHitObjectMatrixGetter, DXIL::OpCode::HitObject_WorldToObject3x4}, + {IntrinsicOp::MOP_DxHitObject_Invoke, TranslateHitObjectInvoke, + DXIL::OpCode::HitObject_Invoke}, + {IntrinsicOp::MOP_DxHitObject_IsHit, TranslateHitObjectScalarGetter, + DXIL::OpCode::HitObject_IsHit}, + {IntrinsicOp::MOP_DxHitObject_IsMiss, TranslateHitObjectScalarGetter, + DXIL::OpCode::HitObject_IsMiss}, + {IntrinsicOp::MOP_DxHitObject_IsNop, TranslateHitObjectScalarGetter, + DXIL::OpCode::HitObject_IsNop}, + {IntrinsicOp::MOP_DxHitObject_LoadLocalRootTableConstant, + TranslateHitObjectLoadLocalRootTableConstant, + DXIL::OpCode::HitObject_LoadLocalRootTableConstant}, + {IntrinsicOp::MOP_DxHitObject_MakeMiss, TranslateHitObjectMake, + DXIL::OpCode::HitObject_MakeMiss}, + {IntrinsicOp::MOP_DxHitObject_SetShaderTableIndex, + TranslateHitObjectSetShaderTableIndex, + DXIL::OpCode::HitObject_SetShaderTableIndex}, + {IntrinsicOp::MOP_DxHitObject_TraceRay, TranslateHitObjectTraceRay, + DXIL::OpCode::HitObject_TraceRay}, }; } // namespace static_assert( diff --git a/tools/clang/lib/Sema/SemaHLSL.cpp b/tools/clang/lib/Sema/SemaHLSL.cpp index 5236a1e3c4..230c7e65d9 100644 --- a/tools/clang/lib/Sema/SemaHLSL.cpp +++ b/tools/clang/lib/Sema/SemaHLSL.cpp @@ -580,9 +580,9 @@ const UINT g_uBasicKindProps[] = { 0, // AR_OBJECT_PROCEDURAL_PRIMITIVE_HIT_GROUP, 0, // AR_OBJECT_RAYTRACING_PIPELINE_CONFIG1, - BPROP_OBJECT, // AR_OBJECT_RAY_QUERY, - BPROP_OBJECT, // AR_OBJECT_HEAP_RESOURCE, - BPROP_OBJECT, // AR_OBJECT_HEAP_SAMPLER, + LICOMPTYPE_RAY_QUERY, // AR_OBJECT_RAY_QUERY, + BPROP_OBJECT, // AR_OBJECT_HEAP_RESOURCE, + BPROP_OBJECT, // AR_OBJECT_HEAP_SAMPLER, BPROP_OBJECT | BPROP_RWBUFFER | BPROP_TEXTURE, // AR_OBJECT_RWTEXTURE2DMS BPROP_OBJECT | BPROP_RWBUFFER | @@ -1135,6 +1135,9 @@ static const ArBasicKind g_ResourceCT[] = {AR_OBJECT_HEAP_RESOURCE, static const ArBasicKind g_RayDescCT[] = {AR_OBJECT_RAY_DESC, AR_BASIC_UNKNOWN}; +static const ArBasicKind g_RayQueryCT[] = {AR_OBJECT_RAY_QUERY, + AR_BASIC_UNKNOWN}; + static const ArBasicKind g_AccelerationStructCT[] = { AR_OBJECT_ACCELERATION_STRUCT, AR_BASIC_UNKNOWN}; @@ -1297,6 +1300,7 @@ const ArBasicKind *g_LegalIntrinsicCompTypes[] = { g_GroupNodeOutputRecordsCT, // LICOMPTYPE_GROUP_NODE_OUTPUT_RECORDS g_ThreadNodeOutputRecordsCT, // LICOMPTYPE_THREAD_NODE_OUTPUT_RECORDS g_DxHitObjectCT, // LICOMPTYPE_HIT_OBJECT + g_RayQueryCT, // LICOMPTYPE_RAY_QUERY #ifdef ENABLE_SPIRV_CODEGEN g_VKBufferPointerCT, // LICOMPTYPE_VK_BUFFER_POINTER #endif diff --git a/utils/hct/gen_intrin_main.txt b/utils/hct/gen_intrin_main.txt index 55c3643d95..f1274fd308 100644 --- a/utils/hct/gen_intrin_main.txt +++ b/utils/hct/gen_intrin_main.txt @@ -1101,6 +1101,34 @@ uint [[ro]] CommittedInstanceContributionToHitGroupIndex(); // Shader Execution Reordering namespace DxHitObjectMethods { DxHitObject [[static,class_prefix,min_sm=6.9]] MakeNop(); + DxHitObject [[static,class_prefix,min_sm=6.9]] MakeMiss(in uint RayFlags, in uint MissShaderIndex, in ray_desc Ray); + DxHitObject [[static,class_prefix,min_sm=6.9]] FromRayQuery(in RayQuery rq); + DxHitObject [[static,class_prefix,min_sm=6.9]] FromRayQuery(in RayQuery rq, in uint HitKind, in udt Attributes); + 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); + void [[static,class_prefix,min_sm=6.9]] Invoke(in DxHitObject ho, inout udt Payload); + bool [[rn,class_prefix,min_sm=6.9]] IsMiss(); + bool [[rn,class_prefix,min_sm=6.9]] IsHit(); + bool [[rn,class_prefix,min_sm=6.9]] IsNop(); + uint [[rn,class_prefix,min_sm=6.9]] GetRayFlags(); + float [[rn,class_prefix,min_sm=6.9]] GetRayTMin(); + float [[rn,class_prefix,min_sm=6.9]] GetRayTCurrent(); + float<3> [[rn,class_prefix,min_sm=6.9]] GetWorldRayOrigin(); + float<3> [[rn,class_prefix,min_sm=6.9]] GetWorldRayDirection(); + float<3> [[rn,class_prefix,min_sm=6.9]] GetObjectRayOrigin(); + float<3> [[rn,class_prefix,min_sm=6.9]] GetObjectRayDirection(); + float<3,4> [[rn,class_prefix,min_sm=6.9]] GetObjectToWorld3x4(); + float<4,3> [[rn,class_prefix,min_sm=6.9]] GetObjectToWorld4x3(); + float<3,4> [[rn,class_prefix,min_sm=6.9]] GetWorldToObject3x4(); + float<4,3> [[rn,class_prefix,min_sm=6.9]] GetWorldToObject4x3(); + uint [[rn,class_prefix,min_sm=6.9]] GetGeometryIndex(); + uint [[rn,class_prefix,min_sm=6.9]] GetInstanceIndex(); + uint [[rn,class_prefix,min_sm=6.9]] GetInstanceID(); + uint [[rn,class_prefix,min_sm=6.9]] GetPrimitiveIndex(); + uint [[rn,class_prefix,min_sm=6.9]] GetHitKind(); + uint [[rn,class_prefix,min_sm=6.9]] GetShaderTableIndex(); + $funcT [[class_prefix,min_sm=6.9]] GetAttributes(); + void [[class_prefix,min_sm=6.9]] SetShaderTableIndex(in uint RecordIndex); + uint [[ro,class_prefix,min_sm=6.9]] LoadLocalRootTableConstant(in uint RootConstantOffsetInBytes); } namespace namespace DxIntrinsics { diff --git a/utils/hct/hctdb.py b/utils/hct/hctdb.py index 9b2f33727a..6344fb5849 100644 --- a/utils/hct/hctdb.py +++ b/utils/hct/hctdb.py @@ -9183,6 +9183,7 @@ def __init__(self, intrinsic_defs, opcode_data): "ThreadNodeOutputRecords": "LICOMPTYPE_THREAD_NODE_OUTPUT_RECORDS", "DxHitObject": "LICOMPTYPE_HIT_OBJECT", "VkBufferPointer": "LICOMPTYPE_VK_BUFFER_POINTER", + "RayQuery": "LICOMPTYPE_RAY_QUERY", } self.trans_rowcol = {"r": "IA_R", "c": "IA_C", "r2": "IA_R2", "c2": "IA_C2"} diff --git a/utils/hct/hlsl_intrinsic_opcodes.json b/utils/hct/hlsl_intrinsic_opcodes.json index c4527277cd..d99b84b745 100644 --- a/utils/hct/hlsl_intrinsic_opcodes.json +++ b/utils/hct/hlsl_intrinsic_opcodes.json @@ -1,6 +1,6 @@ { "IntrinsicOpCodes": { - "Num_Intrinsics": 363, + "Num_Intrinsics": 390, "IOP_AcceptHitAndEndSearch": 0, "IOP_AddUint64": 1, "IOP_AllMemoryBarrier": 2, @@ -363,6 +363,33 @@ "IOP_DxMaybeReorderThread": 359, "IOP_Vkreinterpret_pointer_cast": 360, "IOP_Vkstatic_pointer_cast": 361, - "MOP_GetBufferContents": 362 + "MOP_GetBufferContents": 362, + "MOP_DxHitObject_FromRayQuery": 363, + "MOP_DxHitObject_GetAttributes": 364, + "MOP_DxHitObject_GetGeometryIndex": 365, + "MOP_DxHitObject_GetHitKind": 366, + "MOP_DxHitObject_GetInstanceID": 367, + "MOP_DxHitObject_GetInstanceIndex": 368, + "MOP_DxHitObject_GetObjectRayDirection": 369, + "MOP_DxHitObject_GetObjectRayOrigin": 370, + "MOP_DxHitObject_GetObjectToWorld3x4": 371, + "MOP_DxHitObject_GetObjectToWorld4x3": 372, + "MOP_DxHitObject_GetPrimitiveIndex": 373, + "MOP_DxHitObject_GetRayFlags": 374, + "MOP_DxHitObject_GetRayTCurrent": 375, + "MOP_DxHitObject_GetRayTMin": 376, + "MOP_DxHitObject_GetShaderTableIndex": 377, + "MOP_DxHitObject_GetWorldRayDirection": 378, + "MOP_DxHitObject_GetWorldRayOrigin": 379, + "MOP_DxHitObject_GetWorldToObject3x4": 380, + "MOP_DxHitObject_GetWorldToObject4x3": 381, + "MOP_DxHitObject_Invoke": 382, + "MOP_DxHitObject_IsHit": 383, + "MOP_DxHitObject_IsMiss": 384, + "MOP_DxHitObject_IsNop": 385, + "MOP_DxHitObject_LoadLocalRootTableConstant": 386, + "MOP_DxHitObject_MakeMiss": 387, + "MOP_DxHitObject_SetShaderTableIndex": 388, + "MOP_DxHitObject_TraceRay": 389 } }