Skip to content

Commit 35e88a7

Browse files
authored
Merge pull request #560 from Bensuo/ben/port-command-buffers
[Experimental] Add command-buffers
2 parents 0bc4f7e + 254c52f commit 35e88a7

File tree

16 files changed

+3979
-198
lines changed

16 files changed

+3979
-198
lines changed

include/ur.py

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,9 @@ class ur_result_v(IntEnum):
191191
ERROR_OBJECT_ALLOCATION_FAILURE = 66 ## Objection allocation failure
192192
ERROR_ADAPTER_SPECIFIC = 67 ## An adapter specific warning/error has been reported and can be
193193
## retrieved via the urGetLastResult entry point.
194+
ERROR_INVALID_COMMAND_BUFFER_EXP = 0x1000 ## Invalid Command-Buffer
195+
ERROR_INVALID_COMMAND_BUFFER_SYNC_POINT_EXP = 0x1001## Sync point is not valid for the command-buffer
196+
ERROR_INVALID_COMMAND_BUFFER_SYNC_POINT_WAIT_LIST_EXP = 0x1002 ## Sync point wait list is invalid
194197
ERROR_UNKNOWN = 0x7ffffffe ## Unknown or internal error
195198

196199
class ur_result_t(c_int):
@@ -228,6 +231,7 @@ class ur_structure_type_v(IntEnum):
228231
SAMPLER_NATIVE_PROPERTIES = 24 ## ::ur_sampler_native_properties_t
229232
QUEUE_NATIVE_DESC = 25 ## ::ur_queue_native_desc_t
230233
DEVICE_PARTITION_PROPERTIES = 26 ## ::ur_device_partition_properties_t
234+
EXP_COMMAND_BUFFER_DESC = 27 ## ::ur_exp_command_buffer_desc_t
231235

232236
class ur_structure_type_t(c_int):
233237
def __str__(self):
@@ -1605,6 +1609,7 @@ class ur_command_v(IntEnum):
16051609
DEVICE_GLOBAL_VARIABLE_READ = 24 ## Event created by ::urEnqueueDeviceGlobalVariableRead
16061610
READ_HOST_PIPE = 25 ## Event created by ::urEnqueueReadHostPipe
16071611
WRITE_HOST_PIPE = 26 ## Event created by ::urEnqueueWriteHostPipe
1612+
COMMAND_BUFFER_ENQUEUE_EXP = 27 ## Event created by ::urCommandBufferEnqueueExp
16081613

16091614
class ur_command_t(c_int):
16101615
def __str__(self):
@@ -1810,13 +1815,22 @@ class ur_function_v(IntEnum):
18101815
USM_FREE = 110 ## Enumerator for ::urUSMFree
18111816
USM_GET_MEM_ALLOC_INFO = 111 ## Enumerator for ::urUSMGetMemAllocInfo
18121817
USM_POOL_CREATE = 112 ## Enumerator for ::urUSMPoolCreate
1818+
COMMAND_BUFFER_CREATE_EXP = 113 ## Enumerator for ::urCommandBufferCreateExp
18131819
PLATFORM_GET_BACKEND_OPTION = 114 ## Enumerator for ::urPlatformGetBackendOption
18141820
MEM_BUFFER_CREATE_WITH_NATIVE_HANDLE = 115 ## Enumerator for ::urMemBufferCreateWithNativeHandle
18151821
MEM_IMAGE_CREATE_WITH_NATIVE_HANDLE = 116 ## Enumerator for ::urMemImageCreateWithNativeHandle
18161822
ENQUEUE_WRITE_HOST_PIPE = 117 ## Enumerator for ::urEnqueueWriteHostPipe
18171823
USM_POOL_RETAIN = 118 ## Enumerator for ::urUSMPoolRetain
18181824
USM_POOL_RELEASE = 119 ## Enumerator for ::urUSMPoolRelease
18191825
USM_POOL_GET_INFO = 120 ## Enumerator for ::urUSMPoolGetInfo
1826+
COMMAND_BUFFER_RETAIN_EXP = 121 ## Enumerator for ::urCommandBufferRetainExp
1827+
COMMAND_BUFFER_RELEASE_EXP = 122 ## Enumerator for ::urCommandBufferReleaseExp
1828+
COMMAND_BUFFER_FINALIZE_EXP = 123 ## Enumerator for ::urCommandBufferFinalizeExp
1829+
COMMAND_BUFFER_APPEND_KERNEL_LAUNCH_EXP = 125 ## Enumerator for ::urCommandBufferAppendKernelLaunchExp
1830+
COMMAND_BUFFER_ENQUEUE_EXP = 128 ## Enumerator for ::urCommandBufferEnqueueExp
1831+
COMMAND_BUFFER_APPEND_MEMCPY_USM_EXP = 129 ## Enumerator for ::urCommandBufferAppendMemcpyUSMExp
1832+
COMMAND_BUFFER_APPEND_MEMBUFFER_COPY_EXP = 130 ## Enumerator for ::urCommandBufferAppendMembufferCopyExp
1833+
COMMAND_BUFFER_APPEND_MEMBUFFER_COPY_RECT_EXP = 131 ## Enumerator for ::urCommandBufferAppendMembufferCopyRectExp
18201834

