@@ -698,36 +698,56 @@ TEST_F(AggregatedSmallBuffersSubBufferApiTest, givenBufferFromPoolWhenCreateSubB
698698}
699699
700700TEST_F (AggregatedSmallBuffersSubBufferApiTest, givenSubBufferFromBufferPoolWhenGetMemObjInfoCalledThenReturnValuesLikeForNormalSubBuffer) {
701- cl_mem buffer = clCreateBuffer (clContext, flags, size, hostPtr, &retVal);
702- EXPECT_EQ (retVal, CL_SUCCESS);
703- EXPECT_NE (buffer, nullptr );
704- MockBuffer *mockBuffer = static_cast <MockBuffer *>(buffer);
705- EXPECT_TRUE (context->getBufferPoolAllocator ().isPoolBuffer (mockBuffer->associatedMemObject ));
701+ cl_mem buffer{};
702+ cl_mem buffer1 = clCreateBuffer (clContext, flags, size, hostPtr, &retVal);
703+ EXPECT_EQ (CL_SUCCESS, retVal);
704+ EXPECT_NE (nullptr , buffer1);
705+ auto mockBuffer1 = static_cast <MockBuffer *>(buffer1);
706+ EXPECT_TRUE (context->getBufferPoolAllocator ().isPoolBuffer (mockBuffer1->associatedMemObject ));
707+
708+ // need buffer to have non-zero offset, to verify offset calculations in clGemMemObjectInfo
709+ // so if we get first pool buffer with offset 0, use a second buffer
710+ if (mockBuffer1->getOffset () != 0u ) {
711+ buffer = buffer1;
712+ } else {
713+ cl_mem buffer2 = clCreateBuffer (clContext, flags, size, hostPtr, &retVal);
714+ EXPECT_EQ (CL_SUCCESS, retVal);
715+ EXPECT_NE (nullptr , buffer2);
716+ auto mockBuffer2 = static_cast <MockBuffer *>(buffer2);
717+ EXPECT_TRUE (context->getBufferPoolAllocator ().isPoolBuffer (mockBuffer2->associatedMemObject ));
718+ EXPECT_NE (0u , mockBuffer2->getOffset ());
719+ buffer = buffer2;
720+ retVal = clReleaseMemObject (buffer1);
721+ EXPECT_EQ (retVal, CL_SUCCESS);
722+ }
706723
707724 cl_buffer_region region{};
708725 region.size = 1 ;
709726 region.origin = size / 2 ;
710727 cl_mem subBuffer = clCreateSubBuffer (buffer, flags, CL_BUFFER_CREATE_TYPE_REGION, ®ion, &retVal);
711- EXPECT_EQ (retVal, CL_SUCCESS );
712- EXPECT_NE (subBuffer, nullptr );
728+ EXPECT_EQ (CL_SUCCESS, retVal );
729+ EXPECT_NE (nullptr , subBuffer );
713730
714731 cl_mem associatedMemObj = nullptr ;
715732 retVal = clGetMemObjectInfo (subBuffer, CL_MEM_ASSOCIATED_MEMOBJECT, sizeof (cl_mem), &associatedMemObj, nullptr );
716- EXPECT_EQ (retVal, CL_SUCCESS );
733+ EXPECT_EQ (CL_SUCCESS, retVal );
717734 EXPECT_EQ (associatedMemObj, buffer);
718735
736+ auto mockSubBuffer = static_cast <MockBuffer *>(subBuffer);
737+ const auto offsetInternal = mockSubBuffer->getOffset ();
719738 size_t offset = 0u ;
720739 retVal = clGetMemObjectInfo (subBuffer, CL_MEM_OFFSET, sizeof (size_t ), &offset, nullptr );
721- EXPECT_EQ (retVal, CL_SUCCESS);
722- EXPECT_EQ (offset, region.origin );
740+ EXPECT_EQ (CL_SUCCESS, retVal);
741+ EXPECT_EQ (region.origin , offset);
742+ EXPECT_EQ (offsetInternal, mockSubBuffer->getOffset ()); // internal offset should not be modified after call
723743
724744 retVal = clReleaseMemObject (subBuffer);
725745 EXPECT_EQ (retVal, CL_SUCCESS);
726746
727747 retVal = clReleaseMemObject (buffer);
728748 EXPECT_EQ (retVal, CL_SUCCESS);
729749
730- EXPECT_EQ (clReleaseContext (context), CL_SUCCESS );
750+ EXPECT_EQ (CL_SUCCESS, clReleaseContext (context));
731751}
732752
733753TEST_F (AggregatedSmallBuffersSubBufferApiTest, givenBufferFromPoolWhenCreateSubBufferCalledWithRegionOutsideBufferThenItFails) {
0 commit comments