Skip to content

Commit 4f10526

Browse files
authored
Merge pull request #1409 from omarahmed1111/Add-CTS-tests-for-image-format
[CTS] Add CTS tests for urMemImageCreate entry-point
2 parents 0f118d7 + 92fce2e commit 4f10526

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
@@ -1454,9 +1454,6 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_result_t value) {
14541454
case UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR:
14551455
os << "UR_RESULT_ERROR_INVALID_IMAGE_FORMAT_DESCRIPTOR";
14561456
break;
1457-
case UR_RESULT_ERROR_IMAGE_FORMAT_NOT_SUPPORTED:
1458-
os << "UR_RESULT_ERROR_IMAGE_FORMAT_NOT_SUPPORTED";
1459-
break;
14601457
case UR_RESULT_ERROR_MEM_OBJECT_ALLOCATION_FAILURE:
14611458
os << "UR_RESULT_ERROR_MEM_OBJECT_ALLOCATION_FAILURE";
14621459
break;
@@ -5466,9 +5463,6 @@ inline ur_result_t printFlag<ur_mem_flag_t>(std::ostream &os, uint32_t flag) {
54665463
/// std::ostream &
54675464
inline std::ostream &operator<<(std::ostream &os, enum ur_mem_type_t value) {
54685465
switch (value) {
5469-
case UR_MEM_TYPE_BUFFER:
5470-
os << "UR_MEM_TYPE_BUFFER";
5471-
break;
54725466
case UR_MEM_TYPE_IMAGE2D:
54735467
os << "UR_MEM_TYPE_IMAGE2D";
54745468
break;
@@ -5484,9 +5478,6 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_mem_type_t value) {
54845478
case UR_MEM_TYPE_IMAGE1D_ARRAY:
54855479
os << "UR_MEM_TYPE_IMAGE1D_ARRAY";
54865480
break;
5487-
case UR_MEM_TYPE_IMAGE1D_BUFFER:
5488-
os << "UR_MEM_TYPE_IMAGE1D_BUFFER";
5489-
break;
54905481
case UR_MEM_TYPE_IMAGE_CUBEMAP_EXP:
54915482
os << "UR_MEM_TYPE_IMAGE_CUBEMAP_EXP";
54925483
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
@@ -185,6 +185,7 @@ struct SurfaceMem {
185185
CUDA_ARRAY3D_DESCRIPTOR ArrayDesc;
186186
size_t PixelTypeSizeBytes;
187187
void *HostPtr;
188+
ur_result_t error = UR_RESULT_SUCCESS;
188189

189190
SurfaceMem(ur_context_handle_t Context, ur_mem_handle_t OuterMemStruct,
190191
ur_image_format_t ImageFormat, ur_image_desc_t ImageDesc,
@@ -219,6 +220,7 @@ struct SurfaceMem {
219220
ArrayDesc.Format = CU_AD_FORMAT_UNSIGNED_INT8;
220221
PixelTypeSizeBytes = 1;
221222
break;
223+
case UR_IMAGE_CHANNEL_TYPE_SNORM_INT8:
222224
case UR_IMAGE_CHANNEL_TYPE_SIGNED_INT8:
223225
ArrayDesc.Format = CU_AD_FORMAT_SIGNED_INT8;
224226
PixelTypeSizeBytes = 1;
@@ -228,6 +230,7 @@ struct SurfaceMem {
228230
ArrayDesc.Format = CU_AD_FORMAT_UNSIGNED_INT16;
229231
PixelTypeSizeBytes = 2;
230232
break;
233+
case UR_IMAGE_CHANNEL_TYPE_SNORM_INT16:
231234
case UR_IMAGE_CHANNEL_TYPE_SIGNED_INT16:
232235
ArrayDesc.Format = CU_AD_FORMAT_SIGNED_INT16;
233236
PixelTypeSizeBytes = 2;
@@ -249,8 +252,7 @@ struct SurfaceMem {
249252
PixelTypeSizeBytes = 4;
250253
break;
251254
default:
252-
detail::ur::die(
253-
"urMemImageCreate given unsupported image_channel_data_type");
255+
break;
254256
}
255257
}
256258

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
@@ -210,6 +210,7 @@ struct SurfaceMem {
210210
ArrayDesc.Format = HIP_AD_FORMAT_UNSIGNED_INT8;
211211
PixelTypeSizeBytes = 1;
212212
break;
213+
case UR_IMAGE_CHANNEL_TYPE_SNORM_INT8:
213214
case UR_IMAGE_CHANNEL_TYPE_SIGNED_INT8:
214215
ArrayDesc.Format = HIP_AD_FORMAT_SIGNED_INT8;
215216
PixelTypeSizeBytes = 1;
@@ -219,6 +220,7 @@ struct SurfaceMem {
219220
ArrayDesc.Format = HIP_AD_FORMAT_UNSIGNED_INT16;
220221
PixelTypeSizeBytes = 2;
221222
break;
223+
case UR_IMAGE_CHANNEL_TYPE_SNORM_INT16:
222224
case UR_IMAGE_CHANNEL_TYPE_SIGNED_INT16:
223225
ArrayDesc.Format = HIP_AD_FORMAT_SIGNED_INT16;
224226
PixelTypeSizeBytes = 2;

0 commit comments

Comments
 (0)