Skip to content

Commit 92fce2e

Browse files
committed
[CTS] Add CTS tests for urMemImageCreate entry-point
* Adds CTS tests for different image types. * Adds CTS tests for different image formats * Defines the primary and optional supported image formats. * Deletes redundant ERROR_IMAGE_FORMAT_NOT_SUPPORTED error code. * Deletes UR_MEM_TYPE_BUFFER as it should be redundant to urMemBufferCreate entry-point. * Deletes URMEM_TYPE_IMAGE1D_BUFFER which is only used in opencl and opencl will need cl_image_desc.buffer/mem_object value when CL_MEM_OBJECT_IMAGE1D_BUFFER is used, and we don't have a way in urMemImageCreate to pass it a buffer object that it will use to initialize an image with it and use this type. And if we initialized a new buffer inside the entry-point, we don't have a way of clearing the buffer memory at the end. * Make sure the adapters return the right error-codes for urMemImageCreate entry-point.
1 parent fb3cbd1 commit 92fce2e

24 files changed

+630
-117
lines changed

include/ur_api.h

Lines changed: 63 additions & 49 deletions
Large diffs are not rendered by default.

include/ur_print.hpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,9 +1441,6 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_result_t value) {
14411441
case UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR:
14421442
os << "UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR";
14431443
break;
1444-
case UR_RESULT_ERROR_IMAGE_FORMAT_NOT_SUPPORTED:
1445-
os << "UR_RESULT_ERROR_IMAGE_FORMAT_NOT_SUPPORTED";
1446-
break;
14471444
case UR_RESULT_ERROR_MEM_OBJECT_ALLOCATION_FAILURE:
14481445
os << "UR_RESULT_ERROR_MEM_OBJECT_ALLOCATION_FAILURE";
14491446
break;
@@ -5453,9 +5450,6 @@ inline ur_result_t printFlag<ur_mem_flag_t>(std::ostream &os, uint32_t flag) {
54535450
/// std::ostream &
54545451
inline std::ostream &operator<<(std::ostream &os, enum ur_mem_type_t value) {
54555452
switch (value) {
5456-
case UR_MEM_TYPE_BUFFER:
5457-
os << "UR_MEM_TYPE_BUFFER";
5458-
break;
54595453
case UR_MEM_TYPE_IMAGE2D:
54605454
os << "UR_MEM_TYPE_IMAGE2D";
54615455
break;
@@ -5471,9 +5465,6 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_mem_type_t value) {
54715465
case UR_MEM_TYPE_IMAGE1D_ARRAY:
54725466
os << "UR_MEM_TYPE_IMAGE1D_ARRAY";
54735467
break;
5474-
case UR_MEM_TYPE_IMAGE1D_BUFFER:
5475-
os << "UR_MEM_TYPE_IMAGE1D_BUFFER";
5476-
break;
54775468
case UR_MEM_TYPE_IMAGE_CUBEMAP_EXP:
54785469
os << "UR_MEM_TYPE_IMAGE_CUBEMAP_EXP";
54795470
break;

scripts/core/common.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,6 @@ etors:
205205
desc: "Invalid image size"
206206
- name: ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR
207207
desc: "Invalid image format descriptor"
208-
- name: ERROR_IMAGE_FORMAT_NOT_SUPPORTED
209-
desc: "Image format not supported"
210208
- name: ERROR_MEM_OBJECT_ALLOCATION_FAILURE
211209
desc: "Memory object allocation failure"
212210
- name: ERROR_INVALID_PROGRAM_EXECUTABLE

scripts/core/exp-bindless-images.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ returns:
387387
- $X_RESULT_ERROR_INVALID_CONTEXT
388388
- $X_RESULT_ERROR_INVALID_VALUE
389389
- $X_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR:
390-
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_BUFFER < pImageDesc->type`"
390+
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_ARRAY < pImageDesc->type`"
391391
- $X_RESULT_ERROR_INVALID_IMAGE_SIZE
392392
- $X_RESULT_ERROR_INVALID_OPERATION
393393
--- #--------------------------------------------------------------------------
@@ -442,7 +442,7 @@ returns:
442442
- $X_RESULT_ERROR_INVALID_CONTEXT
443443
- $X_RESULT_ERROR_INVALID_VALUE
444444
- $X_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR:
445-
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_BUFFER < pImageDesc->type`"
445+
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_ARRAY < pImageDesc->type`"
446446
- $X_RESULT_ERROR_INVALID_IMAGE_SIZE
447447
- $X_RESULT_ERROR_INVALID_OPERATION
448448
--- #--------------------------------------------------------------------------
@@ -479,7 +479,7 @@ returns:
479479
- $X_RESULT_ERROR_INVALID_CONTEXT
480480
- $X_RESULT_ERROR_INVALID_VALUE
481481
- $X_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR:
482-
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_BUFFER < pImageDesc->type`"
482+
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_ARRAY < pImageDesc->type`"
483483
- $X_RESULT_ERROR_INVALID_IMAGE_SIZE
484484
- $X_RESULT_ERROR_INVALID_SAMPLER
485485
- $X_RESULT_ERROR_INVALID_OPERATION
@@ -542,7 +542,7 @@ returns:
542542
- $X_RESULT_ERROR_INVALID_QUEUE
543543
- $X_RESULT_ERROR_INVALID_VALUE
544544
- $X_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR:
545-
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_BUFFER < pImageDesc->type`"
545+
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_ARRAY < pImageDesc->type`"
546546
- $X_RESULT_ERROR_INVALID_IMAGE_SIZE
547547
- $X_RESULT_ERROR_INVALID_OPERATION
548548
--- #--------------------------------------------------------------------------
@@ -679,7 +679,7 @@ returns:
679679
- $X_RESULT_ERROR_INVALID_CONTEXT
680680
- $X_RESULT_ERROR_INVALID_VALUE
681681
- $X_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR:
682-
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_BUFFER < pImageDesc->type`"
682+
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_ARRAY < pImageDesc->type`"
683683
- $X_RESULT_ERROR_INVALID_IMAGE_SIZE
684684
- $X_RESULT_ERROR_INVALID_OPERATION
685685
- $X_RESULT_ERROR_OUT_OF_RESOURCES

scripts/core/memory.yml

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ desc: "Memory types"
4141
class: $xMem
4242
name: $x_mem_type_t
4343
etors:
44-
- name: BUFFER
45-
desc: "Buffer object"
4644
- name: IMAGE2D
4745
desc: "2D image object"
4846
- name: IMAGE3D
@@ -53,8 +51,6 @@ etors:
5351
desc: "1D image object"
5452
- name: IMAGE1D_ARRAY
5553
desc: "1D image array object"
56-
- name: IMAGE1D_BUFFER
57-
desc: "1D image buffer object"
5854
--- #--------------------------------------------------------------------------
5955
type: enum
6056
desc: "Memory Information type"
@@ -213,6 +209,15 @@ name: ImageCreate
213209
ordinal: "0"
214210
analogue:
215211
- "**clCreateImage**"
212+
details:
213+
- |
214+
The primary $x_image_format_t that must be supported by all the adapters are {UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_UNORM_INT8},
215+
{UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_UNORM_INT16}, {UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_SNORM_INT8},
216+
{UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_SNORM_INT16}, {UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_SIGNED_INT8},
217+
{UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_SIGNED_INT16}, {UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_SIGNED_INT32},
218+
{UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_UNSIGNED_INT8}, {UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_UNSIGNED_INT16},
219+
{UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_UNSIGNED_INT32}, {UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_HALF_FLOAT},
220+
{UR_IMAGE_CHANNEL_ORDER_RGBA, UR_IMAGE_CHANNEL_TYPE_FLOAT}.
216221
params:
217222
- type: $x_context_handle_t
218223
name: hContext
@@ -236,12 +241,13 @@ returns:
236241
- $X_RESULT_ERROR_INVALID_CONTEXT
237242
- $X_RESULT_ERROR_INVALID_VALUE
238243
- $X_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR:
239-
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_BUFFER < pImageDesc->type`"
244+
- "`pImageDesc && UR_MEM_TYPE_IMAGE1D_ARRAY < pImageDesc->type`"
240245
- $X_RESULT_ERROR_INVALID_IMAGE_SIZE
241246
- $X_RESULT_ERROR_INVALID_OPERATION
242247
- $X_RESULT_ERROR_INVALID_HOST_PTR:
243248
- "`pHost == NULL && (flags & (UR_MEM_FLAG_USE_HOST_POINTER | UR_MEM_FLAG_ALLOC_COPY_HOST_POINTER)) != 0`"
244249
- "`pHost != NULL && (flags & (UR_MEM_FLAG_USE_HOST_POINTER | UR_MEM_FLAG_ALLOC_COPY_HOST_POINTER)) == 0`"
250+
- $X_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT
245251
- $X_RESULT_ERROR_OUT_OF_HOST_MEMORY
246252
- $X_RESULT_ERROR_OUT_OF_RESOURCES
247253
--- #--------------------------------------------------------------------------

source/adapters/cuda/image.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ ur_result_t urCalculateNumChannels(ur_image_channel_order_t order,
3535
*NumChannels = 2;
3636
return UR_RESULT_SUCCESS;
3737
case ur_image_channel_order_t::UR_IMAGE_CHANNEL_ORDER_RGB:
38-
return UR_RESULT_ERROR_IMAGE_FORMAT_NOT_SUPPORTED;
38+
return UR_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT;
3939
case ur_image_channel_order_t::UR_IMAGE_CHANNEL_ORDER_RGBA:
4040
case ur_image_channel_order_t::UR_IMAGE_CHANNEL_ORDER_ARGB:
4141
case ur_image_channel_order_t::UR_IMAGE_CHANNEL_ORDER_BGRA:
@@ -49,7 +49,7 @@ ur_result_t urCalculateNumChannels(ur_image_channel_order_t order,
4949
case ur_image_channel_order_t::UR_IMAGE_CHANNEL_ORDER_INTENSITY:
5050
case ur_image_channel_order_t::UR_IMAGE_CHANNEL_ORDER_LUMINANCE:
5151
default:
52-
return UR_RESULT_ERROR_IMAGE_FORMAT_NOT_SUPPORTED;
52+
return UR_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT;
5353
}
5454
}
5555

@@ -147,7 +147,7 @@ urToCudaImageChannelFormat(ur_image_channel_type_t image_channel_type,
147147
cuda_format = cuda_format_and_size.first;
148148
pixel_size_bytes = cuda_format_and_size.second;
149149
} catch (const std::out_of_range &) {
150-
return UR_RESULT_ERROR_IMAGE_FORMAT_NOT_SUPPORTED;
150+
return UR_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT;
151151
}
152152
}
153153

@@ -228,7 +228,7 @@ cudaToUrImageChannelFormat(CUarray_format cuda_format,
228228
#endif
229229
#undef MAP
230230
default:
231-
return UR_RESULT_ERROR_IMAGE_FORMAT_NOT_SUPPORTED;
231+
return UR_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT;
232232
}
233233
}
234234

source/adapters/cuda/memory.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemImageCreate(
211211

212212
UR_ASSERT(pImageDesc->stype == UR_STRUCTURE_TYPE_IMAGE_DESC,
213213
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
214-
UR_ASSERT(pImageDesc->type <= UR_MEM_TYPE_IMAGE1D_BUFFER,
214+
UR_ASSERT(pImageDesc->type <= UR_MEM_TYPE_IMAGE1D_ARRAY,
215215
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
216216
UR_ASSERT(pImageDesc->numMipLevel == 0,
217217
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
@@ -227,11 +227,14 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemImageCreate(
227227
// We only support RBGA channel order
228228
// TODO: check SYCL CTS and spec. May also have to support BGRA
229229
UR_ASSERT(pImageFormat->channelOrder == UR_IMAGE_CHANNEL_ORDER_RGBA,
230-
UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION);
230+
UR_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT);
231231

232232
auto URMemObj = std::unique_ptr<ur_mem_handle_t_>(
233233
new ur_mem_handle_t_{hContext, flags, *pImageFormat, *pImageDesc, pHost});
234234

235+
UR_ASSERT(std::get<SurfaceMem>(URMemObj->Mem).PixelTypeSizeBytes,
236+
UR_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT);
237+
235238
try {
236239
if (PerformInitialCopy) {
237240
for (const auto &Device : hContext->getDevices()) {

source/adapters/cuda/memory.hpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ struct SurfaceMem {
199199
CUDA_ARRAY3D_DESCRIPTOR ArrayDesc;
200200
size_t PixelTypeSizeBytes;
201201
void *HostPtr;
202+
ur_result_t error = UR_RESULT_SUCCESS;
202203

203204
SurfaceMem(ur_context_handle_t Context, ur_mem_handle_t OuterMemStruct,
204205
ur_image_format_t ImageFormat, ur_image_desc_t ImageDesc,
@@ -233,6 +234,7 @@ struct SurfaceMem {
233234
ArrayDesc.Format = CU_AD_FORMAT_UNSIGNED_INT8;
234235
PixelTypeSizeBytes = 1;
235236
break;
237+
case UR_IMAGE_CHANNEL_TYPE_SNORM_INT8:
236238
case UR_IMAGE_CHANNEL_TYPE_SIGNED_INT8:
237239
ArrayDesc.Format = CU_AD_FORMAT_SIGNED_INT8;
238240
PixelTypeSizeBytes = 1;
@@ -242,6 +244,7 @@ struct SurfaceMem {
242244
ArrayDesc.Format = CU_AD_FORMAT_UNSIGNED_INT16;
243245
PixelTypeSizeBytes = 2;
244246
break;
247+
case UR_IMAGE_CHANNEL_TYPE_SNORM_INT16:
245248
case UR_IMAGE_CHANNEL_TYPE_SIGNED_INT16:
246249
ArrayDesc.Format = CU_AD_FORMAT_SIGNED_INT16;
247250
PixelTypeSizeBytes = 2;
@@ -263,8 +266,7 @@ struct SurfaceMem {
263266
PixelTypeSizeBytes = 4;
264267
break;
265268
default:
266-
detail::ur::die(
267-
"urMemImageCreate given unsupported image_channel_data_type");
269+
break;
268270
}
269271
}
270272

source/adapters/hip/memory.cpp

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,28 @@ size_t imageElementByteSize(hipArray_Format ArrayFormat) {
3232
return 0;
3333
}
3434

35+
ur_result_t
36+
checkSupportedImageChannelType(ur_image_channel_type_t ImageChannelType) {
37+
switch (ImageChannelType) {
38+
case UR_IMAGE_CHANNEL_TYPE_SNORM_INT8:
39+
case UR_IMAGE_CHANNEL_TYPE_SNORM_INT16:
40+
case UR_IMAGE_CHANNEL_TYPE_UNORM_INT8:
41+
case UR_IMAGE_CHANNEL_TYPE_UNSIGNED_INT8:
42+
case UR_IMAGE_CHANNEL_TYPE_SIGNED_INT8:
43+
case UR_IMAGE_CHANNEL_TYPE_UNORM_INT16:
44+
case UR_IMAGE_CHANNEL_TYPE_UNSIGNED_INT16:
45+
case UR_IMAGE_CHANNEL_TYPE_SIGNED_INT16:
46+
case UR_IMAGE_CHANNEL_TYPE_HALF_FLOAT:
47+
case UR_IMAGE_CHANNEL_TYPE_UNSIGNED_INT32:
48+
case UR_IMAGE_CHANNEL_TYPE_SIGNED_INT32:
49+
case UR_IMAGE_CHANNEL_TYPE_FLOAT:
50+
return UR_RESULT_SUCCESS;
51+
default:
52+
return UR_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT;
53+
}
54+
return UR_RESULT_SUCCESS;
55+
}
56+
3557
/// Decreases the reference count of the Mem object.
3658
/// If this is zero, calls the relevant HIP Free function
3759
/// \return UR_RESULT_SUCCESS unless deallocation error
@@ -339,7 +361,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemImageCreate(
339361

340362
UR_ASSERT(pImageDesc->stype == UR_STRUCTURE_TYPE_IMAGE_DESC,
341363
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
342-
UR_ASSERT(pImageDesc->type <= UR_MEM_TYPE_IMAGE1D_BUFFER,
364+
UR_ASSERT(pImageDesc->type <= UR_MEM_TYPE_IMAGE1D_ARRAY,
343365
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
344366
UR_ASSERT(pImageDesc->numMipLevel == 0,
345367
UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR);
@@ -355,7 +377,9 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemImageCreate(
355377
// We only support RBGA channel order
356378
// TODO: check SYCL CTS and spec. May also have to support BGRA
357379
UR_ASSERT(pImageFormat->channelOrder == UR_IMAGE_CHANNEL_ORDER_RGBA,
358-
UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION);
380+
UR_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT);
381+
382+
UR_CHECK_ERROR(checkSupportedImageChannelType(pImageFormat->channelType));
359383

360384
auto URMemObj = std::unique_ptr<ur_mem_handle_t_>(
361385
new ur_mem_handle_t_{hContext, flags, *pImageFormat, *pImageDesc, pHost});

source/adapters/hip/memory.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ struct SurfaceMem {
224224
ArrayDesc.Format = HIP_AD_FORMAT_UNSIGNED_INT8;
225225
PixelTypeSizeBytes = 1;
226226
break;
227+
case UR_IMAGE_CHANNEL_TYPE_SNORM_INT8:
227228
case UR_IMAGE_CHANNEL_TYPE_SIGNED_INT8:
228229
ArrayDesc.Format = HIP_AD_FORMAT_SIGNED_INT8;
229230
PixelTypeSizeBytes = 1;
@@ -233,6 +234,7 @@ struct SurfaceMem {
233234
ArrayDesc.Format = HIP_AD_FORMAT_UNSIGNED_INT16;
234235
PixelTypeSizeBytes = 2;
235236
break;
237+
case UR_IMAGE_CHANNEL_TYPE_SNORM_INT16:
236238
case UR_IMAGE_CHANNEL_TYPE_SIGNED_INT16:
237239
ArrayDesc.Format = HIP_AD_FORMAT_SIGNED_INT16;
238240
PixelTypeSizeBytes = 2;

0 commit comments

Comments
 (0)