fix: program 8 maxBVHLevels as 0 - special case
Related-To: NEO-14423 Signed-off-by: Kamil Kopryk <kamil.kopryk@intel.com>
This commit is contained in:
parent
3dc32cec88
commit
d247358fdf
|
@ -1166,6 +1166,12 @@ void Device::allocateRTDispatchGlobals(uint32_t maxBvhLevels) {
|
||||||
auto rtStacksPerDss = RayTracingHelper::getNumRtStacksPerDss(*this);
|
auto rtStacksPerDss = RayTracingHelper::getNumRtStacksPerDss(*this);
|
||||||
dispatchGlobals.numDSSRTStacks = rtStacksPerDss;
|
dispatchGlobals.numDSSRTStacks = rtStacksPerDss;
|
||||||
dispatchGlobals.maxBVHLevels = maxBvhLevels;
|
dispatchGlobals.maxBVHLevels = maxBvhLevels;
|
||||||
|
|
||||||
|
constexpr auto maxProgrammableBvhLevels = 7;
|
||||||
|
if (maxBvhLevels > maxProgrammableBvhLevels) {
|
||||||
|
dispatchGlobals.maxBVHLevels = 0; // 0 = special case: use 8 levels
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t *dispatchGlobalsAsArray = reinterpret_cast<uint32_t *>(&dispatchGlobals);
|
uint32_t *dispatchGlobalsAsArray = reinterpret_cast<uint32_t *>(&dispatchGlobals);
|
||||||
dispatchGlobalsAsArray[7] = 1;
|
dispatchGlobalsAsArray[7] = 1;
|
||||||
|
|
||||||
|
|
|
@ -263,6 +263,15 @@ TEST_F(DeviceTest, whenAllocateRTDispatchGlobalsIsCalledThenStackSizePerRayIsSet
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(DeviceTest, given8MaxBvhLevelsWhenAllocateRTDispatchGlobalsIsCalledThenMaxBvhLevelsIsSetCorrectly) {
|
||||||
|
uint32_t maxBvhLevels = 8u;
|
||||||
|
pDevice->initializeRayTracing(maxBvhLevels);
|
||||||
|
pDevice->allocateRTDispatchGlobals(maxBvhLevels);
|
||||||
|
EXPECT_NE(nullptr, pDevice->getRTDispatchGlobals(maxBvhLevels));
|
||||||
|
RTDispatchGlobals dispatchGlobals = *reinterpret_cast<struct RTDispatchGlobals *>(pDevice->getRTDispatchGlobals(maxBvhLevels)->rtDispatchGlobalsArray->getUnderlyingBuffer());
|
||||||
|
EXPECT_EQ(0u, static_cast<uint32_t>(dispatchGlobals.maxBVHLevels));
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(DeviceTest, givenNot48bResourceForRtWhenAllocateRTDispatchGlobalsIsCalledThenRTDispatchGlobalsIsAllocatedWithout48bResourceFlag) {
|
TEST_F(DeviceTest, givenNot48bResourceForRtWhenAllocateRTDispatchGlobalsIsCalledThenRTDispatchGlobalsIsAllocatedWithout48bResourceFlag) {
|
||||||
auto mockProductHelper = std::make_unique<MockProductHelper>();
|
auto mockProductHelper = std::make_unique<MockProductHelper>();
|
||||||
mockProductHelper->is48bResourceNeededForRayTracingResult = false;
|
mockProductHelper->is48bResourceNeededForRayTracingResult = false;
|
||||||
|
|
Loading…
Reference in New Issue