@@ -211,6 +211,7 @@ enum ArBasicKind {
211211 AR_OBJECT_ACCELERATION_STRUCT,
212212 AR_OBJECT_USER_DEFINED_TYPE,
213213 AR_OBJECT_TRIANGLE_INTERSECTION_ATTRIBUTES,
214+ AR_OBJECT_BUILTIN_TRIANGLE_POSITIONS,
214215
215216 // subobjects
216217 AR_OBJECT_STATE_OBJECT_CONFIG,
@@ -567,6 +568,7 @@ const UINT g_uBasicKindProps[] = {
567568 LICOMPTYPE_ACCELERATION_STRUCT, // AR_OBJECT_ACCELERATION_STRUCT
568569 LICOMPTYPE_USER_DEFINED_TYPE, // AR_OBJECT_USER_DEFINED_TYPE
569570 0, // AR_OBJECT_TRIANGLE_INTERSECTION_ATTRIBUTES
571+ LICOMPTYPE_BUILTIN_TRIANGLE_POSITIONS, // AR_OBJECT_BUILTIN_TRIANGLE_POSITIONS
570572
571573 // subobjects
572574 0, // AR_OBJECT_STATE_OBJECT_CONFIG,
@@ -1134,6 +1136,9 @@ static const ArBasicKind g_ResourceCT[] = {AR_OBJECT_HEAP_RESOURCE,
11341136
11351137static const ArBasicKind g_RayDescCT[] = {AR_OBJECT_RAY_DESC, AR_BASIC_UNKNOWN};
11361138
1139+ static const ArBasicKind g_BuiltInTrianglePositionsCT[] = {
1140+ AR_OBJECT_BUILTIN_TRIANGLE_POSITIONS, AR_BASIC_UNKNOWN};
1141+
11371142static const ArBasicKind g_RayQueryCT[] = {AR_OBJECT_RAY_QUERY,
11381143 AR_BASIC_UNKNOWN};
11391144
@@ -1300,15 +1305,16 @@ const ArBasicKind *g_LegalIntrinsicCompTypes[] = {
13001305 g_SInt16Or32OnlyCT, // LICOMPTYPE_SINT16_OR_32_ONLY
13011306 g_AnySamplerCT, // LICOMPTYPE_ANY_SAMPLER
13021307
1303- g_ByteAddressBufferCT, // LICOMPTYPE_BYTEADDRESSBUFFER
1304- g_RWByteAddressBufferCT, // LICOMPTYPE_RWBYTEADDRESSBUFFER
1305- g_NodeRecordOrUAVCT, // LICOMPTYPE_NODE_RECORD_OR_UAV
1306- g_AnyOutputRecordCT, // LICOMPTYPE_ANY_NODE_OUTPUT_RECORD
1307- g_GroupNodeOutputRecordsCT, // LICOMPTYPE_GROUP_NODE_OUTPUT_RECORDS
1308- g_ThreadNodeOutputRecordsCT, // LICOMPTYPE_THREAD_NODE_OUTPUT_RECORDS
1309- g_DxHitObjectCT, // LICOMPTYPE_HIT_OBJECT
1310- g_RayQueryCT, // LICOMPTYPE_RAY_QUERY
1311- g_LinAlgCT, // LICOMPTYPE_LINALG
1308+ g_ByteAddressBufferCT, // LICOMPTYPE_BYTEADDRESSBUFFER
1309+ g_RWByteAddressBufferCT, // LICOMPTYPE_RWBYTEADDRESSBUFFER
1310+ g_NodeRecordOrUAVCT, // LICOMPTYPE_NODE_RECORD_OR_UAV
1311+ g_AnyOutputRecordCT, // LICOMPTYPE_ANY_NODE_OUTPUT_RECORD
1312+ g_GroupNodeOutputRecordsCT, // LICOMPTYPE_GROUP_NODE_OUTPUT_RECORDS
1313+ g_ThreadNodeOutputRecordsCT, // LICOMPTYPE_THREAD_NODE_OUTPUT_RECORDS
1314+ g_DxHitObjectCT, // LICOMPTYPE_HIT_OBJECT
1315+ g_RayQueryCT, // LICOMPTYPE_RAY_QUERY
1316+ g_LinAlgCT, // LICOMPTYPE_LINALG
1317+ g_BuiltInTrianglePositionsCT, // LICOMPTYPE_BUILTIN_TRIANGLE_POSITIONS
13121318#ifdef ENABLE_SPIRV_CODEGEN
13131319 g_VKBufferPointerCT, // LICOMPTYPE_VK_BUFFER_POINTER
13141320#endif
@@ -1379,6 +1385,7 @@ static const ArBasicKind g_ArBasicKindsAsTypes[] = {
13791385
13801386 AR_OBJECT_WAVE, AR_OBJECT_RAY_DESC, AR_OBJECT_ACCELERATION_STRUCT,
13811387 AR_OBJECT_TRIANGLE_INTERSECTION_ATTRIBUTES,
1388+ AR_OBJECT_BUILTIN_TRIANGLE_POSITIONS,
13821389
13831390 // subobjects
13841391 AR_OBJECT_STATE_OBJECT_CONFIG, AR_OBJECT_GLOBAL_ROOT_SIGNATURE,
@@ -1487,6 +1494,7 @@ static const uint8_t g_ArBasicKindsTemplateCount[] = {
14871494 0, // AR_OBJECT_RAY_DESC
14881495 0, // AR_OBJECT_ACCELERATION_STRUCT
14891496 0, // AR_OBJECT_TRIANGLE_INTERSECTION_ATTRIBUTES
1497+ 0, // AR_OBJECT_BUILTIN_TRIANGLE_POSITIONS
14901498
14911499 0, // AR_OBJECT_STATE_OBJECT_CONFIG,
14921500 0, // AR_OBJECT_GLOBAL_ROOT_SIGNATURE,
@@ -1636,6 +1644,7 @@ static const SubscriptOperatorRecord g_ArBasicKindsSubscripts[] = {
16361644 {0, MipsFalse, SampleFalse}, // AR_OBJECT_RAY_DESC
16371645 {0, MipsFalse, SampleFalse}, // AR_OBJECT_ACCELERATION_STRUCT
16381646 {0, MipsFalse, SampleFalse}, // AR_OBJECT_TRIANGLE_INTERSECTION_ATTRIBUTES
1647+ {0, MipsFalse, SampleFalse}, // AR_OBJECT_BUILTIN_TRIANGLE_POSITIONS
16391648
16401649 {0, MipsFalse, SampleFalse}, // AR_OBJECT_STATE_OBJECT_CONFIG,
16411650 {0, MipsFalse, SampleFalse}, // AR_OBJECT_GLOBAL_ROOT_SIGNATURE,
@@ -1803,6 +1812,7 @@ static const char *g_ArBasicTypeNames[] = {
18031812 "RaytracingAccelerationStructure",
18041813 "user defined type",
18051814 "BuiltInTriangleIntersectionAttributes",
1815+ "BuiltInTrianglePositions",
18061816
18071817 // subobjects
18081818 "StateObjectConfig",
@@ -2813,6 +2823,31 @@ AddBuiltInTriangleIntersectionAttributes(ASTContext &context,
28132823 return attributesDecl;
28142824}
28152825
2826+ // struct BuiltInTrianglePositions
2827+ // {
2828+ // float3 p0, p1, p2;
2829+ // };
2830+ static CXXRecordDecl *CreateBuiltInTrianglePositions(ASTContext &context,
2831+ QualType float3Ty) {
2832+ DeclContext *curDC = context.getTranslationUnitDecl();
2833+ IdentifierInfo &positionsId = context.Idents.get(
2834+ StringRef("BuiltInTrianglePositions"), tok::TokenKind::identifier);
2835+ CXXRecordDecl *positionsDecl = CXXRecordDecl::Create(
2836+ context, TagTypeKind::TTK_Struct, curDC, NoLoc, NoLoc, &positionsId,
2837+ nullptr, DelayTypeCreationTrue);
2838+ positionsDecl->addAttr(
2839+ FinalAttr::CreateImplicit(context, FinalAttr::Keyword_final));
2840+ positionsDecl->startDefinition();
2841+ // float3 p0, p1, p2;
2842+ CreateSimpleField(context, positionsDecl, "p0", float3Ty);
2843+ CreateSimpleField(context, positionsDecl, "p1", float3Ty);
2844+ CreateSimpleField(context, positionsDecl, "p2", float3Ty);
2845+ positionsDecl->completeDefinition();
2846+ positionsDecl->setImplicit(true);
2847+ curDC->addDecl(positionsDecl);
2848+ return positionsDecl;
2849+ }
2850+
28162851//
28172852// Subobjects
28182853
@@ -3605,6 +3640,10 @@ class HLSLExternalSource : public ExternalSemaSource {
36053640 case LICOMPTYPE_HIT_OBJECT:
36063641 paramTypes.push_back(GetBasicKindType(AR_OBJECT_HIT_OBJECT));
36073642 break;
3643+ case LICOMPTYPE_BUILTIN_TRIANGLE_POSITIONS:
3644+ paramTypes.push_back(
3645+ GetBasicKindType(AR_OBJECT_BUILTIN_TRIANGLE_POSITIONS));
3646+ break;
36083647#ifdef ENABLE_SPIRV_CODEGEN
36093648 case LICOMPTYPE_VK_BUFFER_POINTER: {
36103649 const ArBasicKind *match =
@@ -3824,6 +3863,10 @@ class HLSLExternalSource : public ExternalSemaSource {
38243863 LookupVectorType(HLSLScalarType::HLSLScalarType_float, 2);
38253864 recordDecl =
38263865 AddBuiltInTriangleIntersectionAttributes(*m_context, float2Type);
3866+ } else if (kind == AR_OBJECT_BUILTIN_TRIANGLE_POSITIONS) {
3867+ QualType float3Ty =
3868+ LookupVectorType(HLSLScalarType::HLSLScalarType_float, 3);
3869+ recordDecl = CreateBuiltInTrianglePositions(*m_context, float3Ty);
38273870 } else if (IsSubobjectBasicKind(kind)) {
38283871 switch (kind) {
38293872 case AR_OBJECT_STATE_OBJECT_CONFIG:
@@ -4861,6 +4904,7 @@ class HLSLExternalSource : public ExternalSemaSource {
48614904 case AR_OBJECT_RAY_DESC:
48624905 case AR_OBJECT_HIT_OBJECT:
48634906 case AR_OBJECT_TRIANGLE_INTERSECTION_ATTRIBUTES:
4907+ case AR_OBJECT_BUILTIN_TRIANGLE_POSITIONS:
48644908 case AR_OBJECT_RWTEXTURE2DMS:
48654909 case AR_OBJECT_RWTEXTURE2DMS_ARRAY:
48664910
0 commit comments