Skip to content

Commit fc50494

Browse files
przemektmalonisaacaultPetr Vesely
committed
[Bindless][Exp] Add bindless images interop resource handles
- Added new structs `ur_exp_interop_memory_desc_t` and `ur_exp_interop_semaphore_desc_t`. - Updated `urBindlessImagesImportOpaqueFDExp` and `urBindlessImagesImportExternalSemaphoreOpaqueFDExp` to use the new structs. Co-authored-by: Isaac Ault <isaac.ault@codeplay.com> Co-authored-by: Przemek Malon <przemek.malon@codeplay.com> Co-authored-by: Petr Vesely <petr.vesely@codeplay.com>
1 parent 2966d01 commit fc50494

File tree

12 files changed

+359
-70
lines changed

12 files changed

+359
-70
lines changed

include/ur.py

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@ class ur_structure_type_v(IntEnum):
232232
KERNEL_ARG_LOCAL_PROPERTIES = 33 ## ::ur_kernel_arg_local_properties_t
233233
EXP_COMMAND_BUFFER_DESC = 0x1000 ## ::ur_exp_command_buffer_desc_t
234234
EXP_SAMPLER_MIP_PROPERTIES = 0x2000 ## ::ur_exp_sampler_mip_properties_t
235+
EXP_INTEROP_MEMORY_DESC = 0x2001 ## ::ur_exp_interop_memory_desc_t
236+
EXP_INTEROP_SEMAPHORE_DESC = 0x2002 ## ::ur_exp_interop_semaphore_desc_t
237+
EXP_FILE_DESCRIPTOR = 0x2003 ## ::ur_exp_file_descriptor_t
238+
EXP_WIN32_HANDLE = 0x2004 ## ::ur_exp_win32_handle_t
235239

236240
class ur_structure_type_t(c_int):
237241
def __str__(self):
@@ -2097,6 +2101,26 @@ def __str__(self):
20972101
return hex(self.value)
20982102

20992103

2104+
###############################################################################
2105+
## @brief File descriptor
2106+
class ur_exp_file_descriptor_t(Structure):
2107+
_fields_ = [
2108+
("stype", ur_structure_type_t), ## [in] type of this structure, must be
2109+
## ::UR_STRUCTURE_TYPE_EXP_FILE_DESCRIPTOR
2110+
("pNext", c_void_p), ## [in][optional] pointer to extension-specific structure
2111+
("fd", c_int) ## [in] A file descriptor used for Linux and & MacOS operating systems.
2112+
]
2113+
2114+
###############################################################################
2115+
## @brief Windows specific file handle
2116+
class ur_exp_win32_handle_t(Structure):
2117+
_fields_ = [
2118+
("stype", ur_structure_type_t), ## [in] type of this structure, must be
2119+
## ::UR_STRUCTURE_TYPE_EXP_WIN32_HANDLE
2120+
("pNext", c_void_p), ## [in][optional] pointer to extension-specific structure
2121+
("handle", c_void_p) ## [in] A win32 file handle.
2122+
]
2123+
21002124
###############################################################################
21012125
## @brief Describes mipmap sampler properties
21022126
##
@@ -2117,6 +2141,24 @@ class ur_exp_sampler_mip_properties_t(Structure):
21172141
("mipFilterMode", ur_sampler_filter_mode_t) ## [in] mipmap filter mode used for filtering between mipmap levels
21182142
]
21192143

