Skip to content

Commit 510ba83

Browse files
OpenCL Queue Families extension 8/n
Check capabilities for image to buffer and buffer to image copies Signed-off-by: Maciej Dziuban <[email protected]> Related-To: NEO-5120
1 parent 7465123 commit 510ba83

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

opencl/source/api/api.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3038,6 +3038,12 @@ cl_int CL_API_CALL clEnqueueCopyImageToBuffer(cl_command_queue commandQueue,
30383038
return retVal;
30393039
}
30403040

3041+
if (!pCommandQueue->validateCapabilityForOperation(CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_BUFFER_INTEL, eventWaitList, event)) {
3042+
retVal = CL_INVALID_OPERATION;
3043+
TRACING_EXIT(clEnqueueCopyImageToBuffer, &retVal);
3044+
return retVal;
3045+
}
3046+
30413047
retVal = pCommandQueue->enqueueCopyImageToBuffer(
30423048
pSrcImage,
30433049
pDstBuffer,
@@ -3097,6 +3103,12 @@ cl_int CL_API_CALL clEnqueueCopyBufferToImage(cl_command_queue commandQueue,
30973103
return retVal;
30983104
}
30993105

3106+
if (!pCommandQueue->validateCapabilityForOperation(CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_IMAGE_INTEL, eventWaitList, event)) {
3107+
retVal = CL_INVALID_OPERATION;
3108+
TRACING_EXIT(clEnqueueCopyBufferToImage, &retVal);
3109+
return retVal;
3110+
}
3111+
31003112
retVal = pCommandQueue->enqueueCopyBufferToImage(
31013113
pSrcBuffer,
31023114
pDstImage,

opencl/test/unit_test/api/cl_enqueue_copy_buffer_to_image_tests.inl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,34 @@ TEST_F(clEnqueueCopyBufferToImageTests, GivenValidParametersWhenCopyingBufferToI
111111
EXPECT_EQ(CL_SUCCESS, retVal);
112112
}
113113

114+
TEST_F(clEnqueueCopyBufferToImageTests, GivenQueueIncapableWhenCopyingBufferToImageThenInvalidOperationIsReturned) {
115+
116+
imageFormat.image_channel_order = CL_RGBA;
117+
cl_mem dstImage = ImageFunctions::validateAndCreateImage(pContext, nullptr, CL_MEM_READ_WRITE, 0, &imageFormat, &imageDesc,
118+
nullptr, retVal);
119+
ASSERT_EQ(CL_SUCCESS, retVal);
120+
EXPECT_NE(nullptr, dstImage);
121+
auto srcBuffer = std::unique_ptr<Buffer>(BufferHelper<BufferUseHostPtr<>>::create(pContext));
122+
size_t dstOrigin[] = {0, 0, 0};
123+
size_t region[] = {10, 10, 1};
124+
125+
this->disableQueueCapabilities(CL_QUEUE_CAPABILITY_TRANSFER_BUFFER_IMAGE_INTEL);
126+
auto retVal = clEnqueueCopyBufferToImage(
127+
pCommandQueue,
128+
srcBuffer.get(),
129+
dstImage,
130+
0u, //src_offset
131+
dstOrigin,
132+
region,
133+
0, //numEventsInWaitList
134+
nullptr,
135+
nullptr);
136+
137+
EXPECT_EQ(CL_INVALID_OPERATION, retVal);
138+
retVal = clReleaseMemObject(dstImage);
139+
EXPECT_EQ(CL_SUCCESS, retVal);
140+
}
141+
114142
typedef clEnqueueCopyBufferToImageTests clEnqueueCopyBufferToImageYUV;
115143

116144
TEST_F(clEnqueueCopyBufferToImageYUV, GivenValidYuvDstImageWhenCopyingBufferToImageThenSuccessIsReturned) {

opencl/test/unit_test/api/cl_enqueue_copy_image_to_buffer_tests.inl

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,31 @@ TEST_F(clEnqueueCopyImageToBufferTests, GivenValidParametersWhenCopyingImageToBu
109109
EXPECT_EQ(CL_SUCCESS, retVal);
110110
}
111111

112+
TEST_F(clEnqueueCopyImageToBufferTests, GivenQueueIncapableWhenCopyingImageToBufferThenInvalidOperationIsReturned) {
113+
imageFormat.image_channel_order = CL_RGBA;
114+
auto srcImage = Image::validateAndCreateImage(pContext, nullptr, CL_MEM_READ_WRITE, 0, &imageFormat, &imageDesc, nullptr, retVal);
115+
ASSERT_EQ(CL_SUCCESS, retVal);
116+
EXPECT_NE(nullptr, srcImage);
117+
auto dstBuffer = std::unique_ptr<Buffer>(BufferHelper<BufferUseHostPtr<>>::create(pContext));
118+
size_t srcOrigin[] = {0, 0, 0};
119+
size_t region[] = {10, 10, 1};
120+
this->disableQueueCapabilities(CL_QUEUE_CAPABILITY_TRANSFER_IMAGE_BUFFER_INTEL);
121+
auto retVal = clEnqueueCopyImageToBuffer(
122+
pCommandQueue,
123+
srcImage,
124+
dstBuffer.get(),
125+
srcOrigin,
126+
region,
127+
0, //dstOffset
128+
0, //numEventsInWaitList
129+
nullptr,
130+
nullptr);
131+
132+
EXPECT_EQ(CL_INVALID_OPERATION, retVal);
133+
retVal = clReleaseMemObject(srcImage);
134+
EXPECT_EQ(CL_SUCCESS, retVal);
135+
}
136+
112137
typedef clEnqueueCopyImageToBufferTests clEnqueueCopyImageToBufferYUVTests;
113138

114139
TEST_F(clEnqueueCopyImageToBufferYUVTests, GivenValidParametersWhenCopyingYuvImageToBufferThenSuccessIsReturned) {

0 commit comments

Comments
 (0)