18211835
class ur_function_t(c_int):
18221836
def __str__(self):
@@ -1845,6 +1859,26 @@ def __str__(self):
18451859
return hex(self.value)
18461860

18471861

1862+
###############################################################################
1863+
## @brief Command-Buffer Descriptor Type
1864+
class ur_exp_command_buffer_desc_t(Structure):
1865+
_fields_ = [
1866+
("stype", ur_structure_type_t), ## [in] type of this structure, must be
1867+
## ::UR_STRUCTURE_TYPE_EXP_COMMAND_BUFFER_DESC
1868+
("pNext", c_void_p) ## [in][optional] pointer to extension-specific structure
1869+
]
1870+
1871+
###############################################################################
1872+
## @brief A value that identifies a command inside of a command-buffer, used for
1873+
## defining dependencies between commands in the same command-buffer.
1874+
class ur_exp_command_buffer_sync_point_t(c_ulong):
1875+
pass
1876+
1877+
###############################################################################
1878+
## @brief Handle of Command-Buffer object
1879+
class ur_exp_command_buffer_handle_t(c_void_p):
1880+
pass
1881+
18481882
###############################################################################
18491883
__use_win_types = "Windows" == platform.uname()[0]
18501884

@@ -2695,6 +2729,85 @@ class ur_queue_dditable_t(Structure):
26952729
("pfnFlush", c_void_p) ## _urQueueFlush_t
26962730
]
26972731