2144+
###############################################################################
2145+
## @brief Describes an interop memory resource descriptor
2146+
class ur_exp_interop_memory_desc_t(Structure):
2147+
_fields_ = [
2148+
("stype", ur_structure_type_t), ## [in] type of this structure, must be
2149+
## ::UR_STRUCTURE_TYPE_EXP_INTEROP_MEMORY_DESC
2150+
("pNext", c_void_p) ## [in][optional] pointer to extension-specific structure
2151+
]
2152+
2153+
###############################################################################
2154+
## @brief Describes an interop semaphore resource descriptor
2155+
class ur_exp_interop_semaphore_desc_t(Structure):
2156+
_fields_ = [
2157+
("stype", ur_structure_type_t), ## [in] type of this structure, must be
2158+
## ::UR_STRUCTURE_TYPE_EXP_INTEROP_SEMAPHORE_DESC
2159+
("pNext", c_void_p) ## [in][optional] pointer to extension-specific structure
2160+
]
2161+
21202162
###############################################################################
21212163
## @brief The extension string which defines support for command-buffers which
21222164
## is returned when querying device extensions.
@@ -3117,9 +3159,9 @@ class ur_queue_dditable_t(Structure):
31173159
###############################################################################
31183160
## @brief Function-pointer for urBindlessImagesImportOpaqueFDExp
31193161
if __use_win_types:
3120-
_urBindlessImagesImportOpaqueFDExp_t = WINFUNCTYPE( ur_result_t, ur_context_handle_t, ur_device_handle_t, c_size_t, c_ulong, POINTER(ur_exp_interop_mem_handle_t) )
3162+
_urBindlessImagesImportOpaqueFDExp_t = WINFUNCTYPE( ur_result_t, ur_context_handle_t, ur_device_handle_t, c_size_t, POINTER(ur_exp_interop_memory_desc_t), POINTER(ur_exp_interop_mem_handle_t) )
31213163
else:
3122-
_urBindlessImagesImportOpaqueFDExp_t = CFUNCTYPE( ur_result_t, ur_context_handle_t, ur_device_handle_t, c_size_t, c_ulong, POINTER(ur_exp_interop_mem_handle_t) )
3164+
_urBindlessImagesImportOpaqueFDExp_t = CFUNCTYPE( ur_result_t, ur_context_handle_t, ur_device_handle_t, c_size_t, POINTER(ur_exp_interop_memory_desc_t), POINTER(ur_exp_interop_mem_handle_t) )
31233165

31243166
###############################################################################
31253167
## @brief Function-pointer for urBindlessImagesMapExternalArrayExp
@@ -3138,9 +3180,9 @@ class ur_queue_dditable_t(Structure):
31383180
###############################################################################
31393181
## @brief Function-pointer for urBindlessImagesImportExternalSemaphoreOpaqueFDExp
31403182
if __use_win_types:
3141-
_urBindlessImagesImportExternalSemaphoreOpaqueFDExp_t = WINFUNCTYPE( ur_result_t, ur_context_handle_t, ur_device_handle_t, c_ulong, POINTER(ur_exp_interop_semaphore_handle_t) )
3183+
_urBindlessImagesImportExternalSemaphoreOpaqueFDExp_t = WINFUNCTYPE( ur_result_t, ur_context_handle_t, ur_device_handle_t, POINTER(ur_exp_interop_semaphore_desc_t), POINTER(ur_exp_interop_semaphore_handle_t) )
31423184
else:
3143-
_urBindlessImagesImportExternalSemaphoreOpaqueFDExp_t = CFUNCTYPE( ur_result_t, ur_context_handle_t, ur_device_handle_t, c_ulong, POINTER(ur_exp_interop_semaphore_handle_t) )
3185+
_urBindlessImagesImportExternalSemaphoreOpaqueFDExp_t = CFUNCTYPE( ur_result_t, ur_context_handle_t, ur_device_handle_t, POINTER(ur_exp_interop_semaphore_desc_t), POINTER(ur_exp_interop_semaphore_handle_t) )
31443186

31453187
###############################################################################
31463188
## @brief Function-pointer for urBindlessImagesDestroyExternalSemaphoreExp

include/ur_api.h

