@@ -698,36 +698,56 @@ TEST_F(AggregatedSmallBuffersSubBufferApiTest, givenBufferFromPoolWhenCreateSubB
698
698
}
699
699
700
700
TEST_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
+ }
706
723
707
724
cl_buffer_region region{};
708
725
region.size = 1 ;
709
726
region.origin = size / 2 ;
710
727
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 );
713
730
714
731
cl_mem associatedMemObj = nullptr ;
715
732
retVal = clGetMemObjectInfo (subBuffer, CL_MEM_ASSOCIATED_MEMOBJECT, sizeof (cl_mem), &associatedMemObj, nullptr );
716
- EXPECT_EQ (retVal, CL_SUCCESS );
733
+ EXPECT_EQ (CL_SUCCESS, retVal );
717
734
EXPECT_EQ (associatedMemObj, buffer);
718
735
736
+ auto mockSubBuffer = static_cast <MockBuffer *>(subBuffer);
737
+ const auto offsetInternal = mockSubBuffer->getOffset ();
719
738
size_t offset = 0u ;
720
739
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
723
743
724
744
retVal = clReleaseMemObject (subBuffer);
725
745
EXPECT_EQ (retVal, CL_SUCCESS);
726
746
727
747
retVal = clReleaseMemObject (buffer);
728
748
EXPECT_EQ (retVal, CL_SUCCESS);
729
749
730
- EXPECT_EQ (clReleaseContext (context), CL_SUCCESS );
750
+ EXPECT_EQ (CL_SUCCESS, clReleaseContext (context));
731
751
}
732
752
733
753
TEST_F (AggregatedSmallBuffersSubBufferApiTest, givenBufferFromPoolWhenCreateSubBufferCalledWithRegionOutsideBufferThenItFails) {
0 commit comments