Skip to content

Commit 4347e0c

Browse files
authored
Merge pull request #1264 from przemektmalon/przemek/sampled-image-fetch
[Bindless][Exp] Add device queries for sampled image fetch
2 parents 7611542 + 21f023f commit 4347e0c

File tree

9 files changed

+369
-199
lines changed

9 files changed

+369
-199
lines changed

include/ur_api.h

Lines changed: 208 additions & 196 deletions
Large diffs are not rendered by default.

include/ur_print.hpp

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2562,6 +2562,24 @@ inline std::ostream &operator<<(std::ostream &os, enum ur_device_info_t value) {
25622562
case UR_DEVICE_INFO_CUBEMAP_SEAMLESS_FILTERING_SUPPORT_EXP:
25632563
os << "UR_DEVICE_INFO_CUBEMAP_SEAMLESS_FILTERING_SUPPORT_EXP";
25642564
break;
2565+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_USM_EXP:
2566+
os << "UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_USM_EXP";
2567+
break;
2568+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_EXP:
2569+
os << "UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_EXP";
2570+
break;
2571+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_USM_EXP:
2572+
os << "UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_USM_EXP";
2573+
break;
2574+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_EXP:
2575+
os << "UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_EXP";
2576+
break;
2577+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_USM_EXP:
2578+
os << "UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_USM_EXP";
2579+
break;
2580+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_EXP:
2581+
os << "UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_EXP";
2582+
break;
25652583
default:
25662584
os << "unknown enumerator";
25672585
break;
@@ -4190,6 +4208,78 @@ inline ur_result_t printTagged(std::ostream &os, const void *ptr, ur_device_info
41904208

41914209
os << ")";
41924210
} break;
4211+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_USM_EXP: {
4212+
const ur_bool_t *tptr = (const ur_bool_t *)ptr;
4213+
if (sizeof(ur_bool_t) > size) {
4214+
os << "invalid size (is: " << size << ", expected: >=" << sizeof(ur_bool_t) << ")";
4215+
return UR_RESULT_ERROR_INVALID_SIZE;
4216+
}
4217+
os << (const void *)(tptr) << " (";
4218+
4219+
os << *tptr;
4220+
4221+
os << ")";
4222+
} break;
4223+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_EXP: {
4224+
const ur_bool_t *tptr = (const ur_bool_t *)ptr;
4225+
if (sizeof(ur_bool_t) > size) {
4226+
os << "invalid size (is: " << size << ", expected: >=" << sizeof(ur_bool_t) << ")";
4227+
return UR_RESULT_ERROR_INVALID_SIZE;
4228+
}
4229+
os << (const void *)(tptr) << " (";
4230+
4231+
os << *tptr;
4232+
4233+
os << ")";
4234+
} break;
4235+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_USM_EXP: {
4236+
const ur_bool_t *tptr = (const ur_bool_t *)ptr;
4237+
if (sizeof(ur_bool_t) > size) {
4238+
os << "invalid size (is: " << size << ", expected: >=" << sizeof(ur_bool_t) << ")";
4239+
return UR_RESULT_ERROR_INVALID_SIZE;
4240+
}
4241+
os << (const void *)(tptr) << " (";
4242+
4243+
os << *tptr;
4244+
4245+
os << ")";
4246+
} break;
4247+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_EXP: {
4248+
const ur_bool_t *tptr = (const ur_bool_t *)ptr;
4249+
if (sizeof(ur_bool_t) > size) {
4250+
os << "invalid size (is: " << size << ", expected: >=" << sizeof(ur_bool_t) << ")";
4251+
return UR_RESULT_ERROR_INVALID_SIZE;
4252+
}
4253+
os << (const void *)(tptr) << " (";
4254+
4255+
os << *tptr;
4256+
4257+
os << ")";
4258+
} break;
4259+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_USM_EXP: {
4260+
const ur_bool_t *tptr = (const ur_bool_t *)ptr;
4261+
if (sizeof(ur_bool_t) > size) {
4262+
os << "invalid size (is: " << size << ", expected: >=" << sizeof(ur_bool_t) << ")";
4263+
return UR_RESULT_ERROR_INVALID_SIZE;
4264+
}
4265+
os << (const void *)(tptr) << " (";
4266+
4267+
os << *tptr;
4268+
4269+
os << ")";
4270+
} break;
4271+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_EXP: {
4272+
const ur_bool_t *tptr = (const ur_bool_t *)ptr;
4273+
if (sizeof(ur_bool_t) > size) {
4274+
os << "invalid size (is: " << size << ", expected: >=" << sizeof(ur_bool_t) << ")";
4275+
return UR_RESULT_ERROR_INVALID_SIZE;
4276+
}
4277+
os << (const void *)(tptr) << " (";
4278+
4279+
os << *tptr;
4280+
4281+
os << ")";
4282+
} break;
41934283
default:
41944284
os << "unknown enumerator";
41954285
return UR_RESULT_ERROR_INVALID_ENUMERATION;

scripts/core/EXP-BINDLESS-IMAGES.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,12 @@ Enums
9191
* ${X}_DEVICE_INFO_INTEROP_SEMAPHORE_EXPORT_SUPPORT_EXP
9292
* ${X}_DEVICE_INFO_CUBEMAP_SUPPORT_EXP
9393
* ${X}_DEVICE_INFO_CUBEMAP_SEAMLESS_FILTERING_SUPPORT_EXP
94+
* ${X}_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_USM_EXP
95+
* ${X}_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_EXP
96+
* ${X}_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_USM_EXP
97+
* ${X}_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_EXP
98+
* ${X}_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_USM_EXP
99+
* ${X}_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_EXP
94100

95101
* ${x}_command_t
96102
* ${X}_COMMAND_INTEROP_SEMAPHORE_WAIT_EXP
@@ -198,6 +204,8 @@ Changelog
198204
+------------------------------------------------------------------------+
199205
| 10.0 | Added cubemap image type, sampling properties, and device |
200206
| | queries. |
207+
+------------------------------------------------------------------------+
208+
| 11.0 | Added device queries for sampled image fetch capabilities. |
201209
+----------+-------------------------------------------------------------+
202210

203211
Contributors

scripts/core/exp-bindless-images.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,24 @@ etors:
9292
- name: CUBEMAP_SEAMLESS_FILTERING_SUPPORT_EXP
9393
value: "0x2011"
9494
desc: "[$x_bool_t] returns true if the device supports sampling cubemapped images across face boundaries"
95+
- name: BINDLESS_SAMPLED_IMAGE_FETCH_1D_USM_EXP
96+
value: "0x2012"
97+
desc: "[$x_bool_t] returns true if the device is capable of fetching USM backed 1D sampled image data."
98+
- name: BINDLESS_SAMPLED_IMAGE_FETCH_1D_EXP
99+
value: "0x2013"
100+
desc: "[$x_bool_t] returns true if the device is capable of fetching non-USM backed 1D sampled image data."
101+
- name: BINDLESS_SAMPLED_IMAGE_FETCH_2D_USM_EXP
102+
value: "0x2014"
103+
desc: "[$x_bool_t] returns true if the device is capable of fetching USM backed 2D sampled image data."
104+
- name: BINDLESS_SAMPLED_IMAGE_FETCH_2D_EXP
105+
value: "0x2015"
106+
desc: "[$x_bool_t] returns true if the device is capable of fetching non-USM backed 2D sampled image data."
107+
- name: BINDLESS_SAMPLED_IMAGE_FETCH_3D_USM_EXP
108+
value: "0x2016"
109+
desc: "[$x_bool_t] returns true if the device is capable of fetching USM backed 3D sampled image data."
110+
- name: BINDLESS_SAMPLED_IMAGE_FETCH_3D_EXP
111+
value: "0x2017"
112+
desc: "[$x_bool_t] returns true if the device is capable of fetching non-USM backed 3D sampled image data."
95113
--- #--------------------------------------------------------------------------
96114
type: enum
97115
extend: true

source/adapters/cuda/device.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -926,6 +926,30 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
926926
// CUDA supports cubemap seamless filtering.
927927
return ReturnValue(true);
928928
}
929+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_USM_EXP: {
930+
// CUDA does support fetching 1D USM sampled image data.
931+
return ReturnValue(true);
932+
}
933+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_EXP: {
934+
// CUDA does not support fetching 1D non-USM sampled image data.
935+
return ReturnValue(false);
936+
}
937+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_USM_EXP: {
938+
// CUDA does support fetching 2D USM sampled image data.
939+
return ReturnValue(true);
940+
}
941+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_EXP: {
942+
// CUDA does support fetching 2D non-USM sampled image data.
943+
return ReturnValue(true);
944+
}
945+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_USM_EXP: {
946+
// CUDA does not support 3D USM sampled textures
947+
return ReturnValue(false);
948+
}
949+
case UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_EXP: {
950+
// CUDA does support fetching 3D non-USM sampled image data.
951+
return ReturnValue(true);
952+
}
929953
case UR_DEVICE_INFO_DEVICE_ID: {
930954
int Value = 0;
931955
UR_CHECK_ERROR(cuDeviceGetAttribute(

source/loader/layers/validation/ur_valddi.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ __urdlllocal ur_result_t UR_APICALL urDeviceGetInfo(
496496
return UR_RESULT_ERROR_INVALID_NULL_POINTER;
497497
}
498498

499-
if (UR_DEVICE_INFO_CUBEMAP_SEAMLESS_FILTERING_SUPPORT_EXP < propName) {
499+
if (UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_EXP < propName) {
500500
return UR_RESULT_ERROR_INVALID_ENUMERATION;
501501
}
502502

source/loader/ur_libapi.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ ur_result_t UR_APICALL urDeviceGetSelected(
842842
/// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE
843843
/// + `NULL == hDevice`
844844
/// - ::UR_RESULT_ERROR_INVALID_ENUMERATION
845-
/// + `::UR_DEVICE_INFO_CUBEMAP_SEAMLESS_FILTERING_SUPPORT_EXP < propName`
845+
/// + `::UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_EXP < propName`
846846
/// - ::UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION
847847
/// + If `propName` is not supported by the adapter.
848848
/// - ::UR_RESULT_ERROR_INVALID_SIZE

source/ur_api.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -736,7 +736,7 @@ ur_result_t UR_APICALL urDeviceGetSelected(
736736
/// - ::UR_RESULT_ERROR_INVALID_NULL_HANDLE
737737
/// + `NULL == hDevice`
738738
/// - ::UR_RESULT_ERROR_INVALID_ENUMERATION
739-
/// + `::UR_DEVICE_INFO_CUBEMAP_SEAMLESS_FILTERING_SUPPORT_EXP < propName`
739+
/// + `::UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_EXP < propName`
740740
/// - ::UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION
741741
/// + If `propName` is not supported by the adapter.
742742
/// - ::UR_RESULT_ERROR_INVALID_SIZE

tools/urinfo/urinfo.hpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,5 +383,23 @@ inline void printDeviceInfos(ur_device_handle_t hDevice,
383383
std::cout << prefix;
384384
printDeviceInfo<ur_bool_t>(
385385
hDevice, UR_DEVICE_INFO_CUBEMAP_SEAMLESS_FILTERING_SUPPORT_EXP);
386+
std::cout << prefix;
387+
printDeviceInfo<ur_bool_t>(
388+
hDevice, UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_USM_EXP);
389+
std::cout << prefix;
390+
printDeviceInfo<ur_bool_t>(
391+
hDevice, UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_1D_EXP);
392+
std::cout << prefix;
393+
printDeviceInfo<ur_bool_t>(
394+
hDevice, UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_USM_EXP);
395+
std::cout << prefix;
396+
printDeviceInfo<ur_bool_t>(
397+
hDevice, UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_2D_EXP);
398+
std::cout << prefix;
399+
printDeviceInfo<ur_bool_t>(
400+
hDevice, UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_USM_EXP);
401+
std::cout << prefix;
402+
printDeviceInfo<ur_bool_t>(
403+
hDevice, UR_DEVICE_INFO_BINDLESS_SAMPLED_IMAGE_FETCH_3D_EXP);
386404
}
387405
} // namespace urinfo

0 commit comments

Comments
 (0)