Skip to content

Commit a9c2bef

Browse files
committed
Implement adapter instance handles
1 parent 016b3c3 commit a9c2bef

34 files changed

+2156
-514
lines changed

examples/hello_world/hello_world.cpp

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,36 @@ int main(int argc, char *argv[]) {
2626
}
2727
std::cout << "Platform initialized.\n";
2828

29+
uint32_t adapterCount = 0;
30+
std::vector<ur_adapter_handle_t> adapters;
2931
uint32_t platformCount = 0;
3032
std::vector<ur_platform_handle_t> platforms;
3133

32-
status = urPlatformGet(1, nullptr, &platformCount);
34+
status = urAdapterGet(0, nullptr, &adapterCount);
35+
if (status != UR_RESULT_SUCCESS) {
36+
std::cout << "urAdapterGet failed with return code: " << status
37+
<< std::endl;
38+
return 1;
39+
}
40+
adapters.resize(adapterCount);
41+
status = urAdapterGet(adapterCount, adapters.data(), nullptr);
42+
if (status != UR_RESULT_SUCCESS) {
43+
std::cout << "urAdapterGet failed with return code: " << status
44+
<< std::endl;
45+
return 1;
46+
}
47+
48+
status = urPlatformGet(adapters.data(), adapterCount, 1, nullptr,
49+
&platformCount);
3350
if (status != UR_RESULT_SUCCESS) {
3451
std::cout << "urPlatformGet failed with return code: " << status
3552
<< std::endl;
3653
goto out;
3754
}
3855

3956
platforms.resize(platformCount);
40-
status = urPlatformGet(platformCount, platforms.data(), nullptr);
57+
status = urPlatformGet(adapters.data(), adapterCount, platformCount,
58+
platforms.data(), nullptr);
4159
if (status != UR_RESULT_SUCCESS) {
4260
std::cout << "urPlatformGet failed with return code: " << status
4361
<< std::endl;
@@ -98,6 +116,9 @@ int main(int argc, char *argv[]) {
98116
}
99117

100118
out:
119+
for (auto adapter : adapters) {
120+
urAdapterRelease(adapter);
121+
}
101122
urTearDown(nullptr);
102123
return status == UR_RESULT_SUCCESS ? 0 : 1;
103124
}

include/ur.py

Lines changed: 83 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ class ur_function_v(IntEnum):
165165
BINDLESS_IMAGES_DESTROY_EXTERNAL_SEMAPHORE_EXP = 147## Enumerator for ::urBindlessImagesDestroyExternalSemaphoreExp
166166
BINDLESS_IMAGES_WAIT_EXTERNAL_SEMAPHORE_EXP = 148 ## Enumerator for ::urBindlessImagesWaitExternalSemaphoreExp
167167
BINDLESS_IMAGES_SIGNAL_EXTERNAL_SEMAPHORE_EXP = 149 ## Enumerator for ::urBindlessImagesSignalExternalSemaphoreExp
168-
PLATFORM_GET_LAST_ERROR = 150 ## Enumerator for ::urPlatformGetLastError
169168
ENQUEUE_USM_FILL_2D = 151 ## Enumerator for ::urEnqueueUSMFill2D
170169
ENQUEUE_USM_MEMCPY_2D = 152 ## Enumerator for ::urEnqueueUSMMemcpy2D
171170
VIRTUAL_MEM_GRANULARITY_GET_INFO = 153 ## Enumerator for ::urVirtualMemGranularityGetInfo
@@ -192,6 +191,11 @@ class ur_function_v(IntEnum):
192191
LOADER_CONFIG_RETAIN = 174 ## Enumerator for ::urLoaderConfigRetain
193192
LOADER_CONFIG_GET_INFO = 175 ## Enumerator for ::urLoaderConfigGetInfo
194193
LOADER_CONFIG_ENABLE_LAYER = 176 ## Enumerator for ::urLoaderConfigEnableLayer
194+
ADAPTER_RELEASE = 177 ## Enumerator for ::urAdapterRelease
195+
ADAPTER_GET = 178 ## Enumerator for ::urAdapterGet
196+
ADAPTER_RETAIN = 179 ## Enumerator for ::urAdapterRetain
197+
ADAPTER_GET_LAST_ERROR = 180 ## Enumerator for ::urAdapterGetLastError
198+
ADAPTER_GET_INFO = 181 ## Enumerator for ::urAdapterGetInfo
195199

196200
class ur_function_t(c_int):
197201
def __str__(self):
@@ -284,6 +288,11 @@ class ur_bool_t(c_ubyte):
284288
class ur_loader_config_handle_t(c_void_p):
285289
pass
286290

291+
###############################################################################
292+
## @brief Handle of an adapter instance
293+
class ur_adapter_handle_t(c_void_p):
294+
pass
295+
287296
###############################################################################
288297
## @brief Handle of a platform instance
289298
class ur_platform_handle_t(c_void_p):
@@ -497,6 +506,31 @@ def __str__(self):
497506
return str(ur_loader_config_info_v(self.value))
498507

