Skip to content

Commit 573b206

Browse files
committed
Move urMemImageGetInfo success test from a switch to individual test.
Added implementation details to OpenCL adapter for processing image format structs. Added a couple missing enums to spec for ur_image_info_t and added CTS tests for these.
1 parent 9e48f54 commit 573b206

File tree

11 files changed

+400
-132
lines changed

11 files changed

+400
-132
lines changed

include/ur_api.h

+12-9
Original file line numberDiff line numberDiff line change
@@ -2595,13 +2595,16 @@ typedef enum ur_image_channel_type_t {
25952595
///////////////////////////////////////////////////////////////////////////////
25962596
/// @brief Image information types
25972597
typedef enum ur_image_info_t {
2598-
UR_IMAGE_INFO_FORMAT = 0, ///< [::ur_image_format_t] image format
2599-
UR_IMAGE_INFO_ELEMENT_SIZE = 1, ///< [size_t] element size
2600-
UR_IMAGE_INFO_ROW_PITCH = 2, ///< [size_t] row pitch
2601-
UR_IMAGE_INFO_SLICE_PITCH = 3, ///< [size_t] slice pitch
2602-
UR_IMAGE_INFO_WIDTH = 4, ///< [size_t] image width
2603-
UR_IMAGE_INFO_HEIGHT = 5, ///< [size_t] image height
2604-
UR_IMAGE_INFO_DEPTH = 6, ///< [size_t] image depth
2598+
UR_IMAGE_INFO_FORMAT = 0, ///< [::ur_image_format_t] image format
2599+
UR_IMAGE_INFO_ELEMENT_SIZE = 1, ///< [size_t] element size
2600+
UR_IMAGE_INFO_ROW_PITCH = 2, ///< [size_t] row pitch
2601+
UR_IMAGE_INFO_SLICE_PITCH = 3, ///< [size_t] slice pitch
2602+
UR_IMAGE_INFO_WIDTH = 4, ///< [size_t] image width
2603+
UR_IMAGE_INFO_HEIGHT = 5, ///< [size_t] image height
2604+
UR_IMAGE_INFO_DEPTH = 6, ///< [size_t] image depth
2605+
UR_IMAGE_INFO_ARRAY_SIZE = 7, ///< [size_t] array size
2606+
UR_IMAGE_INFO_NUM_MIP_LEVELS = 8, ///< [size_t] number of MIP levels
2607+
UR_IMAGE_INFO_NUM_SAMPLES = 9, ///< [size_t] number of samples
26052608
/// @cond
26062609
UR_IMAGE_INFO_FORCE_UINT32 = 0x7fffffff
26072610
/// @endcond
@@ -3055,7 +3058,7 @@ urMemGetInfo(
30553058
/// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE
30563059
/// + `NULL == hMemory`
30573060
/// - ::UR_RESULT_ERROR_INVALID_ENUMERATION
3058-
/// + `::UR_IMAGE_INFO_DEPTH < propName`
3061+
/// + `::UR_IMAGE_INFO_NUM_SAMPLES < propName`
30593062
/// - ::UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION
30603063
/// + If `propName` is not supported by the adapter.
30613064
/// - ::UR_RESULT_ERROR_INVALID_SIZE
@@ -7990,7 +7993,7 @@ urBindlessImagesImageCopyExp(
79907993
/// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE
79917994
/// + `NULL == hContext`
79927995
/// - ::UR_RESULT_ERROR_INVALID_ENUMERATION
7993-
/// + `::UR_IMAGE_INFO_DEPTH < propName`
7996+
/// + `::UR_IMAGE_INFO_NUM_SAMPLES < propName`
79947997
/// - ::UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION
79957998
/// + If `propName` is not supported by the adapter.
79967999
/// - ::UR_RESULT_ERROR_INVALID_SIZE

include/ur_print.hpp

+45
Original file line numberDiff line numberDiff line change
@@ -5954,6 +5954,15 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_image_info_t value) {
59545954
case UR_IMAGE_INFO_DEPTH:
59555955
os << "UR_IMAGE_INFO_DEPTH";
59565956
break;
5957+
case UR_IMAGE_INFO_ARRAY_SIZE:
5958+
os << "UR_IMAGE_INFO_ARRAY_SIZE";
5959+
break;
5960+
case UR_IMAGE_INFO_NUM_MIP_LEVELS:
5961+
os << "UR_IMAGE_INFO_NUM_MIP_LEVELS";
5962+
break;
5963+
case UR_IMAGE_INFO_NUM_SAMPLES:
5964+
os << "UR_IMAGE_INFO_NUM_SAMPLES";
5965+
break;
59575966
default:
59585967
os << "unknown enumerator";
59595968
break;
@@ -6054,6 +6063,42 @@ inline ur_result_t printTagged(std::ostream &os, const void *ptr, ur_image_info_
60546063

60556064
os << ")";
60566065
} break;
6066+
case UR_IMAGE_INFO_ARRAY_SIZE: {
6067+
const size_t *tptr = (const size_t *)ptr;
6068+
if (sizeof(size_t) > size) {
6069+
os << "invalid size (is: " << size << ", expected: >=" << sizeof(size_t) << ")";
6070+
return UR_RESULT_ERROR_INVALID_SIZE;
6071+
}
6072+
os << (const void *)(tptr) << " (";
6073+
6074+
os << *tptr;
6075+
6076+
os << ")";
6077+
} break;
6078+
case UR_IMAGE_INFO_NUM_MIP_LEVELS: {
6079+
const size_t *tptr = (const size_t *)ptr;
6080+
if (sizeof(size_t) > size) {
6081+
os << "invalid size (is: " << size << ", expected: >=" << sizeof(size_t) << ")";
6082+
return UR_RESULT_ERROR_INVALID_SIZE;
6083+
}
6084+
os << (const void *)(tptr) << " (";
6085+
6086+
os << *tptr;
6087+
6088+
os << ")";
6089+
} break;
6090+
case UR_IMAGE_INFO_NUM_SAMPLES: {
6091+
const size_t *tptr = (const size_t *)ptr;
6092+
if (sizeof(size_t) > size) {
6093+
os << "invalid size (is: " << size << ", expected: >=" << sizeof(size_t) << ")";
6094+
return UR_RESULT_ERROR_INVALID_SIZE;
6095+
}
6096+
os << (const void *)(tptr) << " (";
6097+
6098+
os << *tptr;
6099+
6100+
os << ")";
6101+
} break;
60576102
default:
60586103
os << "unknown enumerator";
60596104
return UR_RESULT_ERROR_INVALID_ENUMERATION;

scripts/core/memory.yml

+6
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,12 @@ etors:
160160
desc: "[size_t] image height"
161161
- name: DEPTH
162162
desc: "[size_t] image depth"
163+
- name: ARRAY_SIZE
164+
desc: "[size_t] array size"
165+
- name: NUM_MIP_LEVELS
166+
desc: "[size_t] number of MIP levels"
167+
- name: NUM_SAMPLES
168+
desc: "[size_t] number of samples"
163169
--- #--------------------------------------------------------------------------
164170
type: struct
165171
desc: "Image format including channel layout and data type"

source/adapters/opencl/memory.cpp

+99
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,92 @@
1010

1111
#include "common.hpp"
1212

13+
#include <unordered_map>
14+
15+
const std::unordered_map<ur_image_channel_order_t, cl_channel_order>
16+
ChannelOrderMap = {
17+
{UR_IMAGE_CHANNEL_ORDER_A, CL_A},
18+
{UR_IMAGE_CHANNEL_ORDER_R, CL_R},
19+
{UR_IMAGE_CHANNEL_ORDER_RG, CL_RG},
20+
{UR_IMAGE_CHANNEL_ORDER_RA, CL_RA},
21+
{UR_IMAGE_CHANNEL_ORDER_RGB, CL_RGB},
22+
{UR_IMAGE_CHANNEL_ORDER_RGBA, CL_RGBA},
23+
{UR_IMAGE_CHANNEL_ORDER_BGRA, CL_BGRA},
24+
{UR_IMAGE_CHANNEL_ORDER_ARGB, CL_ARGB},
25+
{UR_IMAGE_CHANNEL_ORDER_ABGR, CL_ABGR},
26+
{UR_IMAGE_CHANNEL_ORDER_INTENSITY, CL_INTENSITY},
27+
{UR_IMAGE_CHANNEL_ORDER_LUMINANCE, CL_LUMINANCE},
28+
{UR_IMAGE_CHANNEL_ORDER_RX, CL_Rx},
29+
{UR_IMAGE_CHANNEL_ORDER_RGX, CL_RGx},
30+
{UR_IMAGE_CHANNEL_ORDER_RGBX, CL_RGBx},
31+
{UR_IMAGE_CHANNEL_ORDER_SRGBA, CL_sRGBA},
32+
};
33+
34+
const std::unordered_map<ur_image_channel_type_t, cl_channel_type>
35+
ChannelTypeMap = {
36+
{UR_IMAGE_CHANNEL_TYPE_SNORM_INT8, CL_SNORM_INT8},
37+
{UR_IMAGE_CHANNEL_TYPE_SNORM_INT16, CL_SNORM_INT16},
38+
{UR_IMAGE_CHANNEL_TYPE_UNORM_INT8, CL_UNORM_INT8},
39+
{UR_IMAGE_CHANNEL_TYPE_UNORM_INT16, CL_UNORM_INT16},
40+
{UR_IMAGE_CHANNEL_TYPE_UNORM_SHORT_565, CL_UNORM_SHORT_565},
41+
{UR_IMAGE_CHANNEL_TYPE_UNORM_SHORT_555, CL_UNORM_SHORT_555},
42+
{UR_IMAGE_CHANNEL_TYPE_INT_101010, CL_UNORM_INT_101010},
43+
{UR_IMAGE_CHANNEL_TYPE_SIGNED_INT8, CL_SIGNED_INT8},
44+
{UR_IMAGE_CHANNEL_TYPE_SIGNED_INT16, CL_SIGNED_INT16},
45+
{UR_IMAGE_CHANNEL_TYPE_SIGNED_INT32, CL_SIGNED_INT32},
46+
{UR_IMAGE_CHANNEL_TYPE_UNSIGNED_INT8, CL_UNSIGNED_INT8},
47+
{UR_IMAGE_CHANNEL_TYPE_UNSIGNED_INT16, CL_UNSIGNED_INT16},
48+
{UR_IMAGE_CHANNEL_TYPE_UNSIGNED_INT32, CL_UNSIGNED_INT32},
49+
{UR_IMAGE_CHANNEL_TYPE_HALF_FLOAT, CL_HALF_FLOAT},
50+
{UR_IMAGE_CHANNEL_TYPE_FLOAT, CL_FLOAT},
51+
};
52+
53+
cl_image_format mapURImageFormatToCL(const ur_image_format_t &PImageFormat) {
54+
cl_image_format CLImageFormat = {UR_IMAGE_CHANNEL_ORDER_FORCE_UINT32,
55+
UR_IMAGE_CHANNEL_TYPE_FORCE_UINT32};
56+
57+
auto channelOrderIt = ChannelOrderMap.find(PImageFormat.channelOrder);
58+
if (channelOrderIt != ChannelOrderMap.end()) {
59+
CLImageFormat.image_channel_order = channelOrderIt->second;
60+
}
61+
62+
auto channelTypeIt = ChannelTypeMap.find(PImageFormat.channelType);
63+
if (channelTypeIt != ChannelTypeMap.end()) {
64+
CLImageFormat.image_channel_data_type = channelTypeIt->second;
65+
}
66+
67+
return CLImageFormat;
68+
}
69+
70+
ur_image_format_t mapCLImageFormatToUR(const cl_image_format *PImageFormat) {
71+
ur_image_format_t URImageFormat = {UR_IMAGE_CHANNEL_ORDER_FORCE_UINT32,
72+
UR_IMAGE_CHANNEL_TYPE_FORCE_UINT32};
73+
74+
auto reverseChannelOrderIt =
75+
std::find_if(ChannelOrderMap.begin(), ChannelOrderMap.end(),
76+
[PImageFormat](const auto &pair) {
77+
return pair.second == PImageFormat->image_channel_order;
78+
});
79+
if (reverseChannelOrderIt != ChannelOrderMap.end()) {
80+
URImageFormat.channelOrder = reverseChannelOrderIt->first;
81+
}
82+
83+
URImageFormat.channelOrder = (reverseChannelOrderIt != ChannelOrderMap.end())
84+
? reverseChannelOrderIt->first
85+
: UR_IMAGE_CHANNEL_ORDER_FORCE_UINT32;
86+
87+
auto reverseChannelTypeIt = std::find_if(
88+
ChannelTypeMap.begin(), ChannelTypeMap.end(),
89+
[PImageFormat](const auto &pair) {
90+
return pair.second == PImageFormat->image_channel_data_type;
91+
});
92+
if (reverseChannelTypeIt != ChannelTypeMap.end()) {
93+
URImageFormat.channelType = reverseChannelTypeIt->first;
94+
}
95+
96+
return URImageFormat;
97+
}
98+
1399
cl_image_format mapURImageFormatToCL(const ur_image_format_t *PImageFormat) {
14100
cl_image_format CLImageFormat;
15101
switch (PImageFormat->channelOrder) {
@@ -174,6 +260,12 @@ cl_int mapURMemImageInfoToCL(ur_image_info_t URPropName) {
174260
return CL_IMAGE_HEIGHT;
175261
case UR_IMAGE_INFO_DEPTH:
176262
return CL_IMAGE_DEPTH;
263+
case UR_IMAGE_INFO_ARRAY_SIZE:
264+
return CL_IMAGE_DEPTH;
265+
case UR_IMAGE_INFO_NUM_MIP_LEVELS:
266+
return CL_IMAGE_DEPTH;
267+
case UR_IMAGE_INFO_NUM_SAMPLES:
268+
return CL_IMAGE_DEPTH;
177269
default:
178270
return -1;
179271
}
@@ -397,7 +489,14 @@ UR_APIEXPORT ur_result_t UR_APICALL urMemImageGetInfo(ur_mem_handle_t hMemory,
397489
CL_RETURN_ON_FAILURE(ClResult);
398490
if (pPropSizeRet) {
399491
*pPropSizeRet = CheckPropSize;
492+
} else {
493+
if (propName == UR_IMAGE_INFO_FORMAT) {
494+
ur_image_format_t format = mapCLImageFormatToUR(
495+
reinterpret_cast<const cl_image_format *>(pPropValue));
496+
return ReturnValue(format);
497+
}
400498
}
499+
401500
return UR_RESULT_SUCCESS;
402501
}
403502

source/loader/layers/validation/ur_valddi.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1566,7 +1566,7 @@ __urdlllocal ur_result_t UR_APICALL urMemImageGetInfo(
15661566
return UR_RESULT_ERROR_INVALID_NULL_POINTER;
15671567
}
15681568

1569-
if (UR_IMAGE_INFO_DEPTH < propName) {
1569+
if (UR_IMAGE_INFO_NUM_SAMPLES < propName) {
15701570
return UR_RESULT_ERROR_INVALID_ENUMERATION;
15711571
}
15721572

@@ -7456,7 +7456,7 @@ __urdlllocal ur_result_t UR_APICALL urBindlessImagesImageGetInfoExp(
74567456
return UR_RESULT_ERROR_INVALID_NULL_POINTER;
74577457
}
74587458

7459-
if (UR_IMAGE_INFO_DEPTH < propName) {
7459+
if (UR_IMAGE_INFO_NUM_SAMPLES < propName) {
74607460
return UR_RESULT_ERROR_INVALID_ENUMERATION;
74617461
}
74627462
}

source/loader/ur_libapi.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1946,7 +1946,7 @@ ur_result_t UR_APICALL urMemGetInfo(
19461946
/// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE
19471947
/// + `NULL == hMemory`
19481948
/// - ::UR_RESULT_ERROR_INVALID_ENUMERATION
1949-
/// + `::UR_IMAGE_INFO_DEPTH < propName`
1949+
/// + `::UR_IMAGE_INFO_NUM_SAMPLES < propName`
19501950
/// - ::UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION
19511951
/// + If `propName` is not supported by the adapter.
19521952
/// - ::UR_RESULT_ERROR_INVALID_SIZE
@@ -7007,7 +7007,7 @@ ur_result_t UR_APICALL urBindlessImagesImageCopyExp(
70077007
/// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE
70087008
/// + `NULL == hContext`
70097009
/// - ::UR_RESULT_ERROR_INVALID_ENUMERATION
7010-
/// + `::UR_IMAGE_INFO_DEPTH < propName`
7010+
/// + `::UR_IMAGE_INFO_NUM_SAMPLES < propName`
70117011
/// - ::UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION
70127012
/// + If `propName` is not supported by the adapter.
70137013
/// - ::UR_RESULT_ERROR_INVALID_SIZE

source/ur_api.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1686,7 +1686,7 @@ ur_result_t UR_APICALL urMemGetInfo(
16861686
/// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE
16871687
/// + `NULL == hMemory`
16881688
/// - ::UR_RESULT_ERROR_INVALID_ENUMERATION
1689-
/// + `::UR_IMAGE_INFO_DEPTH < propName`
1689+
/// + `::UR_IMAGE_INFO_NUM_SAMPLES < propName`
16901690
/// - ::UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION
16911691
/// + If `propName` is not supported by the adapter.
16921692
/// - ::UR_RESULT_ERROR_INVALID_SIZE
@@ -5981,7 +5981,7 @@ ur_result_t UR_APICALL urBindlessImagesImageCopyExp(
59815981
/// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE
59825982
/// + `NULL == hContext`
59835983
/// - ::UR_RESULT_ERROR_INVALID_ENUMERATION
5984-
/// + `::UR_IMAGE_INFO_DEPTH < propName`
5984+
/// + `::UR_IMAGE_INFO_NUM_SAMPLES < propName`
59855985
/// - ::UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION
59865986
/// + If `propName` is not supported by the adapter.
59875987
/// - ::UR_RESULT_ERROR_INVALID_SIZE
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{{OPT}}urMemBufferMultiQueueMemBufferTest.WriteBack
2+
urMemBufferPartitionWithFlagsTest.Success/*__UR_MEM_FLAG_WRITE_ONLY
3+
urMemBufferPartitionWithFlagsTest.Success/*__UR_MEM_FLAG_READ_ONLY
4+
urMemBufferPartitionTest.InvalidValueCreateType/*
5+
urMemBufferPartitionTest.InvalidValueBufferCreateInfoOutOfBounds/*
6+
{{OPT}}urMemImageCreateWithNativeHandleTest.Success/*
7+
{{OPT}}urMemGetInfoImageTest.SuccessSize/*
8+
{{OPT}}urMemImageCreateTestWithImageFormatParam.Success/*__UR_IMAGE_CHANNEL_ORDER_RGBA__*
9+
10+
# These tests fail in the "Multi device testing" job, but pass in the hardware specific test
11+
{{OPT}}urMemImageCreateTest.InvalidImageDescStype/*
12+
{{OPT}}urMemImageCreateTest.InvalidSize/*
13+
{{OPT}}urMemImageCreateWithHostPtrFlagsTest.Success/*
14+
{{OPT}}urMemImageGetInfoTest.InvalidSizeSmall/*

0 commit comments

Comments
 (0)