@@ -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+
662711using KernelIndirectPropertiesFromIGCTests = KernelImmutableDataTests;
663712
664713TEST_F (KernelIndirectPropertiesFromIGCTests, whenInitializingKernelWithNoKernelLoadAndNoStoreAndNoAtomicThenHasIndirectAccessIsSetToFalse) {
0 commit comments