499508

509+
###############################################################################
510+
## @brief Supported adapter info
511+
class ur_adapter_info_v(IntEnum):
512+
ADAPTER_BACKEND = 0 ## [::ur_adapter_backend_t] Identifies the native backend supported by
513+
## the adapter.
514+
515+
class ur_adapter_info_t(c_int):
516+
def __str__(self):
517+
return str(ur_adapter_info_v(self.value))
518+
519+
520+
###############################################################################
521+
## @brief Identifies backend of the adapter
522+
class ur_adapter_backend_v(IntEnum):
523+
UNKNOWN = 0 ## The backend is not a recognized one
524+
LEVEL_ZERO = 1 ## The backend is Level Zero
525+
OPENCL = 2 ## The backend is OpenCL
526+
CUDA = 3 ## The backend is CUDA
527+
HIP = 4 ## The backend is HIP
528+
529+
class ur_adapter_backend_t(c_int):
530+
def __str__(self):
531+
return str(ur_adapter_backend_v(self.value))
532+
533+
500534
###############################################################################
501535
## @brief Supported platform info
502536
class ur_platform_info_v(IntEnum):
@@ -2228,9 +2262,9 @@ class ur_loader_config_dditable_t(Structure):
22282262
###############################################################################
22292263
## @brief Function-pointer for urPlatformGet
22302264
if __use_win_types:
2231-
_urPlatformGet_t = WINFUNCTYPE( ur_result_t, c_ulong, POINTER(ur_platform_handle_t), POINTER(c_ulong) )
2265+
_urPlatformGet_t = WINFUNCTYPE( ur_result_t, POINTER(ur_adapter_handle_t), c_ulong, c_ulong, POINTER(ur_platform_handle_t), POINTER(c_ulong) )
22322266
else:
2233-
_urPlatformGet_t = CFUNCTYPE( ur_result_t, c_ulong, POINTER(ur_platform_handle_t), POINTER(c_ulong) )
2267+
_urPlatformGet_t = CFUNCTYPE( ur_result_t, POINTER(ur_adapter_handle_t), c_ulong, c_ulong, POINTER(ur_platform_handle_t), POINTER(c_ulong) )
22342268

22352269
###############################################################################
22362270
## @brief Function-pointer for urPlatformGetInfo
@@ -2253,13 +2287,6 @@ class ur_loader_config_dditable_t(Structure):
22532287
else:
22542288
_urPlatformCreateWithNativeHandle_t = CFUNCTYPE( ur_result_t, ur_native_handle_t, POINTER(ur_platform_native_properties_t), POINTER(ur_platform_handle_t) )
22552289

2256-
###############################################################################
2257-
## @brief Function-pointer for urPlatformGetLastError
2258-
if __use_win_types:
2259-
_urPlatformGetLastError_t = WINFUNCTYPE( ur_result_t, ur_platform_handle_t, POINTER(c_char_p), POINTER(c_long) )
2260-
else:
2261-
_urPlatformGetLastError_t = CFUNCTYPE( ur_result_t, ur_platform_handle_t, POINTER(c_char_p), POINTER(c_long) )
2262-
22632290
###############################################################################
22642291
## @brief Function-pointer for urPlatformGetApiVersion
22652292
if __use_win_types:
@@ -2283,7 +2310,6 @@ class ur_platform_dditable_t(Structure):
22832310
("pfnGetInfo", c_void_p), ## _urPlatformGetInfo_t
22842311
("pfnGetNativeHandle", c_void_p), ## _urPlatformGetNativeHandle_t
22852312
("pfnCreateWithNativeHandle", c_void_p), ## _urPlatformCreateWithNativeHandle_t
2286-
("pfnGetLastError", c_void_p), ## _urPlatformGetLastError_t
22872313
("pfnGetApiVersion", c_void_p), ## _urPlatformGetApiVersion_t
22882314
("pfnGetBackendOption", c_void_p) ## _urPlatformGetBackendOption_t
22892315
]
@@ -3520,13 +3546,53 @@ class ur_usm_p2p_exp_dditable_t(Structure):
35203546
else:
35213547
_urTearDown_t = CFUNCTYPE( ur_result_t, c_void_p )
35223548