2732+
###############################################################################
2733+
## @brief Function-pointer for urCommandBufferCreateExp
2734+
if __use_win_types:
2735+
_urCommandBufferCreateExp_t = WINFUNCTYPE( ur_result_t, ur_context_handle_t, ur_device_handle_t, POINTER(ur_exp_command_buffer_desc_t), POINTER(ur_exp_command_buffer_handle_t) )
2736+
else:
2737+
_urCommandBufferCreateExp_t = CFUNCTYPE( ur_result_t, ur_context_handle_t, ur_device_handle_t, POINTER(ur_exp_command_buffer_desc_t), POINTER(ur_exp_command_buffer_handle_t) )
2738+
2739+
###############################################################################
2740+
## @brief Function-pointer for urCommandBufferRetainExp
2741+
if __use_win_types:
2742+
_urCommandBufferRetainExp_t = WINFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t )
2743+
else:
2744+
_urCommandBufferRetainExp_t = CFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t )
2745+
2746+
###############################################################################
2747+
## @brief Function-pointer for urCommandBufferReleaseExp
2748+
if __use_win_types:
2749+
_urCommandBufferReleaseExp_t = WINFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t )
2750+
else:
2751+
_urCommandBufferReleaseExp_t = CFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t )
2752+
2753+
###############################################################################
2754+
## @brief Function-pointer for urCommandBufferFinalizeExp
2755+
if __use_win_types:
2756+
_urCommandBufferFinalizeExp_t = WINFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t )
2757+
else:
2758+
_urCommandBufferFinalizeExp_t = CFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t )
2759+
2760+
###############################################################################
2761+
## @brief Function-pointer for urCommandBufferAppendKernelLaunchExp
2762+
if __use_win_types:
2763+
_urCommandBufferAppendKernelLaunchExp_t = WINFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t, ur_kernel_handle_t, c_ulong, POINTER(c_size_t), POINTER(c_size_t), POINTER(c_size_t), c_ulong, POINTER(ur_exp_command_buffer_sync_point_t), POINTER(ur_exp_command_buffer_sync_point_t) )
2764+
else:
2765+
_urCommandBufferAppendKernelLaunchExp_t = CFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t, ur_kernel_handle_t, c_ulong, POINTER(c_size_t), POINTER(c_size_t), POINTER(c_size_t), c_ulong, POINTER(ur_exp_command_buffer_sync_point_t), POINTER(ur_exp_command_buffer_sync_point_t) )
2766+
2767+
###############################################################################
2768+
## @brief Function-pointer for urCommandBufferAppendMemcpyUSMExp
2769+
if __use_win_types:
2770+
_urCommandBufferAppendMemcpyUSMExp_t = WINFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t, c_void_p, c_void_p, c_size_t, c_ulong, POINTER(ur_exp_command_buffer_sync_point_t), POINTER(ur_exp_command_buffer_sync_point_t) )
2771+
else:
2772+
_urCommandBufferAppendMemcpyUSMExp_t = CFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t, c_void_p, c_void_p, c_size_t, c_ulong, POINTER(ur_exp_command_buffer_sync_point_t), POINTER(ur_exp_command_buffer_sync_point_t) )
2773+
2774+
###############################################################################
2775+
## @brief Function-pointer for urCommandBufferAppendMembufferCopyExp
2776+
if __use_win_types:
2777+
_urCommandBufferAppendMembufferCopyExp_t = WINFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t, ur_mem_handle_t, ur_mem_handle_t, c_size_t, c_size_t, c_size_t, c_ulong, POINTER(ur_exp_command_buffer_sync_point_t), POINTER(ur_exp_command_buffer_sync_point_t) )
2778+
else:
2779+
_urCommandBufferAppendMembufferCopyExp_t = CFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t, ur_mem_handle_t, ur_mem_handle_t, c_size_t, c_size_t, c_size_t, c_ulong, POINTER(ur_exp_command_buffer_sync_point_t), POINTER(ur_exp_command_buffer_sync_point_t) )
2780+
2781+
###############################################################################
2782+
## @brief Function-pointer for urCommandBufferAppendMembufferCopyRectExp
2783+
if __use_win_types:
2784+
_urCommandBufferAppendMembufferCopyRectExp_t = WINFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t, ur_mem_handle_t, ur_mem_handle_t, ur_rect_offset_t, ur_rect_offset_t, ur_rect_region_t, c_size_t, c_size_t, c_size_t, c_size_t, c_ulong, POINTER(ur_exp_command_buffer_sync_point_t), POINTER(ur_exp_command_buffer_sync_point_t) )
2785+
else:
2786+
_urCommandBufferAppendMembufferCopyRectExp_t = CFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t, ur_mem_handle_t, ur_mem_handle_t, ur_rect_offset_t, ur_rect_offset_t, ur_rect_region_t, c_size_t, c_size_t, c_size_t, c_size_t, c_ulong, POINTER(ur_exp_command_buffer_sync_point_t), POINTER(ur_exp_command_buffer_sync_point_t) )
2787+
2788+
###############################################################################
2789+
## @brief Function-pointer for urCommandBufferEnqueueExp
2790+
if __use_win_types:
2791+
_urCommandBufferEnqueueExp_t = WINFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t, ur_queue_handle_t, c_ulong, POINTER(ur_event_handle_t), POINTER(ur_event_handle_t) )
2792+
else:
2793+
_urCommandBufferEnqueueExp_t = CFUNCTYPE( ur_result_t, ur_exp_command_buffer_handle_t, ur_queue_handle_t, c_ulong, POINTER(ur_event_handle_t), POINTER(ur_event_handle_t) )
2794+
2795+
2796+
###############################################################################
2797+
## @brief Table of CommandBufferExp functions pointers
2798+
class ur_command_buffer_exp_dditable_t(Structure):
2799+
_fields_ = [
2800+
("pfnCreateExp", c_void_p), ## _urCommandBufferCreateExp_t
2801+
("pfnRetainExp", c_void_p), ## _urCommandBufferRetainExp_t
2802+
("pfnReleaseExp", c_void_p), ## _urCommandBufferReleaseExp_t
2803+
("pfnFinalizeExp", c_void_p), ## _urCommandBufferFinalizeExp_t
2804+
("pfnAppendKernelLaunchExp", c_void_p), ## _urCommandBufferAppendKernelLaunchExp_t
2805+
("pfnAppendMemcpyUSMExp", c_void_p), ## _urCommandBufferAppendMemcpyUSMExp_t
2806+
("pfnAppendMembufferCopyExp", c_void_p), ## _urCommandBufferAppendMembufferCopyExp_t
2807+
("pfnAppendMembufferCopyRectExp", c_void_p), ## _urCommandBufferAppendMembufferCopyRectExp_t
2808+
("pfnEnqueueExp", c_void_p) ## _urCommandBufferEnqueueExp_t
2809+
]
2810+
26982811
###############################################################################
26992812
## @brief Function-pointer for urInit
27002813
if __use_win_types:
@@ -2896,6 +3009,7 @@ class ur_dditable_t(Structure):
28963009
("Mem", ur_mem_dditable_t),
28973010
("Enqueue", ur_enqueue_dditable_t),
28983011
("Queue", ur_queue_dditable_t),
3012+
("CommandBufferExp", ur_command_buffer_exp_dditable_t),
28993013
("Global", ur_global_dditable_t),
29003014
("USM", ur_usm_dditable_t),
29013015
("Device", ur_device_dditable_t)
@@ -3096,6 +3210,24 @@ def __init__(self, version : ur_api_version_t):
30963210
self.urQueueFinish = _urQueueFinish_t(self.__dditable.Queue.pfnFinish)
30973211
self.urQueueFlush = _urQueueFlush_t(self.__dditable.Queue.pfnFlush)
30983212

