@@ -3413,6 +3413,77 @@ TEST_F(KernelGlobalWorkOffsetTests, whenSettingGlobalOffsetThenCrossThreadDataIs
34133413 EXPECT_EQ (*(dst.begin () + desc.payloadMappings .dispatchTraits .globalWorkOffset [2 ]), globalOffsetz);
34143414}
34153415
3416+ class KernelProgramBinaryTests : public ModuleFixture , public ::testing::Test {
3417+ public:
3418+ void SetUp () override {
3419+ ModuleFixture::setUp ();
3420+
3421+ ze_kernel_desc_t kernelDesc = {};
3422+ kernelDesc.pKernelName = kernelName.c_str ();
3423+
3424+ ze_result_t res = module ->createKernel (&kernelDesc, &kernelHandle);
3425+ EXPECT_EQ (ZE_RESULT_SUCCESS, res);
3426+
3427+ kernel = L0::Kernel::fromHandle (kernelHandle);
3428+ }
3429+
3430+ void TearDown () override {
3431+ Kernel::fromHandle (kernelHandle)->destroy ();
3432+ ModuleFixture::tearDown ();
3433+ }
3434+
3435+ ze_kernel_handle_t kernelHandle;
3436+ L0::Kernel *kernel = nullptr ;
3437+ };
3438+
3439+ TEST_F (KernelProgramBinaryTests, givenCallToGetKernelProgramBinaryThenCorrectSizeAndDataReturned) {
3440+
3441+ size_t kernelBinarySize = 0 ;
3442+ char *kernelBinaryRetrieved = nullptr ;
3443+ EXPECT_EQ (ZE_RESULT_SUCCESS, kernel->getKernelProgramBinary (&kernelBinarySize, kernelBinaryRetrieved));
3444+ EXPECT_GT (kernelBinarySize, 0u );
3445+ kernelBinaryRetrieved = new char [kernelBinarySize];
3446+ EXPECT_EQ (ZE_RESULT_SUCCESS, kernel->getKernelProgramBinary (&kernelBinarySize, kernelBinaryRetrieved));
3447+
3448+ auto &kernelImmutableData = this ->module ->kernelImmDatas .front ();
3449+ EXPECT_EQ (kernelBinarySize, kernelImmutableData->getKernelInfo ()->heapInfo .kernelHeapSize );
3450+ const char *heapPtr = reinterpret_cast <const char *>(kernelImmutableData->getKernelInfo ()->heapInfo .pKernelHeap );
3451+ EXPECT_EQ (0 , memcmp (kernelBinaryRetrieved, heapPtr, kernelBinarySize));
3452+ delete[] kernelBinaryRetrieved;
3453+ }
3454+
3455+ TEST_F (KernelProgramBinaryTests, givenCallToGetKernelProgramBinaryWithSmallSizeThenSmallSizeReturned) {
3456+ size_t kernelBinarySize = 0 ;
3457+ char *kernelBinaryRetrieved = nullptr ;
3458+ EXPECT_EQ (ZE_RESULT_SUCCESS, kernel->getKernelProgramBinary (&kernelBinarySize, kernelBinaryRetrieved));
3459+ kernelBinaryRetrieved = new char [kernelBinarySize];
3460+ size_t kernelBinarySize2 = kernelBinarySize / 2 ;
3461+ EXPECT_EQ (ZE_RESULT_SUCCESS, kernel->getKernelProgramBinary (&kernelBinarySize2, kernelBinaryRetrieved));
3462+ EXPECT_EQ (kernelBinarySize2, (kernelBinarySize / 2 ));
3463+
3464+ auto &kernelImmutableData = this ->module ->kernelImmDatas .front ();
3465+ EXPECT_EQ (kernelBinarySize, kernelImmutableData->getKernelInfo ()->heapInfo .kernelHeapSize );
3466+ const char *heapPtr = reinterpret_cast <const char *>(kernelImmutableData->getKernelInfo ()->heapInfo .pKernelHeap );
3467+ EXPECT_EQ (0 , memcmp (kernelBinaryRetrieved, heapPtr, kernelBinarySize2));
3468+ delete[] kernelBinaryRetrieved;
3469+ }
3470+
3471+ TEST_F (KernelProgramBinaryTests, givenCallToGetKernelProgramBinaryWithLargeSizeThenCorrectSizeReturned) {
3472+ size_t kernelBinarySize = 0 ;
3473+ char *kernelBinaryRetrieved = nullptr ;
3474+ EXPECT_EQ (ZE_RESULT_SUCCESS, kernel->getKernelProgramBinary (&kernelBinarySize, kernelBinaryRetrieved));
3475+ kernelBinaryRetrieved = new char [kernelBinarySize];
3476+ size_t kernelBinarySize2 = kernelBinarySize * 2 ;
3477+ EXPECT_EQ (ZE_RESULT_SUCCESS, kernel->getKernelProgramBinary (&kernelBinarySize2, kernelBinaryRetrieved));
3478+ EXPECT_EQ (kernelBinarySize2, kernelBinarySize);
3479+
3480+ auto &kernelImmutableData = this ->module ->kernelImmDatas .front ();
3481+ EXPECT_EQ (kernelBinarySize2, kernelImmutableData->getKernelInfo ()->heapInfo .kernelHeapSize );
3482+ const char *heapPtr = reinterpret_cast <const char *>(kernelImmutableData->getKernelInfo ()->heapInfo .pKernelHeap );
3483+ EXPECT_EQ (0 , memcmp (kernelBinaryRetrieved, heapPtr, kernelBinarySize2));
3484+ delete[] kernelBinaryRetrieved;
3485+ }
3486+
34163487using KernelWorkDimTests = Test<ModuleImmutableDataFixture>;
34173488
34183489TEST_F (KernelWorkDimTests, givenGroupCountsWhenPatchingWorkDimThenCrossThreadDataIsPatched) {
0 commit comments