Skip to content

Commit a8ded23

Browse files
JaroszPiotrigcbot
authored andcommitted
Unify Xe3+ common code in RT Reflection.
As some functions in RT Reflection has different implementation for Xe/Xe2 from Xe3+ or are present only for Xe3+, they were not implemented using generic macros. Instead all implementations are explicit. This makes adding new RT memory model unnecessarily complex. To clean this up, dedicated macros for Xe3+ are used instead of manual copies. For preXe3 these functions remain explicitly defined. The same is done in RTBuilder.
1 parent 2ad14f6 commit a8ded23

File tree

4 files changed

+71
-43
lines changed

4 files changed

+71
-43
lines changed

IGC/AdaptorCommon/RayTracing/RTBuilder.cpp

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,15 +1158,21 @@ Value *RTBuilder::getLeafType(StackPointerVal *StackPointer, Value *CommittedHit
11581158

11591159

11601160
Value *RTBuilder::getLeafNodeSubType(StackPointerVal *StackPointer, Value *CommittedHit) {
1161-
switch (getMemoryStyle()) {
1162-
case RTMemoryStyle::Xe:
1163-
return this->getInt32(0);
1161+
switch (getMemoryStyle()) {
1162+
#define STYLE_XE3PLUS(X) \
1163+
case RTMemoryStyle::X: \
1164+
return _getLeafNodeSubType_##X(StackPointer, CommittedHit, VALUE_NAME("MemHit.LeafNodeSubType"));
11641165

1165-
case RTMemoryStyle::Xe3:
1166-
return _getLeafNodeSubType_Xe3(StackPointer, CommittedHit, VALUE_NAME("MemHit.LeafNodeSubType"));
1166+
#include "RayTracingMemoryStyleXe3Plus.h"
1167+
#undef STYLE_XE3PLUS
11671168

1169+
default:
1170+
IGC_ASSERT(0);
1171+
return nullptr;
11681172
}
1173+
11691174
IGC_ASSERT(0);
1175+
11701176
return nullptr;
11711177
}
11721178

@@ -1551,21 +1557,27 @@ void RTBuilder::emitSingleRQMemRayWrite(SyncStackPointerVal *HWStackPtr, SyncSta
15511557
case RTMemoryStyle::Xe:
15521558
_emitSingleRQMemRayWrite_Xe(HWStackPtr, SMStackPtr, VAdapt{*this, singleRQProceed});
15531559
break;
1554-
case RTMemoryStyle::Xe3:
1555-
_emitSingleRQMemRayWrite_Xe3(HWStackPtr, SMStackPtr);
1560+
1561+
#define STYLE_XE3PLUS(X) \
1562+
case RTMemoryStyle::X: \
1563+
_emitSingleRQMemRayWrite_##X(HWStackPtr, SMStackPtr);
15561564
break;
1565+
1566+
#include "RayTracingMemoryStyleXe3Plus.h"
1567+
#undef STYLE_XE3PLUS
15571568
}
15581569
}
15591570

15601571
void RTBuilder::copyMemHitInProceed(SyncStackPointerVal *HWStackPtr, SyncStackPointerVal *SMStackPtr,
15611572
bool singleRQProceed) {
15621573
switch (getMemoryStyle()) {
1563-
case RTMemoryStyle::Xe:
1564-
_copyMemHitInProceed_Xe(HWStackPtr, SMStackPtr, VAdapt{*this, singleRQProceed});
1565-
break;
1566-
case RTMemoryStyle::Xe3:
1567-
_copyMemHitInProceed_Xe3(HWStackPtr, SMStackPtr, VAdapt{*this, singleRQProceed});
1574+
#define STYLE(X) \
1575+
case RTMemoryStyle::X: \
1576+
_copyMemHitInProceed_##X(HWStackPtr, SMStackPtr, VAdapt{*this, singleRQProceed});
15681577
break;
1578+
1579+
#include "RayTracingMemoryStyle.h"
1580+
#undef STYLE
15691581
}
15701582
}
15711583

IGC/AdaptorCommon/RayTracing/RTStackReflection/reflection.cpp

Lines changed: 36 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -495,10 +495,13 @@ template <typename GenT> IMPL uint32_t _getRayMask(RTSAS RTStack2<GenT> *__restr
495495
IMPL_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

504507
template <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

585588
template <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

598602
template <typename GenT>
599603
IMPL 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

809815
CREATE_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

962968
template <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

10561059
template <typename GenT>
10571060
IMPL bool _syncStackToShadowMemory(RTSAS RTStack2<GenT> *__restrict__ HWStackPtr,
@@ -1180,7 +1183,7 @@ CREATE_PRIVATE void _commitProceduralPrimitiveHit_Xe(RTSAS RTStack2<Xe> *__restr
11801183
}
11811184

11821185
template <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

12101215
IMPL uint32_t emitStateRegID(uint32_t Start, uint32_t End) {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/*========================== begin_copyright_notice ============================
2+
3+
Copyright (C) 2023 Intel Corporation
4+
5+
SPDX-License-Identifier: MIT
6+
7+
============================= end_copyright_notice ===========================*/
8+
9+
// This should be in sync with MemoryStyleEnum.h!
10+
STYLE_XE3PLUS(Xe3)

IGC/DriverInterface/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ set(IGC_BUILD__HDR__DriverInterface
9696
"${CMAKE_CURRENT_SOURCE_DIR}/../AdaptorCommon/RayTracing/MemRegionAnalysis.h"
9797
"${CMAKE_CURRENT_SOURCE_DIR}/../AdaptorCommon/RayTracing/RayTracingAddressSpaceAliasAnalysis.h"
9898
"${CMAKE_CURRENT_SOURCE_DIR}/../AdaptorCommon/RayTracing/RayTracingMemoryStyle.h"
99+
"${CMAKE_CURRENT_SOURCE_DIR}/../AdaptorCommon/RayTracing/RayTracingMemoryStyleXe3Plus.h"
99100
"${CMAKE_CURRENT_SOURCE_DIR}/../AdaptorCommon/RayTracing/RayTracingPasses.hpp"
100101
"${CMAKE_CURRENT_SOURCE_DIR}/../AdaptorCommon/RayTracing/RTArgs.h"
101102
"${CMAKE_CURRENT_SOURCE_DIR}/../AdaptorCommon/RayTracing/RTBuilder.h"

0 commit comments

Comments
 (0)