compute-runtime/shared/test/unit_test/helpers/ray_tracing_helper_tests.cpp

80 lines
3.2 KiB
C++

/*
* Copyright (C) 2020-2024 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/helpers/constants.h"
#include "shared/source/helpers/ray_tracing_helper.h"
#include "shared/test/common/mocks/mock_device.h"
#include "shared/test/common/test_macros/test.h"
using namespace NEO;
TEST(RayTracingHelperTests, whenGetMemoryBackedFifoSizeToPatchIsCalledCorrectValueIsReturned) {
size_t fifoSize = RayTracingHelper::getMemoryBackedFifoSizeToPatch();
size_t expectedSize =
RayTracingHelper::memoryBackedFifoSizePerDss == 0
? 0
: Math::log2(RayTracingHelper::memoryBackedFifoSizePerDss / MemoryConstants::kiloByte) - 1;
EXPECT_EQ(expectedSize, fifoSize);
}
TEST(RayTracingHelperTests, whenMemoryBackedFifoSizeIsRequestedThenCorrectValueIsReturned) {
MockDevice device;
size_t size = RayTracingHelper::getTotalMemoryBackedFifoSize(device);
uint32_t subSliceCount = GfxCoreHelper::getHighestEnabledDualSubSlice(device.getHardwareInfo());
size_t expectedSize = subSliceCount * RayTracingHelper::memoryBackedFifoSizePerDss;
EXPECT_LT(0u, size);
EXPECT_EQ(expectedSize, size);
}
TEST(RayTracingHelperTests, whenRTStackSizeIsRequestedThenCorrectValueIsReturned) {
MockDevice device;
uint32_t maxBvhLevel = 2;
uint32_t extraBytesLocal = 20;
uint32_t extraBytesGlobal = 100;
uint32_t tiles = 2;
size_t expectedSize = alignUp(RayTracingHelper::getStackSizePerRay(maxBvhLevel, extraBytesLocal) * RayTracingHelper::getNumRtStacks(device) + extraBytesGlobal, MemoryConstants::cacheLineSize);
size_t size = RayTracingHelper::getRTStackSizePerTile(device, tiles, maxBvhLevel, extraBytesLocal, extraBytesGlobal);
EXPECT_EQ(expectedSize, size);
}
TEST(RayTracingHelperTests, whenNumRtStacksPerDssIsRequestedThenCorrectValueIsReturned) {
MockDevice device;
uint32_t numDssRtStacks = RayTracingHelper::getNumRtStacksPerDss(device);
uint32_t expectedValue = RayTracingHelper::stackDssMultiplier;
EXPECT_EQ(expectedValue, numDssRtStacks);
}
TEST(RayTracingHelperTests, whenNumRtStacksIsQueriedThenItIsEqualToNumRtStacksPerDssMultipliedByDualSubsliceCount) {
MockDevice device;
uint32_t numDssRtStacksPerDss = RayTracingHelper::getNumRtStacksPerDss(device);
uint32_t numDssRtStacks = RayTracingHelper::getNumRtStacks(device);
uint32_t subsliceCount = GfxCoreHelper::getHighestEnabledDualSubSlice(device.getHardwareInfo());
EXPECT_LT(0u, numDssRtStacks);
EXPECT_EQ(numDssRtStacks, numDssRtStacksPerDss * subsliceCount);
}
TEST(RayTracingHelperTests, whenStackSizePerRayIsRequestedThenCorrectValueIsReturned) {
EXPECT_EQ(RayTracingHelper::hitInfoSize, RayTracingHelper::getStackSizePerRay(0, 0));
uint32_t maxBvhLevel = 1234;
uint32_t extraBytesLocal = 5678;
uint32_t expectedValue = RayTracingHelper::hitInfoSize + RayTracingHelper::bvhStackSize * maxBvhLevel + extraBytesLocal;
EXPECT_EQ(RayTracingHelper::getStackSizePerRay(maxBvhLevel, extraBytesLocal), expectedValue);
}
TEST(RayTracingHelperTests, whenGetMemoryBackedFifoSizeToPatchIsCalledThenCorrectValueIsReturned) {
EXPECT_EQ(2u, RayTracingHelper::getMemoryBackedFifoSizeToPatch());
}