@@ -495,10 +495,13 @@ template <typename GenT> IMPL uint32_t _getRayMask(RTSAS RTStack2<GenT> *__restr
495495IMPL_ALL_1ARG (_getRayMask, StackPtr)
496496
497497
498- CREATE_PRIVATE auto _getLeafNodeSubType_Xe3(RTSAS RTStack2<Xe3> *__restrict__ StackPtr, bool Committed) {
498+
499+ template <typename RTStackT>
500+ IMPL auto _getLeafNodeSubType(RTSAS RTStack2<RTStackT> *__restrict__ StackPtr, bool Committed) {
499501 // memhit->leafNodeSubType
500502 return Committed ? StackPtr->committedHit .leafNodeSubType : StackPtr->potentialHit .leafNodeSubType ;
501503}
504+ IMPL_ALL_2ARG_XE3PLUS (_getLeafNodeSubType, StackPtr, Committed)
502505
503506
504507template <typename GenT> IMPL bool _isValid(RTSAS RTStack2<GenT> *__restrict__ StackPtr, bool Committed) {
@@ -583,17 +586,18 @@ CREATE_PRIVATE void _writeBaryCentricToStorage_Xe(RTSAS RTStack2<Xe> *__restrict
583586}
584587
585588template <typename RTStackT>
586- IMPL void _writeBaryCentricToStorage (RTSAS RTStackT *__restrict__ StackPtr, SWStackAS float *Storage, bool Committed) {
589+ IMPL void _writeBaryCentricToStorageImpl (RTSAS RTStackT *__restrict__ StackPtr, SWStackAS float *Storage, bool Committed) {
587590#pragma unroll
588591 for (uint32_t i = 0 ; i < 2 ; i++)
589592 Storage[i] = fetchBaryCentric (StackPtr, i, Committed);
590593}
591594
592- CREATE_PRIVATE void _writeBaryCentricToStorage_Xe3 (RTSAS RTStack2<Xe3> *__restrict__ StackPtr, SWStackAS float *Storage,
593- bool Committed) {
594- return _writeBaryCentricToStorage (StackPtr, Storage, Committed);
595+ template <typename RTStackT>
596+ IMPL void _writeBaryCentricToStorage (RTSAS RTStack2<RTStackT> *__restrict__ StackPtr, SWStackAS float *Storage,
597+ bool Committed) {
598+ return _writeBaryCentricToStorageImpl (StackPtr, Storage, Committed);
595599}
596-
600+ IMPL_ALL_3ARG_XE3PLUS (_writeBaryCentricToStorage, StackPtr, Storage, Committed)
597601
598602template <typename GenT>
599603IMPL float _TransformWorldToObject(RTSAS RTStack2<GenT> *__restrict__ StackPtr, uint32_t dim, bool isOrigin,
@@ -791,7 +795,8 @@ CREATE_PRIVATE void _createPotentialHit2CommittedHit_Xe(RTSAS RTStack2<Xe> *__re
791795 CH.hitGroupRecPtr1 = PH.hitGroupRecPtr1 ;
792796}
793797
794- template <typename RTStackT> IMPL void _createPotentialHit2CommittedHit (RTSAS RTStackT *__restrict__ StackPtr) {
798+ template <typename RTStackT>
799+ IMPL void _createPotentialHit2CommittedHitImpl (RTSAS RTStackT *__restrict__ StackPtr) {
795800 // TODO: show that we can move the Xe specialization to this without any
796801 // losses.
797802 auto *CH = (RTSAS uint32_t *)&StackPtr->committedHit ;
@@ -801,10 +806,11 @@ template <typename RTStackT> IMPL void _createPotentialHit2CommittedHit(RTSAS RT
801806 CH[i] = PH[i];
802807}
803808
804- CREATE_PRIVATE void _createPotentialHit2CommittedHit_Xe3 (RTSAS RTStack2<Xe3> *__restrict__ StackPtr) {
805- return _createPotentialHit2CommittedHit (StackPtr);
809+ template <typename RTStackT>
810+ IMPL void _createPotentialHit2CommittedHit (RTSAS RTStack2<RTStackT> *__restrict__ StackPtr) {
811+ return _createPotentialHit2CommittedHitImpl (StackPtr);
806812}
807-
813+ IMPL_ALL_1ARG_XE3PLUS (_createPotentialHit2CommittedHit, StackPtr)
808814
809815CREATE_PRIVATE void _createTraceRayInlinePrologue_Xe(RTSAS RTStack2<Xe> *__restrict__ StackPtr, _float8 RayInfo,
810816 uint64_t RootNodePtr, uint32_t RayFlags,
@@ -960,7 +966,7 @@ CREATE_PRIVATE void _emitSingleRQMemRayWrite_Xe(RTSAS RTStack2<Xe> *__restrict__
960966}
961967
962968template <typename RTStackT>
963- IMPL void _emitSingleRQMemRayWrite (RTSAS RTStackT *__restrict__ HWStackPtr,
969+ IMPL void _emitSingleRQMemRayWriteImpl (RTSAS RTStackT *__restrict__ HWStackPtr,
964970 RTShadowAS RTStackT *__restrict__ SMStackPtr) {
965971 // copy ray info
966972 auto *Dst = &HWStackPtr->ray0 .org [0 ];
@@ -985,15 +991,16 @@ IMPL void _emitSingleRQMemRayWrite(RTSAS RTStackT *__restrict__ HWStackPtr,
985991 *((RTSAS _uint8 *)&Dst[8 ]) = result;
986992}
987993
988- CREATE_PRIVATE void _emitSingleRQMemRayWrite_Xe3 (RTSAS RTStack2<Xe3> *__restrict__ HWStackPtr,
989- RTShadowAS RTStack2<Xe3> *__restrict__ SMStackPtr) {
990- _emitSingleRQMemRayWrite (HWStackPtr, SMStackPtr);
994+ template <typename RTStackT>
995+ IMPL void _emitSingleRQMemRayWrite (RTSAS RTStack2<RTStackT> *__restrict__ HWStackPtr,
996+ RTShadowAS RTStack2<RTStackT> *__restrict__ SMStackPtr) {
997+ _emitSingleRQMemRayWriteImpl (HWStackPtr, SMStackPtr);
991998}
999+ IMPL_ALL_2ARG_XE3PLUS (_emitSingleRQMemRayWrite, HWStackPtr, SMStackPtr)
9921000
993-
994- template <typename GenT>
995- IMPL void _copyMemHitInProceed (RTSAS RTStack2<GenT> *__restrict__ HWStackPtr,
996- RTShadowAS RTStack2<GenT> *__restrict__ SMStackPtr, bool singleRQProceed) {
1001+ template <typename RTStackT>
1002+ IMPL void _copyMemHitInProceedImpl(RTSAS RTStack2<RTStackT> *__restrict__ HWStackPtr,
1003+ RTShadowAS RTStack2<RTStackT> *__restrict__ SMStackPtr, bool singleRQProceed) {
9971004 // copy first 16 bytes
9981005 auto *SMCH = (RTShadowAS uint32_t *)&SMStackPtr->committedHit ;
9991006 _uint8 CHResult;
@@ -1037,21 +1044,17 @@ IMPL void _copyMemHitInProceed(RTSAS RTStack2<GenT> *__restrict__ HWStackPtr,
10371044 }
10381045 // HW will only reset the done bit to 0. Prior to the sync trace ray,
10391046 // we set the bit and HW will set it to 0 if there is more to do.
1040- PHResult.s3 = SMPH[3 ] | (1 << (uint32_t )MemHit<GenT >::Offset::done);
1047+ PHResult.s3 = SMPH[3 ] | (1 << (uint32_t )MemHit<RTStackT >::Offset::done);
10411048
10421049 *((RTSAS _uint8 *)&HWStackPtr->potentialHit ) = PHResult;
10431050}
10441051
1045- CREATE_PRIVATE void _copyMemHitInProceed_Xe (RTSAS RTStack2<Xe> *__restrict__ HWStackPtr,
1046- RTShadowAS RTStack2<Xe> *__restrict__ SMStackPtr, bool singleRQProceed) {
1047- _copyMemHitInProceed (HWStackPtr, SMStackPtr, singleRQProceed);
1048- }
1049-
1050- CREATE_PRIVATE void _copyMemHitInProceed_Xe3 (RTSAS RTStack2<Xe3> *__restrict__ HWStackPtr,
1051- RTShadowAS RTStack2<Xe3> *__restrict__ SMStackPtr, bool singleRQProceed) {
1052- _copyMemHitInProceed (HWStackPtr, SMStackPtr, singleRQProceed);
1052+ template <typename RTStackT>
1053+ IMPL void _copyMemHitInProceed (RTSAS RTStack2<RTStackT> *__restrict__ HWStackPtr,
1054+ RTShadowAS RTStack2<RTStackT> *__restrict__ SMStackPtr, bool singleRQProceed) {
1055+ _copyMemHitInProceedImpl (HWStackPtr, SMStackPtr, singleRQProceed);
10531056}
1054-
1057+ IMPL_ALL_3ARG (_copyMemHitInProceed, HWStackPtr, SMStackPtr, singleRQProceed)
10551058
10561059template <typename GenT>
10571060IMPL bool _syncStackToShadowMemory(RTSAS RTStack2<GenT> *__restrict__ HWStackPtr,
@@ -1180,7 +1183,7 @@ CREATE_PRIVATE void _commitProceduralPrimitiveHit_Xe(RTSAS RTStack2<Xe> *__restr
11801183}
11811184
11821185template <typename RTStackT>
1183- IMPL void _commitProceduralPrimitiveHit (RTSAS RTStackT *__restrict__ SMStackPtr, float THit) {
1186+ IMPL void _commitProceduralPrimitiveHitImpl (RTSAS RTStackT *__restrict__ SMStackPtr, float THit) {
11841187 auto &CH = SMStackPtr->committedHit ;
11851188 auto &PH = SMStackPtr->potentialHit ;
11861189
@@ -1202,9 +1205,11 @@ IMPL void _commitProceduralPrimitiveHit(RTSAS RTStackT *__restrict__ SMStackPtr,
12021205 CH.hitGroupIndex3 = 0 ;
12031206}
12041207
1205- CREATE_PRIVATE void _commitProceduralPrimitiveHit_Xe3 (RTSAS RTStack2<Xe3> *__restrict__ SMStackPtr, float THit) {
1206- return _commitProceduralPrimitiveHit (SMStackPtr, THit);
1208+ template <typename RTStackT>
1209+ IMPL void _commitProceduralPrimitiveHit (RTSAS RTStack2<RTStackT> *__restrict__ SMStackPtr, float THit) {
1210+ return _commitProceduralPrimitiveHitImpl (SMStackPtr, THit);
12071211}
1212+ IMPL_ALL_2ARG_XE3PLUS (_commitProceduralPrimitiveHit, StackPtr, ShaderTy)
12081213
12091214
12101215IMPL uint32_t emitStateRegID(uint32_t Start, uint32_t End) {
0 commit comments