3549+
###############################################################################
3550+
## @brief Function-pointer for urAdapterGet
3551+
if __use_win_types:
3552+
_urAdapterGet_t = WINFUNCTYPE( ur_result_t, c_ulong, POINTER(ur_adapter_handle_t), POINTER(c_ulong) )
3553+
else:
3554+
_urAdapterGet_t = CFUNCTYPE( ur_result_t, c_ulong, POINTER(ur_adapter_handle_t), POINTER(c_ulong) )
3555+
3556+
###############################################################################
3557+
## @brief Function-pointer for urAdapterRelease
3558+
if __use_win_types:
3559+
_urAdapterRelease_t = WINFUNCTYPE( ur_result_t, ur_adapter_handle_t )
3560+
else:
3561+
_urAdapterRelease_t = CFUNCTYPE( ur_result_t, ur_adapter_handle_t )
3562+
3563+
###############################################################################
3564+
## @brief Function-pointer for urAdapterRetain
3565+
if __use_win_types:
3566+
_urAdapterRetain_t = WINFUNCTYPE( ur_result_t, ur_adapter_handle_t )
3567+
else:
3568+
_urAdapterRetain_t = CFUNCTYPE( ur_result_t, ur_adapter_handle_t )
3569+
3570+
###############################################################################
3571+
## @brief Function-pointer for urAdapterGetLastError
3572+
if __use_win_types:
3573+
_urAdapterGetLastError_t = WINFUNCTYPE( ur_result_t, ur_adapter_handle_t, POINTER(c_char_p), POINTER(c_long) )
3574+
else:
3575+
_urAdapterGetLastError_t = CFUNCTYPE( ur_result_t, ur_adapter_handle_t, POINTER(c_char_p), POINTER(c_long) )
3576+
3577+
###############################################################################
3578+
## @brief Function-pointer for urAdapterGetInfo
3579+
if __use_win_types:
3580+
_urAdapterGetInfo_t = WINFUNCTYPE( ur_result_t, ur_adapter_handle_t, ur_adapter_info_t, c_size_t, c_void_p, POINTER(c_size_t) )
3581+
else:
3582+
_urAdapterGetInfo_t = CFUNCTYPE( ur_result_t, ur_adapter_handle_t, ur_adapter_info_t, c_size_t, c_void_p, POINTER(c_size_t) )
3583+
35233584

35243585
###############################################################################
35253586
## @brief Table of Global functions pointers
35263587
class ur_global_dditable_t(Structure):
35273588
_fields_ = [
35283589
("pfnInit", c_void_p), ## _urInit_t
3529-
("pfnTearDown", c_void_p) ## _urTearDown_t
3590+
("pfnTearDown", c_void_p), ## _urTearDown_t
3591+
("pfnAdapterGet", c_void_p), ## _urAdapterGet_t
3592+
("pfnAdapterRelease", c_void_p), ## _urAdapterRelease_t
3593+
("pfnAdapterRetain", c_void_p), ## _urAdapterRetain_t
3594+
("pfnAdapterGetLastError", c_void_p), ## _urAdapterGetLastError_t
3595+
("pfnAdapterGetInfo", c_void_p) ## _urAdapterGetInfo_t
35303596
]
35313597

35323598
###############################################################################
@@ -3723,7 +3789,6 @@ def __init__(self, version : ur_api_version_t):
37233789
self.urPlatformGetInfo = _urPlatformGetInfo_t(self.__dditable.Platform.pfnGetInfo)
37243790
self.urPlatformGetNativeHandle = _urPlatformGetNativeHandle_t(self.__dditable.Platform.pfnGetNativeHandle)
37253791
self.urPlatformCreateWithNativeHandle = _urPlatformCreateWithNativeHandle_t(self.__dditable.Platform.pfnCreateWithNativeHandle)
3726-
self.urPlatformGetLastError = _urPlatformGetLastError_t(self.__dditable.Platform.pfnGetLastError)
37273792
self.urPlatformGetApiVersion = _urPlatformGetApiVersion_t(self.__dditable.Platform.pfnGetApiVersion)
37283793
self.urPlatformGetBackendOption = _urPlatformGetBackendOption_t(self.__dditable.Platform.pfnGetBackendOption)
37293794

@@ -4003,6 +4068,11 @@ def __init__(self, version : ur_api_version_t):
40034068
# attach function interface to function address
40044069
self.urInit = _urInit_t(self.__dditable.Global.pfnInit)
40054070
self.urTearDown = _urTearDown_t(self.__dditable.Global.pfnTearDown)
4071+
self.urAdapterGet = _urAdapterGet_t(self.__dditable.Global.pfnAdapterGet)
4072+
self.urAdapterRelease = _urAdapterRelease_t(self.__dditable.Global.pfnAdapterRelease)
4073+
self.urAdapterRetain = _urAdapterRetain_t(self.__dditable.Global.pfnAdapterRetain)
4074+
self.urAdapterGetLastError = _urAdapterGetLastError_t(self.__dditable.Global.pfnAdapterGetLastError)
4075+
self.urAdapterGetInfo = _urAdapterGetInfo_t(self.__dditable.Global.pfnAdapterGetInfo)
40064076

40074077
# call driver to get function pointers
40084078
VirtualMem = ur_virtual_mem_dditable_t()

0 commit comments

Comments
 (0)