3939#include " unit_tests/fixtures/platform_fixture.h"
4040#include " unit_tests/helpers/kernel_binary_helper.h"
4141#include " unit_tests/helpers/test_files.h"
42+ #include " unit_tests/helpers/variable_backup.h"
43+ #include " unit_tests/mocks/mock_command_queue.h"
44+ #include " unit_tests/mocks/mock_context.h"
45+ #include " unit_tests/mocks/mock_kernel.h"
4246#include " test.h"
4347#include " gtest/gtest.h"
4448#include < deque>
@@ -59,6 +63,7 @@ int KernelCreateCallbackCount = 0;
5963int KernelSubmitCallbackCount = 0 ;
6064int CommandBufferCreateCallbackCount = 0 ;
6165int CommandBufferCompleteCallbackCount = 0 ;
66+ uint32_t kernelOffset = 0 ;
6267bool returnNullResource = false ;
6368
6469context_handle_t currContext = nullptr ;
@@ -98,7 +103,7 @@ void OnKernelSubmit(command_buffer_handle_t cb, uint64_t kernelId, uint32_t *ent
98103 EXPECT_EQ (GTPIN_DI_SUCCESS, st);
99104 EXPECT_NE (nullptr , bufAddress);
100105 }
101- *entryOffset = 0 ;
106+ *entryOffset = kernelOffset ;
102107 *resource = currResource;
103108 kernelResources.push_back (currResource);
104109
@@ -122,15 +127,10 @@ void OnCommandBufferComplete(command_buffer_handle_t cb) {
122127
123128 CommandBufferCompleteCallbackCount++;
124129}
125-
126130class GTPinFixture : public ContextFixture , public MemoryManagementFixture {
127131 using ContextFixture::SetUp;
128132
129133 public:
130- GTPinFixture () {
131- }
132-
133- protected:
134134 void SetUp () override {
135135 MemoryManagementFixture::SetUp ();
136136 pPlatform = platform ();
@@ -152,6 +152,7 @@ class GTPinFixture : public ContextFixture, public MemoryManagementFixture {
152152 gtpinCallbacks.onCommandBufferComplete = nullptr ;
153153
154154 OCLRT::isGTPinInitialized = false ;
155+ kernelOffset = 0 ;
155156 }
156157
157158 void TearDown () override {
@@ -2183,4 +2184,45 @@ TEST(GTPinOfflineTests, givenGtPinInDisabledStateWhenCallbacksFromEnqueuePathAre
21832184 gtpinNotifyFlushTask (dummyCompletedTask);
21842185 EXPECT_FALSE (gtpinIsGTPinInitialized ());
21852186}
2187+ TEST_F (GTPinTests, givenInitializedGTPinInterfaceWhenOnKernelSubitIsCalledThenCorrectOffsetisSetInKernel) {
2188+ gtpinCallbacks.onContextCreate = OnContextCreate;
2189+ gtpinCallbacks.onContextDestroy = OnContextDestroy;
2190+ gtpinCallbacks.onKernelCreate = OnKernelCreate;
2191+ gtpinCallbacks.onKernelSubmit = OnKernelSubmit;
2192+ gtpinCallbacks.onCommandBufferCreate = OnCommandBufferCreate;
2193+ gtpinCallbacks.onCommandBufferComplete = OnCommandBufferComplete;
2194+ retFromGtPin = GTPin_Init (>pinCallbacks, &driverServices, nullptr );
2195+ VariableBackup<bool > returnNullResourceBckp (&returnNullResource);
2196+ VariableBackup<uint32_t > kernelOffsetBckp (&kernelOffset);
2197+ EXPECT_EQ (GTPIN_DI_SUCCESS, retFromGtPin);
2198+
2199+ char surfaceStateHeap[0x80 ];
2200+ SKernelBinaryHeaderCommon kernelHeader;
2201+ std::unique_ptr<MockContext> context (new MockContext (pDevice));
2202+
2203+ EXPECT_EQ (CL_SUCCESS, retVal);
2204+ std::unique_ptr<KernelInfo> pKernelInfo (KernelInfo::create ());
2205+ kernelHeader.SurfaceStateHeapSize = sizeof (surfaceStateHeap);
2206+ pKernelInfo->heapInfo .pSsh = surfaceStateHeap;
2207+ pKernelInfo->heapInfo .pKernelHeader = &kernelHeader;
2208+ pKernelInfo->usesSsh = true ;
2209+
2210+ std::unique_ptr<MockProgram> pProgramm (new MockProgram (context.get (), false ));
2211+ std::unique_ptr<MockCommandQueue> cmdQ (new MockCommandQueue (context.get (), pDevice, nullptr ));
2212+ std::unique_ptr<MockKernel> pKernel (new MockKernel (pProgramm.get (), *pKernelInfo, *pDevice));
2213+
2214+ pKernel->setSshLocal (nullptr , sizeof (surfaceStateHeap));
2215+
2216+ kernelOffset = 0x1234 ;
2217+ EXPECT_NE (pKernel->getStartOffset (), kernelOffset);
2218+ returnNullResource = true ;
2219+ cl_context ctxt = (cl_context)((Context *)context.get ());
2220+ currContext = (gtpin::context_handle_t )ctxt;
2221+ gtpinNotifyKernelSubmit (pKernel.get (), cmdQ.get ());
2222+ EXPECT_EQ (pKernel->getStartOffset (), kernelOffset);
2223+
2224+ EXPECT_EQ (CL_SUCCESS, retVal);
2225+
2226+ kernelResources.clear ();
2227+ }
21862228} // namespace ULT
0 commit comments