mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-29 09:03:14 +08:00
Correct HostPtr and flag usage in clCreateImage:
- Disallow HostPtr flags, when HostPtr is null - Require HostPtr flag, when HostPtr is not null Change-Id: I8f198b7c3d4052128032e1f0575b19e7af6ffac9 Signed-off-by: Adam Cetnerowski <adam.cetnerowski@intel.com>
This commit is contained in:
committed by
sys_ocldev
parent
9c06e1dc5b
commit
7a476b7bc1
@@ -773,6 +773,10 @@ cl_mem CL_API_CALL clCreateImage(cl_context context,
|
||||
retVal = CL_INVALID_HOST_PTR;
|
||||
break;
|
||||
}
|
||||
if (!(flags & (CL_MEM_COPY_HOST_PTR | CL_MEM_USE_HOST_PTR)) && hostPtr) {
|
||||
retVal = CL_INVALID_HOST_PTR;
|
||||
break;
|
||||
}
|
||||
image = Image::validateAndCreateImage(pContext, flags, imageFormat, imageDesc, hostPtr, retVal);
|
||||
|
||||
} while (false);
|
||||
|
||||
@@ -48,15 +48,13 @@ struct clCreateImageTests : public api_fixture,
|
||||
|
||||
typedef clCreateImageTests<::testing::Test> clCreateImageTest;
|
||||
|
||||
TEST_F(clCreateImageTest, GivenValidParametersWhenCreatingImageThenImageIsCreatedAndSuccessReturned) {
|
||||
char ptr[10];
|
||||
imageDesc.image_row_pitch = 128;
|
||||
TEST_F(clCreateImageTest, GivenNullHostPtrWhenCreatingImageThenImageIsCreatedAndSuccessReturned) {
|
||||
auto image = clCreateImage(
|
||||
pContext,
|
||||
CL_MEM_READ_WRITE,
|
||||
&imageFormat,
|
||||
&imageDesc,
|
||||
ptr,
|
||||
nullptr,
|
||||
&retVal);
|
||||
ASSERT_EQ(CL_SUCCESS, retVal);
|
||||
EXPECT_NE(nullptr, image);
|
||||
@@ -65,6 +63,52 @@ TEST_F(clCreateImageTest, GivenValidParametersWhenCreatingImageThenImageIsCreate
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
}
|
||||
|
||||
TEST_F(clCreateImageTest, GivenNonNullHostPtrAndAlignedRowPitchWhenCreatingImageThenImageIsCreatedAndSuccessReturned) {
|
||||
char hostPtr[4096];
|
||||
imageDesc.image_row_pitch = 128;
|
||||
|
||||
auto image = clCreateImage(
|
||||
pContext,
|
||||
CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,
|
||||
&imageFormat,
|
||||
&imageDesc,
|
||||
hostPtr,
|
||||
&retVal);
|
||||
ASSERT_EQ(CL_SUCCESS, retVal);
|
||||
EXPECT_NE(nullptr, image);
|
||||
|
||||
retVal = clReleaseMemObject(image);
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
}
|
||||
|
||||
TEST_F(clCreateImageTest, GivenNonNullHostPtrAndUnalignedRowPitchWhenCreatingImageThenInvalidImageDescriptotErrorIsReturned) {
|
||||
char hostPtr[4096];
|
||||
imageDesc.image_row_pitch = 129;
|
||||
auto image = clCreateImage(
|
||||
pContext,
|
||||
CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,
|
||||
&imageFormat,
|
||||
&imageDesc,
|
||||
hostPtr,
|
||||
&retVal);
|
||||
ASSERT_EQ(CL_INVALID_IMAGE_DESCRIPTOR, retVal);
|
||||
EXPECT_EQ(nullptr, image);
|
||||
}
|
||||
|
||||
TEST_F(clCreateImageTest, GivenNonNullHostPtrAndSmallRowPitchWhenCreatingImageThenInvalidImageDescriptotErrorIsReturned) {
|
||||
char hostPtr[4096];
|
||||
imageDesc.image_row_pitch = 4;
|
||||
auto image = clCreateImage(
|
||||
pContext,
|
||||
CL_MEM_READ_WRITE | CL_MEM_USE_HOST_PTR,
|
||||
&imageFormat,
|
||||
&imageDesc,
|
||||
hostPtr,
|
||||
&retVal);
|
||||
ASSERT_EQ(CL_INVALID_IMAGE_DESCRIPTOR, retVal);
|
||||
EXPECT_EQ(nullptr, image);
|
||||
}
|
||||
|
||||
TEST_F(clCreateImageTest, GivenUnrestrictedIntelFlagWhenCreatingImageWithInvalidFlagCombinationThenImageIsCreatedAndSuccessReturned) {
|
||||
cl_mem_flags flags = CL_MEM_READ_WRITE | CL_MEM_WRITE_ONLY | CL_MEM_ACCESS_FLAGS_UNRESTRICTED_INTEL;
|
||||
auto image = clCreateImage(
|
||||
@@ -82,6 +126,19 @@ TEST_F(clCreateImageTest, GivenUnrestrictedIntelFlagWhenCreatingImageWithInvalid
|
||||
EXPECT_EQ(CL_SUCCESS, retVal);
|
||||
}
|
||||
|
||||
TEST_F(clCreateImageTest, GivenNotNullHostPtrAndNoHostPtrFlagWhenCreatingImageThenInvalidHostPtrErrorIsReturned) {
|
||||
char hostPtr[4096];
|
||||
auto image = clCreateImage(
|
||||
pContext,
|
||||
CL_MEM_READ_WRITE,
|
||||
&imageFormat,
|
||||
&imageDesc,
|
||||
hostPtr,
|
||||
&retVal);
|
||||
ASSERT_EQ(CL_INVALID_HOST_PTR, retVal);
|
||||
EXPECT_EQ(nullptr, image);
|
||||
}
|
||||
|
||||
TEST_F(clCreateImageTest, GivenInvalidFlagBitsWhenCreatingImageThenInvalidValueErrorIsReturned) {
|
||||
cl_mem_flags flags = (1 << 12);
|
||||
auto image = clCreateImage(
|
||||
@@ -135,13 +192,12 @@ TEST_F(clCreateImageTest, GivenInvalidFlagBitsWhenCreatingImageFromAnotherImageT
|
||||
|
||||
TEST_F(clCreateImageTest, GivenInvalidRowPitchWhenCreatingImageThenInvalidImageDescriptorErrorIsReturned) {
|
||||
imageDesc.image_row_pitch = 655;
|
||||
char ptr[10];
|
||||
auto image = clCreateImage(
|
||||
pContext,
|
||||
CL_MEM_READ_WRITE,
|
||||
&imageFormat,
|
||||
&imageDesc,
|
||||
ptr,
|
||||
nullptr,
|
||||
&retVal);
|
||||
ASSERT_EQ(CL_INVALID_IMAGE_DESCRIPTOR, retVal);
|
||||
EXPECT_EQ(nullptr, image);
|
||||
@@ -219,13 +275,12 @@ TEST_F(clCreateImageTest, GivenNonZeroPitchWhenCreatingImageFromBufferThenImageI
|
||||
|
||||
TEST_F(clCreateImageTest, GivenNotNullHostPtrAndRowPitchIsNotGreaterThanWidthTimesElementSizeWhenCreatingImageThenInvalidImageDescriptorErrorIsReturned) {
|
||||
imageDesc.image_row_pitch = 64;
|
||||
char ptr[10];
|
||||
auto image = clCreateImage(
|
||||
pContext,
|
||||
CL_MEM_READ_WRITE,
|
||||
&imageFormat,
|
||||
&imageDesc,
|
||||
ptr,
|
||||
nullptr,
|
||||
&retVal);
|
||||
ASSERT_EQ(CL_INVALID_IMAGE_DESCRIPTOR, retVal);
|
||||
EXPECT_EQ(nullptr, image);
|
||||
@@ -304,17 +359,21 @@ INSTANTIATE_TEST_CASE_P(CreateImageWithFlags,
|
||||
::testing::ValuesIn(validFlags));
|
||||
|
||||
TEST_P(clCreateImageValidFlags, GivenValidFlagsWhenCreatingImageThenImageIsCreatedAndSuccessReturned) {
|
||||
|
||||
char ptr[128 * 32];
|
||||
imageDesc.image_row_pitch = 128;
|
||||
cl_mem_flags flags = GetParam();
|
||||
char ptr[10];
|
||||
char *hostPtr = nullptr;
|
||||
|
||||
if (flags & CL_MEM_USE_HOST_PTR ||
|
||||
flags & CL_MEM_COPY_HOST_PTR) {
|
||||
hostPtr = ptr;
|
||||
}
|
||||
|
||||
auto image = clCreateImage(
|
||||
pContext,
|
||||
flags,
|
||||
&imageFormat,
|
||||
&imageDesc,
|
||||
ptr,
|
||||
hostPtr,
|
||||
&retVal);
|
||||
|
||||
ASSERT_EQ(CL_SUCCESS, retVal);
|
||||
|
||||
Reference in New Issue
Block a user