Lines changed: 57 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,10 @@ typedef enum ur_structure_type_t {
241241
UR_STRUCTURE_TYPE_KERNEL_ARG_LOCAL_PROPERTIES = 33, ///< ::ur_kernel_arg_local_properties_t
242242
UR_STRUCTURE_TYPE_EXP_COMMAND_BUFFER_DESC = 0x1000, ///< ::ur_exp_command_buffer_desc_t
243243
UR_STRUCTURE_TYPE_EXP_SAMPLER_MIP_PROPERTIES = 0x2000, ///< ::ur_exp_sampler_mip_properties_t
244+
UR_STRUCTURE_TYPE_EXP_INTEROP_MEMORY_DESC = 0x2001, ///< ::ur_exp_interop_memory_desc_t
245+
UR_STRUCTURE_TYPE_EXP_INTEROP_SEMAPHORE_DESC = 0x2002, ///< ::ur_exp_interop_semaphore_desc_t
246+
UR_STRUCTURE_TYPE_EXP_FILE_DESCRIPTOR = 0x2003, ///< ::ur_exp_file_descriptor_t
247+
UR_STRUCTURE_TYPE_EXP_WIN32_HANDLE = 0x2004, ///< ::ur_exp_win32_handle_t
244248
/// @cond
245249
UR_STRUCTURE_TYPE_FORCE_UINT32 = 0x7fffffff
246250
/// @endcond
@@ -6616,6 +6620,26 @@ typedef enum ur_exp_image_copy_flag_t {
66166620
/// @brief Bit Mask for validating ur_exp_image_copy_flags_t
66176621
#define UR_EXP_IMAGE_COPY_FLAGS_MASK 0xfffffff8
66186622

6623+
///////////////////////////////////////////////////////////////////////////////
6624+
/// @brief File descriptor
6625+
typedef struct ur_exp_file_descriptor_t {
6626+
ur_structure_type_t stype; ///< [in] type of this structure, must be
6627+
///< ::UR_STRUCTURE_TYPE_EXP_FILE_DESCRIPTOR
6628+
const void *pNext; ///< [in][optional] pointer to extension-specific structure
6629+
int fd; ///< [in] A file descriptor used for Linux and & MacOS operating systems.
6630+
6631+
} ur_exp_file_descriptor_t;
6632+
6633+
///////////////////////////////////////////////////////////////////////////////
6634+
/// @brief Windows specific file handle
6635+
typedef struct ur_exp_win32_handle_t {
6636+
ur_structure_type_t stype; ///< [in] type of this structure, must be
6637+
///< ::UR_STRUCTURE_TYPE_EXP_WIN32_HANDLE
6638+
const void *pNext; ///< [in][optional] pointer to extension-specific structure
6639+
void *handle; ///< [in] A win32 file handle.
6640+
6641+
} ur_exp_win32_handle_t;
6642+
66196643
///////////////////////////////////////////////////////////////////////////////
66206644
/// @brief Describes mipmap sampler properties
66216645
///
@@ -6636,6 +6660,24 @@ typedef struct ur_exp_sampler_mip_properties_t {
66366660

66376661
} ur_exp_sampler_mip_properties_t;
66386662

6663+
///////////////////////////////////////////////////////////////////////////////
6664+
/// @brief Describes an interop memory resource descriptor
6665+
typedef struct ur_exp_interop_memory_desc_t {
6666+
ur_structure_type_t stype; ///< [in] type of this structure, must be
6667+
///< ::UR_STRUCTURE_TYPE_EXP_INTEROP_MEMORY_DESC
6668+
const void *pNext; ///< [in][optional] pointer to extension-specific structure
6669+
6670+
} ur_exp_interop_memory_desc_t;
6671+
6672+
///////////////////////////////////////////////////////////////////////////////
6673+
/// @brief Describes an interop semaphore resource descriptor
6674+
typedef struct ur_exp_interop_semaphore_desc_t {
6675+
ur_structure_type_t stype; ///< [in] type of this structure, must be
6676+
///< ::UR_STRUCTURE_TYPE_EXP_INTEROP_SEMAPHORE_DESC
6677+
const void *pNext; ///< [in][optional] pointer to extension-specific structure
6678+
6679+
} ur_exp_interop_semaphore_desc_t;
6680+
66396681
///////////////////////////////////////////////////////////////////////////////
66406682
/// @brief USM allocate pitched memory
66416683
///
@@ -7034,17 +7076,18 @@ urBindlessImagesMipmapFreeExp(
70347076
/// + `NULL == hContext`
70357077
/// + `NULL == hDevice`
70367078
/// - ::UR_RESULT_ERROR_INVALID_NULL_POINTER
7079+
/// + `NULL == interopMemDesc`
70377080
/// + `NULL == phInteropMem`
70387081
/// - ::UR_RESULT_ERROR_INVALID_CONTEXT
70397082
/// - ::UR_RESULT_ERROR_INVALID_VALUE
70407083
/// - ::UR_RESULT_ERROR_INVALID_MEM_OBJECT
70417084
UR_APIEXPORT ur_result_t UR_APICALL
70427085
urBindlessImagesImportOpaqueFDExp(
7043-
ur_context_handle_t hContext, ///< [in] handle of the context object
7044-
ur_device_handle_t hDevice, ///< [in] handle of the device object
7045-
size_t size, ///< [in] size of the external memory
7046-
uint32_t fileDescriptor, ///< [in] the file descriptor
7047-
ur_exp_interop_mem_handle_t *phInteropMem ///< [out] interop memory handle to the external memory
7086+
ur_context_handle_t hContext, ///< [in] handle of the context object
7087+
ur_device_handle_t hDevice, ///< [in] handle of the device object
7088+
size_t size, ///< [in] size of the external memory
7089+
ur_exp_interop_memory_desc_t *interopMemDesc, ///< [in] the interop memory descriptor
7090+
ur_exp_interop_mem_handle_t *phInteropMem ///< [out] interop memory handle to the external memory
70487091
);
70497092

70507093
///////////////////////////////////////////////////////////////////////////////
@@ -7121,15 +7164,16 @@ urBindlessImagesReleaseInteropExp(
71217164
/// + `NULL == hContext`
71227165
/// + `NULL == hDevice`
71237166
/// - ::UR_RESULT_ERROR_INVALID_NULL_POINTER
7124-
/// + `NULL == phInteropSemaphoreHandle`
7167+
/// + `NULL == interopSemaphoreDesc`
7168+
/// + `NULL == phInteropSemaphore`
71257169
/// - ::UR_RESULT_ERROR_INVALID_CONTEXT
71267170
/// - ::UR_RESULT_ERROR_INVALID_VALUE
71277171
UR_APIEXPORT ur_result_t UR_APICALL
71287172
urBindlessImagesImportExternalSemaphoreOpaqueFDExp(
7129-
ur_context_handle_t hContext, ///< [in] handle of the context object
7130-
ur_device_handle_t hDevice, ///< [in] handle of the device object
7131-
uint32_t fileDescriptor, ///< [in] the file descriptor
7132-
ur_exp_interop_semaphore_handle_t *phInteropSemaphoreHandle ///< [out] interop semaphore handle to the external semaphore
7173+
ur_context_handle_t hContext, ///< [in] handle of the context object
7174+
ur_device_handle_t hDevice, ///< [in] handle of the device object
7175+
ur_exp_interop_semaphore_desc_t *interopSemaphoreDesc, ///< [in] the interop semaphore descriptor
7176+
ur_exp_interop_semaphore_handle_t *phInteropSemaphore ///< [out] interop semaphore handle to the external semaphore
71337177
);
71347178

71357179
///////////////////////////////////////////////////////////////////////////////
@@ -9199,7 +9243,7 @@ typedef struct ur_bindless_images_import_opaque_fd_exp_params_t {
91999243
ur_context_handle_t *phContext;
92009244
ur_device_handle_t *phDevice;
92019245
size_t *psize;
9202-
uint32_t *pfileDescriptor;
9246+
ur_exp_interop_memory_desc_t **pinteropMemDesc;
92039247
ur_exp_interop_mem_handle_t **pphInteropMem;
92049248
} ur_bindless_images_import_opaque_fd_exp_params_t;
92059249

@@ -9233,8 +9277,8 @@ typedef struct ur_bindless_images_release_interop_exp_params_t {
92339277
typedef struct ur_bindless_images_import_external_semaphore_opaque_fd_exp_params_t {
92349278
ur_context_handle_t *phContext;
92359279
ur_device_handle_t *phDevice;
9236-
uint32_t *pfileDescriptor;
9237-
ur_exp_interop_semaphore_handle_t **pphInteropSemaphoreHandle;
9280+
ur_exp_interop_semaphore_desc_t **pinteropSemaphoreDesc;
9281+
ur_exp_interop_semaphore_handle_t **pphInteropSemaphore;
92389282
} ur_bindless_images_import_external_semaphore_opaque_fd_exp_params_t;
92399283

92409284
///////////////////////////////////////////////////////////////////////////////

include/ur_ddi.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1375,7 +1375,7 @@ typedef ur_result_t(UR_APICALL *ur_pfnBindlessImagesImportOpaqueFDExp_t)(
13751375
ur_context_handle_t,
13761376
ur_device_handle_t,
13771377
size_t,
1378-
uint32_t,
1378+
ur_exp_interop_memory_desc_t *,
13791379
ur_exp_interop_mem_handle_t *);
13801380

13811381
///////////////////////////////////////////////////////////////////////////////
@@ -1400,7 +1400,7 @@ typedef ur_result_t(UR_APICALL *ur_pfnBindlessImagesReleaseInteropExp_t)(
14001400
typedef ur_result_t(UR_APICALL *ur_pfnBindlessImagesImportExternalSemaphoreOpaqueFDExp_t)(
14011401
ur_context_handle_t,
14021402
ur_device_handle_t,
1403-
uint32_t,
1403+
ur_exp_interop_semaphore_desc_t *,
14041404
ur_exp_interop_semaphore_handle_t *);
14051405

14061406
///////////////////////////////////////////////////////////////////////////////

scripts/core/EXP-BINDLESS-IMAGES.rst

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ Enums
6464
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6565
* ${x}_structure_type_t
6666
${X}_STRUCTURE_TYPE_EXP_SAMPLER_MIP_PROPERTIES
67+
${X}_STRUCTURE_TYPE_EXP_INTEROP_MEMORY_DESC
68+
${X}_STRUCTURE_TYPE_EXP_INTEROP_SEMAPHORE_DESC
69+
${X}_STRUCTURE_TYPE_EXP_FILE_DESCRIPTOR
70+
${X}_STRUCTURE_TYPE_EXP_WIN32_HANDLE
6771

6872
* ${x}_device_info_t
6973
* ${X}_DEVICE_INFO_BINDLESS_IMAGES_SUPPORT_EXP
@@ -119,6 +123,10 @@ Types
119123
* ${x}_exp_image_mem_handle_t
120124
* ${x}_exp_interop_mem_handle_t
121125
* ${x}_exp_interop_semaphore_handle_t
126+
* ${x}_exp_interop_memory_desc_t
127+
* ${x}_exp_interop_semaphore_desc_t
128+
* ${x}_exp_file_descriptor_t
129+
* ${x}_exp_win32_handle_t
122130

123131
Functions
124132
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -159,8 +167,11 @@ Changelog
159167
| || Removed 3D USM capabilities. |
160168
| || Added mip filter mode. |
161169
+----------+----------------------------------------------------------+
162-
| 3.0 | Added device query for bindless images on shared USM |
163-
+----------+---------------------------------------------------------+
170+
| 3.0 | Added device query for bindless images on shared USM |
171+
+----------+-------------------------------------------------------------+
172+
| 4.0 || Added platform specific interop resource handles. |
173+
| || Added and updated to use new interop resource descriptors. |
174+
+----------+-------------------------------------------------------------+
164175

165176
Contributors
166177
--------------------------------------------------------------------------------

scripts/core/exp-bindless-images.yml

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,18 @@ etors:
8686
- name: EXP_SAMPLER_MIP_PROPERTIES
8787
desc: $x_exp_sampler_mip_properties_t
8888
value: "0x2000"
89+
- name: EXP_INTEROP_MEMORY_DESC
90+
desc: $x_exp_interop_memory_desc_t
91+
value: "0x2001"
92+
- name: EXP_INTEROP_SEMAPHORE_DESC
93+
desc: $x_exp_interop_semaphore_desc_t
94+
value: "0x2002"
95+
- name: EXP_FILE_DESCRIPTOR
96+
desc: $x_exp_file_descriptor_t
97+
value: "0x2003"
98+
- name: EXP_WIN32_HANDLE
99+
desc: $x_exp_win32_handle_t
100+
value: "0x2004"
89101
--- #--------------------------------------------------------------------------
90102
type: enum
91103
extend: true
@@ -112,6 +124,24 @@ etors:
112124
desc: "Device to device"
113125
--- #--------------------------------------------------------------------------
114126
type: struct
127+
desc: "File descriptor"
128+
name: $x_exp_file_descriptor_t
129+
base: $x_base_desc_t
130+
members:
131+
- type: int
132+
name: fd
133+
desc: "[in] A file descriptor used for Linux and & MacOS operating systems."
134+
--- #--------------------------------------------------------------------------
135+
type: struct
136+
desc: "Windows specific file handle"
137+
name: $x_exp_win32_handle_t
138+
base: $x_base_desc_t
139+
members:
140+
- type: void*
141+
name: handle
142+
desc: "[in] A win32 file handle."
143+
--- #--------------------------------------------------------------------------
144+
type: struct
115145
desc: "Describes mipmap sampler properties"
116146
details:
117147
- Specify these properties in $xSamplerCreate via $x_sampler_desc_t as part
@@ -133,6 +163,20 @@ members:
133163
name: mipFilterMode
134164
desc: "[in] mipmap filter mode used for filtering between mipmap levels"
135165
--- #--------------------------------------------------------------------------
166+
type: struct
167+
desc: "Describes an interop memory resource descriptor"
168+
class: $xBindlessImages
169+
name: $x_exp_interop_memory_desc_t
170+
base: $x_base_desc_t
171+
members: []
172+
--- #--------------------------------------------------------------------------
173+
type: struct
174+
desc: "Describes an interop semaphore resource descriptor"
175+
class: $xBindlessImages
176+
name: $x_exp_interop_semaphore_desc_t
177+
base: $x_base_desc_t
178+
members: []
179+
--- #--------------------------------------------------------------------------
136180
type: function
137181
desc: "USM allocate pitched memory"
138182
class: $xUSM
@@ -518,9 +562,9 @@ params:
518562
- type: size_t
519563
name: size
520564
desc: "[in] size of the external memory"
521-
- type: uint32_t
522-
name: fileDescriptor
523-
desc: "[in] the file descriptor"
565+
- type: $x_exp_interop_memory_desc_t*
566+
name: interopMemDesc
567+
desc: "[in] the interop memory descriptor"
524568
- type: $x_exp_interop_mem_handle_t*
525569
name: phInteropMem
526570
desc: "[out] interop memory handle to the external memory"
@@ -597,11 +641,11 @@ params:
597641
- type: $x_device_handle_t
598642
name: hDevice
599643
desc: "[in] handle of the device object"
600-
- type: uint32_t
601-
name: fileDescriptor
602-
desc: "[in] the file descriptor"
644+
- type: $x_exp_interop_semaphore_desc_t*
645+
name: interopSemaphoreDesc
646+
desc: "[in] the interop semaphore descriptor"
603647
- type: $x_exp_interop_semaphore_handle_t*
604-
name: phInteropSemaphoreHandle
648+
name: phInteropSemaphore
605649
desc: "[out] interop semaphore handle to the external semaphore"
606650
returns:
607651
- $X_RESULT_ERROR_INVALID_CONTEXT

0 commit comments

Comments
 (0)