3213+
# call driver to get function pointers
3214+
CommandBufferExp = ur_command_buffer_exp_dditable_t()
3215+
r = ur_result_v(self.__dll.urGetCommandBufferExpProcAddrTable(version, byref(CommandBufferExp)))
3216+
if r != ur_result_v.SUCCESS:
3217+
raise Exception(r)
3218+
self.__dditable.CommandBufferExp = CommandBufferExp
3219+
3220+
# attach function interface to function address
3221+
self.urCommandBufferCreateExp = _urCommandBufferCreateExp_t(self.__dditable.CommandBufferExp.pfnCreateExp)
3222+
self.urCommandBufferRetainExp = _urCommandBufferRetainExp_t(self.__dditable.CommandBufferExp.pfnRetainExp)
3223+
self.urCommandBufferReleaseExp = _urCommandBufferReleaseExp_t(self.__dditable.CommandBufferExp.pfnReleaseExp)
3224+
self.urCommandBufferFinalizeExp = _urCommandBufferFinalizeExp_t(self.__dditable.CommandBufferExp.pfnFinalizeExp)
3225+
self.urCommandBufferAppendKernelLaunchExp = _urCommandBufferAppendKernelLaunchExp_t(self.__dditable.CommandBufferExp.pfnAppendKernelLaunchExp)
3226+
self.urCommandBufferAppendMemcpyUSMExp = _urCommandBufferAppendMemcpyUSMExp_t(self.__dditable.CommandBufferExp.pfnAppendMemcpyUSMExp)
3227+
self.urCommandBufferAppendMembufferCopyExp = _urCommandBufferAppendMembufferCopyExp_t(self.__dditable.CommandBufferExp.pfnAppendMembufferCopyExp)
3228+
self.urCommandBufferAppendMembufferCopyRectExp = _urCommandBufferAppendMembufferCopyRectExp_t(self.__dditable.CommandBufferExp.pfnAppendMembufferCopyRectExp)
3229+
self.urCommandBufferEnqueueExp = _urCommandBufferEnqueueExp_t(self.__dditable.CommandBufferExp.pfnEnqueueExp)
3230+
30993231
# call driver to get function pointers
31003232
Global = ur_global_dditable_t()
31013233
r = ur_result_v(self.__dll.urGetGlobalProcAddrTable(version, byref(Global)))

0 commit comments

Comments
 (0)