Skip to content

Commit b813171

Browse files
Add unit test to verify rtDispatchGlobals is correctly patched
Related-To: NEO-6529 Signed-off-by: Jim Snow <[email protected]>
1 parent 68dbbd7 commit b813171

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

level_zero/core/test/unit_tests/fixtures/module_fixture.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ struct ModuleImmutableDataFixture : public DeviceFixture {
116116
class MockKernel : public WhiteBox<L0::KernelImp> {
117117
public:
118118
using KernelImp::crossThreadData;
119+
using KernelImp::crossThreadDataSize;
119120
using KernelImp::kernelArgHandlers;
120121
using KernelImp::kernelHasIndirectAccess;
121122
using KernelImp::privateMemoryGraphicsAllocation;

level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,55 @@ TEST_F(KernelImmutableDataTests, whenHasRTCallsIsTrueAndNoRTDispatchGlobalsIsAll
659659
EXPECT_EQ(ZE_RESULT_ERROR_OUT_OF_HOST_MEMORY, kernel->initialize(&kernelDesc));
660660
}
661661

662+
TEST_F(KernelImmutableDataTests, whenHasRTCallsIsTrueThenCrossThreadDataIsPatched) {
663+
KernelDescriptorRTCallsTrue mockDescriptor = {};
664+
mockDescriptor.kernelMetadata.kernelName = "rt_test";
665+
for (auto i = 0u; i < 3u; i++) {
666+
mockDescriptor.kernelAttributes.requiredWorkgroupSize[i] = 0;
667+
}
668+
669+
std::unique_ptr<MockImmutableData> mockKernelImmutableData =
670+
std::make_unique<MockImmutableData>(32u);
671+
mockKernelImmutableData->kernelDescriptor = &mockDescriptor;
672+
673+
ModuleBuildLog *moduleBuildLog = nullptr;
674+
module = std::make_unique<MockModule>(device,
675+
moduleBuildLog,
676+
ModuleType::User,
677+
32u,
678+
mockKernelImmutableData.get());
679+
module->maxGroupSize = 10;
680+
681+
std::unique_ptr<ModuleImmutableDataFixture::MockKernel> kernel;
682+
kernel = std::make_unique<ModuleImmutableDataFixture::MockKernel>(module.get());
683+
684+
ze_kernel_desc_t kernelDesc = {};
685+
kernelDesc.pKernelName = "rt_test";
686+
687+
auto immDataVector =
688+
const_cast<std::vector<std::unique_ptr<KernelImmutableData>> *>(&module.get()->getKernelImmutableDataVector());
689+
690+
immDataVector->push_back(std::move(mockKernelImmutableData));
691+
692+
auto crossThreadData = std::make_unique<uint32_t[]>(4);
693+
kernel->crossThreadData.reset(reinterpret_cast<uint8_t *>(crossThreadData.get()));
694+
kernel->crossThreadDataSize = sizeof(uint32_t[4]);
695+
696+
neoDevice->setRTDispatchGlobalsForceAllocation();
697+
698+
auto result = kernel->initialize(&kernelDesc);
699+
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
700+
701+
auto rtDispatchGlobals = neoDevice->getRTDispatchGlobals(NEO::RayTracingHelper::maxBvhLevels);
702+
EXPECT_NE(nullptr, rtDispatchGlobals);
703+
704+
auto dispatchGlobalsAddressPatched = *reinterpret_cast<uintptr_t *>(crossThreadData.get());
705+
auto dispatchGlobalsGpuAddressOffset = static_cast<uintptr_t>(rtDispatchGlobals->getGpuAddressToPatch());
706+
EXPECT_EQ(dispatchGlobalsGpuAddressOffset, dispatchGlobalsAddressPatched);
707+
708+
kernel->crossThreadData.release();
709+
}
710+
662711
using KernelIndirectPropertiesFromIGCTests = KernelImmutableDataTests;
663712

664713
TEST_F(KernelIndirectPropertiesFromIGCTests, whenInitializingKernelWithNoKernelLoadAndNoStoreAndNoAtomicThenHasIndirectAccessIsSetToFalse) {

0 commit comments

Comments
 (0)