From a0084675f2080bd1effc7d4e0bd4123168a2bb4f Mon Sep 17 00:00:00 2001 From: Petr Vesely Date: Thu, 15 Jun 2023 15:54:42 +0100 Subject: [PATCH] [UR] Allow for extending enums --- include/ur.py | 8 ++-- include/ur_api.h | 8 ++-- scripts/core/common.yml | 13 ----- scripts/core/device.yml | 48 ------------------- scripts/core/event.yml | 8 ---- scripts/core/exp-bindless-images.yml | 72 ++++++++++++++++++++++++++++ scripts/core/exp-command-buffer.yml | 30 ++++++++++++ scripts/parse_specs.py | 38 ++++++++++++++- source/common/ur_params.hpp | 20 ++++---- 9 files changed, 156 insertions(+), 89 deletions(-) diff --git a/include/ur.py b/include/ur.py index aa692b2782..c0c145a945 100644 --- a/include/ur.py +++ b/include/ur.py @@ -231,9 +231,9 @@ class ur_structure_type_v(IntEnum): SAMPLER_NATIVE_PROPERTIES = 24 ## ::ur_sampler_native_properties_t QUEUE_NATIVE_DESC = 25 ## ::ur_queue_native_desc_t DEVICE_PARTITION_PROPERTIES = 26 ## ::ur_device_partition_properties_t - EXP_COMMAND_BUFFER_DESC = 27 ## ::ur_exp_command_buffer_desc_t - EXP_SAMPLER_MIP_PROPERTIES = 28 ## ::ur_exp_sampler_mip_properties_t - KERNEL_ARG_MEM_OBJ_PROPERTIES = 29 ## ::ur_kernel_arg_mem_obj_properties_t + KERNEL_ARG_MEM_OBJ_PROPERTIES = 27 ## ::ur_kernel_arg_mem_obj_properties_t + EXP_COMMAND_BUFFER_DESC = 0x1000 ## ::ur_exp_command_buffer_desc_t + EXP_SAMPLER_MIP_PROPERTIES = 0x2000 ## ::ur_exp_sampler_mip_properties_t class ur_structure_type_t(c_int): def __str__(self): @@ -1660,7 +1660,7 @@ class ur_command_v(IntEnum): DEVICE_GLOBAL_VARIABLE_READ = 24 ## Event created by ::urEnqueueDeviceGlobalVariableRead READ_HOST_PIPE = 25 ## Event created by ::urEnqueueReadHostPipe WRITE_HOST_PIPE = 26 ## Event created by ::urEnqueueWriteHostPipe - COMMAND_BUFFER_ENQUEUE_EXP = 27 ## Event created by ::urCommandBufferEnqueueExp + COMMAND_BUFFER_ENQUEUE_EXP = 0x1000 ## Event created by ::urCommandBufferEnqueueExp INTEROP_SEMAPHORE_WAIT_EXP = 0x2000 ## Event created by ::urBindlessImagesWaitExternalSemaphoreExp INTEROP_SEMAPHORE_SIGNAL_EXP = 0x2001 ## Event created by ::urBindlessImagesSignalExternalSemaphoreExp diff --git a/include/ur_api.h b/include/ur_api.h index 9bd714be8a..38f8df4e1f 100644 --- a/include/ur_api.h +++ b/include/ur_api.h @@ -255,9 +255,9 @@ typedef enum ur_structure_type_t { UR_STRUCTURE_TYPE_SAMPLER_NATIVE_PROPERTIES = 24, ///< ::ur_sampler_native_properties_t UR_STRUCTURE_TYPE_QUEUE_NATIVE_DESC = 25, ///< ::ur_queue_native_desc_t UR_STRUCTURE_TYPE_DEVICE_PARTITION_PROPERTIES = 26, ///< ::ur_device_partition_properties_t - UR_STRUCTURE_TYPE_EXP_COMMAND_BUFFER_DESC = 27, ///< ::ur_exp_command_buffer_desc_t - UR_STRUCTURE_TYPE_EXP_SAMPLER_MIP_PROPERTIES = 28, ///< ::ur_exp_sampler_mip_properties_t - UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES = 29, ///< ::ur_kernel_arg_mem_obj_properties_t + UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES = 27, ///< ::ur_kernel_arg_mem_obj_properties_t + UR_STRUCTURE_TYPE_EXP_COMMAND_BUFFER_DESC = 0x1000, ///< ::ur_exp_command_buffer_desc_t + UR_STRUCTURE_TYPE_EXP_SAMPLER_MIP_PROPERTIES = 0x2000, ///< ::ur_exp_sampler_mip_properties_t /// @cond UR_STRUCTURE_TYPE_FORCE_UINT32 = 0x7fffffff /// @endcond @@ -4403,7 +4403,7 @@ typedef enum ur_command_t { UR_COMMAND_DEVICE_GLOBAL_VARIABLE_READ = 24, ///< Event created by ::urEnqueueDeviceGlobalVariableRead UR_COMMAND_READ_HOST_PIPE = 25, ///< Event created by ::urEnqueueReadHostPipe UR_COMMAND_WRITE_HOST_PIPE = 26, ///< Event created by ::urEnqueueWriteHostPipe - UR_COMMAND_COMMAND_BUFFER_ENQUEUE_EXP = 27, ///< Event created by ::urCommandBufferEnqueueExp + UR_COMMAND_COMMAND_BUFFER_ENQUEUE_EXP = 0x1000, ///< Event created by ::urCommandBufferEnqueueExp UR_COMMAND_INTEROP_SEMAPHORE_WAIT_EXP = 0x2000, ///< Event created by ::urBindlessImagesWaitExternalSemaphoreExp UR_COMMAND_INTEROP_SEMAPHORE_SIGNAL_EXP = 0x2001, ///< Event created by ::urBindlessImagesSignalExternalSemaphoreExp /// @cond diff --git a/scripts/core/common.yml b/scripts/core/common.yml index af0af4aaff..17a4736b07 100644 --- a/scripts/core/common.yml +++ b/scripts/core/common.yml @@ -256,15 +256,6 @@ etors: - name: ERROR_ADAPTER_SPECIFIC desc: "An adapter specific warning/error has been reported and can be retrieved via the urGetLastResult entry point." - - name: ERROR_INVALID_COMMAND_BUFFER_EXP - value: "0x1000" - desc: "Invalid Command-Buffer" - - name: ERROR_INVALID_COMMAND_BUFFER_SYNC_POINT_EXP - value: "0x1001" - desc: "Sync point is not valid for the command-buffer" - - name: ERROR_INVALID_COMMAND_BUFFER_SYNC_POINT_WAIT_LIST_EXP - value: "0x1002" - desc: "Sync point wait list is invalid" - name: ERROR_UNKNOWN value: "0x7ffffffe" desc: "Unknown or internal error" @@ -327,10 +318,6 @@ etors: desc: $x_queue_native_desc_t - name: DEVICE_PARTITION_PROPERTIES desc: $x_device_partition_properties_t - - name: EXP_COMMAND_BUFFER_DESC - desc: $x_exp_command_buffer_desc_t - - name: EXP_SAMPLER_MIP_PROPERTIES - desc: $x_exp_sampler_mip_properties_t - name: KERNEL_ARG_MEM_OBJ_PROPERTIES desc: $x_kernel_arg_mem_obj_properties_t --- #-------------------------------------------------------------------------- diff --git a/scripts/core/device.yml b/scripts/core/device.yml index c003db0a36..5e8fa6e727 100644 --- a/scripts/core/device.yml +++ b/scripts/core/device.yml @@ -383,54 +383,6 @@ etors: desc: "[uint32_t] The maximum number of registers available per block." - name: IP_VERSION desc: "[uint32_t] The device IP version. The meaning of the device IP version is implementation-defined, but newer devices should have a higher version than older devices." - - name: BINDLESS_IMAGES_SUPPORT_EXP - value: "0x2000" - desc: "[$x_bool_t] returns true if the device supports the creation of bindless images" - - name: BINDLESS_IMAGES_1D_USM_SUPPORT_EXP - value: "0x2001" - desc: "[$x_bool_t] returns true if the device supports the creation of 1D bindless images backed by USM" - - name: BINDLESS_IMAGES_2D_USM_SUPPORT_EXP - value: "0x2002" - desc: "[$x_bool_t] returns true if the device supports the creation of 2D bindless images backed by USM" - - name: BINDLESS_IMAGES_3D_USM_SUPPORT_EXP - value: "0x2003" - desc: "[$x_bool_t] returns true if the device supports the creation of 3D bindless images backed by USM" - - name: IMAGE_PITCH_ALIGN_EXP - value: "0x2004" - desc: "[uint32_t] returns the required alignment of the pitch between two rows of an image in bytes" - - name: MAX_IMAGE_LINEAR_WIDTH_EXP - value: "0x2005" - desc: "[size_t] returns the maximum linear width allowed for images allocated using USM" - - name: MAX_IMAGE_LINEAR_HEIGHT_EXP - value: "0x2006" - desc: "[size_t] returns the maximum linear height allowed for images allocated using USM" - - name: MAX_IMAGE_LINEAR_PITCH_EXP - value: "0x2007" - desc: "[size_t] returns the maximum linear pitch allowed for images allocated using USM" - - name: MIPMAP_SUPPORT_EXP - value: "0x2008" - desc: "[$x_bool_t] returns true if the device supports allocating mipmap resources" - - name: MIPMAP_ANISOTROPY_SUPPORT_EXP - value: "0x2009" - desc: "[$x_bool_t] returns true if the device supports sampling mipmap images with anisotropic filtering" - - name: MIPMAP_MAX_ANISOTROPY_EXP - value: "0x200A" - desc: "[uint32_t] returns the maximum anisotropic ratio supported by the device" - - name: MIPMAP_LEVEL_REFERENCE_SUPPORT_EXP - value: "0x200B" - desc: "[$x_bool_t] returns true if the device supports using images created from individual mipmap levels" - - name: INTEROP_MEMORY_IMPORT_SUPPORT_EXP - value: "0x200C" - desc: "[$x_bool_t] returns true if the device supports importing external memory resources" - - name: INTEROP_MEMORY_EXPORT_SUPPORT_EXP - value: "0x200D" - desc: "[$x_bool_t] returns true if the device supports exporting internal memory resources" - - name: INTEROP_SEMAPHORE_IMPORT_SUPPORT_EXP - value: "0x200E" - desc: "[$x_bool_t] returns true if the device supports importing external semaphore resources" - - name: INTEROP_SEMAPHORE_EXPORT_SUPPORT_EXP - value: "0x200F" - desc: "[$x_bool_t] returns true if the device supports exporting internal event resources" --- #-------------------------------------------------------------------------- type: function desc: "Retrieves various information about device" diff --git a/scripts/core/event.yml b/scripts/core/event.yml index 59fb1851fa..f38d68b779 100644 --- a/scripts/core/event.yml +++ b/scripts/core/event.yml @@ -73,14 +73,6 @@ etors: desc: Event created by $xEnqueueReadHostPipe - name: WRITE_HOST_PIPE desc: Event created by $xEnqueueWriteHostPipe - - name: COMMAND_BUFFER_ENQUEUE_EXP - desc: Event created by $xCommandBufferEnqueueExp - - name: INTEROP_SEMAPHORE_WAIT_EXP - value: "0x2000" - desc: Event created by $xBindlessImagesWaitExternalSemaphoreExp - - name: INTEROP_SEMAPHORE_SIGNAL_EXP - value: "0x2001" - desc: Event created by $xBindlessImagesSignalExternalSemaphoreExp --- #-------------------------------------------------------------------------- type: enum desc: "Event Status" diff --git a/scripts/core/exp-bindless-images.yml b/scripts/core/exp-bindless-images.yml index b684f3b80e..a8082d5a5b 100644 --- a/scripts/core/exp-bindless-images.yml +++ b/scripts/core/exp-bindless-images.yml @@ -23,6 +23,78 @@ desc: "Handle of interop semaphore" class: $xBindlessImages name: "$x_exp_interop_semaphore_handle_t" --- #-------------------------------------------------------------------------- +type: enum_exp +desc: "Extension enums to $x_device_info_t to support bindless images." +name: $x_device_info_t +etors: + - name: BINDLESS_IMAGES_SUPPORT_EXP + value: "0x2000" + desc: "[$x_bool_t] returns true if the device supports the creation of bindless images" + - name: BINDLESS_IMAGES_1D_USM_SUPPORT_EXP + value: "0x2001" + desc: "[$x_bool_t] returns true if the device supports the creation of 1D bindless images backed by USM" + - name: BINDLESS_IMAGES_2D_USM_SUPPORT_EXP + value: "0x2002" + desc: "[$x_bool_t] returns true if the device supports the creation of 2D bindless images backed by USM" + - name: BINDLESS_IMAGES_3D_USM_SUPPORT_EXP + value: "0x2003" + desc: "[$x_bool_t] returns true if the device supports the creation of 3D bindless images backed by USM" + - name: IMAGE_PITCH_ALIGN_EXP + value: "0x2004" + desc: "[uint32_t] returns the required alignment of the pitch between two rows of an image in bytes" + - name: MAX_IMAGE_LINEAR_WIDTH_EXP + value: "0x2005" + desc: "[size_t] returns the maximum linear width allowed for images allocated using USM" + - name: MAX_IMAGE_LINEAR_HEIGHT_EXP + value: "0x2006" + desc: "[size_t] returns the maximum linear height allowed for images allocated using USM" + - name: MAX_IMAGE_LINEAR_PITCH_EXP + value: "0x2007" + desc: "[size_t] returns the maximum linear pitch allowed for images allocated using USM" + - name: MIPMAP_SUPPORT_EXP + value: "0x2008" + desc: "[$x_bool_t] returns true if the device supports allocating mipmap resources" + - name: MIPMAP_ANISOTROPY_SUPPORT_EXP + value: "0x2009" + desc: "[$x_bool_t] returns true if the device supports sampling mipmap images with anisotropic filtering" + - name: MIPMAP_MAX_ANISOTROPY_EXP + value: "0x200A" + desc: "[uint32_t] returns the maximum anisotropic ratio supported by the device" + - name: MIPMAP_LEVEL_REFERENCE_SUPPORT_EXP + value: "0x200B" + desc: "[$x_bool_t] returns true if the device supports using images created from individual mipmap levels" + - name: INTEROP_MEMORY_IMPORT_SUPPORT_EXP + value: "0x200C" + desc: "[$x_bool_t] returns true if the device supports importing external memory resources" + - name: INTEROP_MEMORY_EXPORT_SUPPORT_EXP + value: "0x200D" + desc: "[$x_bool_t] returns true if the device supports exporting internal memory resources" + - name: INTEROP_SEMAPHORE_IMPORT_SUPPORT_EXP + value: "0x200E" + desc: "[$x_bool_t] returns true if the device supports importing external semaphore resources" + - name: INTEROP_SEMAPHORE_EXPORT_SUPPORT_EXP + value: "0x200F" + desc: "[$x_bool_t] returns true if the device supports exporting internal event resources" +--- #-------------------------------------------------------------------------- +type: enum_exp +desc: "Structure Type experimental enumerations." +name: $x_structure_type_t +etors: + - name: EXP_SAMPLER_MIP_PROPERTIES + desc: $x_exp_sampler_mip_properties_t + value: "0x2000" +--- #-------------------------------------------------------------------------- +type: enum_exp +desc: "Command Type experimental enumerations." +name: $x_command_t +etors: + - name: INTEROP_SEMAPHORE_WAIT_EXP + value: "0x2000" + desc: Event created by $xBindlessImagesWaitExternalSemaphoreExp + - name: INTEROP_SEMAPHORE_SIGNAL_EXP + value: "0x2001" + desc: Event created by $xBindlessImagesSignalExternalSemaphoreExp +--- #-------------------------------------------------------------------------- type: enum desc: "Dictates the type of memory copy." class: $xBindlessImages diff --git a/scripts/core/exp-command-buffer.yml b/scripts/core/exp-command-buffer.yml index d1279d9187..10e6d3a9da 100644 --- a/scripts/core/exp-command-buffer.yml +++ b/scripts/core/exp-command-buffer.yml @@ -12,6 +12,36 @@ type: header desc: "Intel $OneApi Unified Runtime Experimental APIs for Command-Buffers" ordinal: "99" --- #-------------------------------------------------------------------------- +type: enum_exp +desc: "Experimental Command Buffer result type enums." +name: $x_result_t +etors: + - name: ERROR_INVALID_COMMAND_BUFFER_EXP + value: "0x1000" + desc: "Invalid Command-Buffer" + - name: ERROR_INVALID_COMMAND_BUFFER_SYNC_POINT_EXP + value: "0x1001" + desc: "Sync point is not valid for the command-buffer" + - name: ERROR_INVALID_COMMAND_BUFFER_SYNC_POINT_WAIT_LIST_EXP + value: "0x1002" + desc: "Sync point wait list is invalid" +--- #-------------------------------------------------------------------------- +type: enum_exp +desc: "Extend enumeration of Command Buffer Structure Type." +name: $x_structure_type_t +etors: + - name: EXP_COMMAND_BUFFER_DESC + desc: $x_exp_command_buffer_desc_t + value: "0x1000" +--- #-------------------------------------------------------------------------- +type: enum_exp +desc: "Extend command type enumeration for Command-Buffer experimental feature." +name: $x_command_t +etors: + - name: COMMAND_BUFFER_ENQUEUE_EXP + desc: Event created by $xCommandBufferEnqueueExp + value: "0x1000" +--- #-------------------------------------------------------------------------- type: macro desc: "The extension string which defines support for command-buffers which is returned when querying device extensions." name: $X_COMMAND_BUFFER_EXTENSION_STRING_EXP diff --git a/scripts/parse_specs.py b/scripts/parse_specs.py index 3666288e8a..2162d44b2b 100644 --- a/scripts/parse_specs.py +++ b/scripts/parse_specs.py @@ -24,7 +24,7 @@ preprocess object """ def _preprocess(d): - if 'enum' == d['type']: + if 'enum' == d['type'] or d['type'] == 'enum_exp': use_hex = False next = 0 for etor in d['etors']: @@ -426,6 +426,9 @@ def __validate_params(d, tags): __validate_details(d) __validate_ordinal(d) __validate_version(d) + + elif 'enum_exp' == d['type']: + pass return True @@ -558,6 +561,8 @@ def _generate_meta(d, ordinal, meta): for idx, etor in enumerate(d['etors']): meta[type][name]['etors'].append(etor['name']) value = _get_etor_value(etor.get('value'), value) + if not etor.get('value'): + etor['value'] = str(value) if type_traits.is_flags(name): bit_mask |= value if value > max_value: @@ -568,7 +573,7 @@ def _generate_meta(d, ordinal, meta): if bit_mask != 0: meta[type][name]['bit_mask'] = hex(ctypes.c_uint32(~bit_mask).value) else: - meta[type][name]['max'] = d['etors'][idx]['name'] + meta[type][name]['max'] = d['etors'][max_index]['name'] elif 'macro' == type: meta[type][name]['values'] = [] @@ -797,6 +802,31 @@ def _generate_ref(specs, tags, ref): return ref +def refresh_enum_meta(obj, header, meta): + ## remove the existing meta records + if obj.get('class'): + meta['class'][obj['class']]['enum'].remove(obj['name']) + + del meta['enum'][obj['name']] + ## re-generate meta + meta = _generate_meta(obj, header['ordinal'], meta) + + +def handle_enum_extensions(d, specs, header, meta): + matching_enum = [obj for s in specs for obj in s['objects'] if obj['type'] == 'enum' and d['name'] == obj['name']][0] + matching_enum['etors'].extend(d['etors']) + + ## Refresh metadata + refresh_enum_meta(matching_enum, header, meta) + + ## Sort the etors + value = -1 + def sort_etors(x): + nonlocal value + value = _get_etor_value(x.get('value'), value) + return value + matching_enum['etors'] = sorted(matching_enum['etors'], key=sort_etors) + """ Entry-point: @@ -832,6 +862,10 @@ def parse(section, version, tags, meta, ref): if not d: continue + if d['type'] == "enum_exp": + handle_enum_extensions(d, specs, header, meta) + continue + # extract header from objects if re.match(r"header", d['type']): header = d diff --git a/source/common/ur_params.hpp b/source/common/ur_params.hpp index 90c5d8fb4e..890db18300 100644 --- a/source/common/ur_params.hpp +++ b/source/common/ur_params.hpp @@ -753,6 +753,10 @@ inline std::ostream &operator<<(std::ostream &os, os << "UR_STRUCTURE_TYPE_DEVICE_PARTITION_PROPERTIES"; break; + case UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES: + os << "UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES"; + break; + case UR_STRUCTURE_TYPE_EXP_COMMAND_BUFFER_DESC: os << "UR_STRUCTURE_TYPE_EXP_COMMAND_BUFFER_DESC"; break; @@ -760,10 +764,6 @@ inline std::ostream &operator<<(std::ostream &os, case UR_STRUCTURE_TYPE_EXP_SAMPLER_MIP_PROPERTIES: os << "UR_STRUCTURE_TYPE_EXP_SAMPLER_MIP_PROPERTIES"; break; - - case UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES: - os << "UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES"; - break; default: os << "unknown enumerator"; break; @@ -934,6 +934,12 @@ inline void serializeStruct(std::ostream &os, const void *ptr) { ur_params::serializePtr(os, pstruct); } break; + case UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES: { + const ur_kernel_arg_mem_obj_properties_t *pstruct = + (const ur_kernel_arg_mem_obj_properties_t *)ptr; + ur_params::serializePtr(os, pstruct); + } break; + case UR_STRUCTURE_TYPE_EXP_COMMAND_BUFFER_DESC: { const ur_exp_command_buffer_desc_t *pstruct = (const ur_exp_command_buffer_desc_t *)ptr; @@ -945,12 +951,6 @@ inline void serializeStruct(std::ostream &os, const void *ptr) { (const ur_exp_sampler_mip_properties_t *)ptr; ur_params::serializePtr(os, pstruct); } break; - - case UR_STRUCTURE_TYPE_KERNEL_ARG_MEM_OBJ_PROPERTIES: { - const ur_kernel_arg_mem_obj_properties_t *pstruct = - (const ur_kernel_arg_mem_obj_properties_t *)ptr; - ur_params::serializePtr(os, pstruct); - } break; default: os << "unknown enumerator"; break;