diff --git a/level-zero/1.10/.buildinfo b/level-zero/1.10/.buildinfo new file mode 100644 index 0000000..e92d80b --- /dev/null +++ b/level-zero/1.10/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: b82cb7b7318798c29b05c0790c724298 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/level-zero/1.10/.nojekyll b/level-zero/1.10/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/level-zero/1.10/_images/A21_Subvertex+Remote.png b/level-zero/1.10/_images/A21_Subvertex+Remote.png new file mode 100644 index 0000000..8767b56 Binary files /dev/null and b/level-zero/1.10/_images/A21_Subvertex+Remote.png differ diff --git a/level-zero/1.10/_images/A21_Subvertex.png b/level-zero/1.10/_images/A21_Subvertex.png new file mode 100644 index 0000000..356934c Binary files /dev/null and b/level-zero/1.10/_images/A21_Subvertex.png differ diff --git a/level-zero/1.10/_images/A21_Vertex+Subvertex+Remote.png b/level-zero/1.10/_images/A21_Vertex+Subvertex+Remote.png new file mode 100644 index 0000000..44d72c6 Binary files /dev/null and b/level-zero/1.10/_images/A21_Vertex+Subvertex+Remote.png differ diff --git a/level-zero/1.10/_images/A21_Vertex.png b/level-zero/1.10/_images/A21_Vertex.png new file mode 100644 index 0000000..b136ea3 Binary files /dev/null and b/level-zero/1.10/_images/A21_Vertex.png differ diff --git a/level-zero/1.10/_images/DGXA100_Vertex.png b/level-zero/1.10/_images/DGXA100_Vertex.png new file mode 100644 index 0000000..a87dd81 Binary files /dev/null and b/level-zero/1.10/_images/DGXA100_Vertex.png differ diff --git a/level-zero/1.10/_images/core_device.png b/level-zero/1.10/_images/core_device.png new file mode 100644 index 0000000..4248714 Binary files /dev/null and b/level-zero/1.10/_images/core_device.png differ diff --git a/level-zero/1.10/_images/core_event.png b/level-zero/1.10/_images/core_event.png new file mode 100644 index 0000000..3cfb5cc Binary files /dev/null and b/level-zero/1.10/_images/core_event.png differ diff --git a/level-zero/1.10/_images/core_fence.png b/level-zero/1.10/_images/core_fence.png new file mode 100644 index 0000000..f49f290 Binary files /dev/null and b/level-zero/1.10/_images/core_fence.png differ diff --git a/level-zero/1.10/_images/core_module.png b/level-zero/1.10/_images/core_module.png new file mode 100644 index 0000000..1331ba0 Binary files /dev/null and b/level-zero/1.10/_images/core_module.png differ diff --git a/level-zero/1.10/_images/core_queue.png b/level-zero/1.10/_images/core_queue.png new file mode 100644 index 0000000..2a1dbb6 Binary files /dev/null and b/level-zero/1.10/_images/core_queue.png differ diff --git a/level-zero/1.10/_images/core_reserved_suballocations.png b/level-zero/1.10/_images/core_reserved_suballocations.png new file mode 100644 index 0000000..66712dc Binary files /dev/null and b/level-zero/1.10/_images/core_reserved_suballocations.png differ diff --git a/level-zero/1.10/_images/one_api_sw_stack.png b/level-zero/1.10/_images/one_api_sw_stack.png new file mode 100644 index 0000000..ad2ed11 Binary files /dev/null and b/level-zero/1.10/_images/one_api_sw_stack.png differ diff --git a/level-zero/1.10/_images/tools_metric_hierarchy.png b/level-zero/1.10/_images/tools_metric_hierarchy.png new file mode 100644 index 0000000..f06b0fe Binary files /dev/null and b/level-zero/1.10/_images/tools_metric_hierarchy.png differ diff --git a/level-zero/1.10/_images/tools_metric_query.png b/level-zero/1.10/_images/tools_metric_query.png new file mode 100644 index 0000000..f221da3 Binary files /dev/null and b/level-zero/1.10/_images/tools_metric_query.png differ diff --git a/level-zero/1.10/_images/tools_metric_streamer.png b/level-zero/1.10/_images/tools_metric_streamer.png new file mode 100644 index 0000000..3604df0 Binary files /dev/null and b/level-zero/1.10/_images/tools_metric_streamer.png differ diff --git a/level-zero/1.10/_images/tools_sysman_fabric.png b/level-zero/1.10/_images/tools_sysman_fabric.png new file mode 100644 index 0000000..4aa26e6 Binary files /dev/null and b/level-zero/1.10/_images/tools_sysman_fabric.png differ diff --git a/level-zero/1.10/_images/tools_sysman_freq_flow.png b/level-zero/1.10/_images/tools_sysman_freq_flow.png new file mode 100644 index 0000000..31bac9e Binary files /dev/null and b/level-zero/1.10/_images/tools_sysman_freq_flow.png differ diff --git a/level-zero/1.10/_images/tools_sysman_freq_subdevices.png b/level-zero/1.10/_images/tools_sysman_freq_subdevices.png new file mode 100644 index 0000000..1ff0810 Binary files /dev/null and b/level-zero/1.10/_images/tools_sysman_freq_subdevices.png differ diff --git a/level-zero/1.10/_sources/api.rst b/level-zero/1.10/_sources/api.rst new file mode 100644 index 0000000..03fd8fc --- /dev/null +++ b/level-zero/1.10/_sources/api.rst @@ -0,0 +1,10 @@ + +=================== + API Documentation +=================== + +.. toctree:: + + core/api.rst + tools/api.rst + sysman/api.rst diff --git a/level-zero/1.10/_sources/core/EXT.rst b/level-zero/1.10/_sources/core/EXT.rst new file mode 100644 index 0000000..f54c423 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT.rst @@ -0,0 +1,160 @@ + +============ + Extensions +============ + +Objective +========= + +Features which are device- or vendor-specific can be exposed as extensions. + +There are two types of extensions defined by this specification: + +1. **Standard** - extensions ratified for inclusion into the current and all future versions of the specification. +2. **Experimental** - extensions require additional experimentation and feedback from application vendors + before ratification, therefore applications should not rely on experimental extensions in production. + +In addition to above, an implementation may choose to provide non-standard extensions which are +not defined in this specification. + +It is the responsibility of the implementation to define and document such non-standard extensions +and also to ensure these extensions do not conflict or interfere with any features or extensions of the standard +core or sysman APIs. + +The following table summarizes the APIs to be used for discovery of different types of extensions. Aside +from :ref:`zeDriverGetExtensionProperties` which has been available since inception of this specification, +the other APIs have been added subsequently. The versions of spec in which the APIs were added is also +noted in following table. + +=============== =================== ============================= ======================================== + API Category Version API added Extension Type Extension Discovery API +=============== =================== ============================= ======================================== + Core NA Standard :ref:`zeDriverGetExtensionProperties` + Core NA Experimental :ref:`zeDriverGetExtensionProperties` + Core 1.1 Implementation non-standard :ref:`zeDriverGetExtensionFunctionAddress` + Sysman 1.8 Standard :ref:`zesDriverGetExtensionProperties` + Sysman 1.8 Experimental :ref:`zesDriverGetExtensionProperties` + Sysman 1.8 Implementation non-standard :ref:`zesDriverGetExtensionFunctionAddress` +=============== =================== ============================= ======================================== + +Requirements +============ + +- Extensions must use globally unique names for macros, enums, structures and functions +- Extensions must have globally unique extension names reported from :ref:`zeDriverGetExtensionProperties`\, :ref:`zesDriverGetExtensionProperties` +- All extensions must be defined in this specification +- Extensions must not break backwards compatibility of the standard APIs defined in this specification +- Standard extension versions must be backwards compatible with prior versions + +Naming Convention +----------------- + +The following naming conventions must be followed for **standard** extensions: + + - All extension functions must be postfixed with `Ext` + - All macros must use all caps with the appropriate prefix. Core macros shall use `ZE_NAME_EXT`, Sysman macros shall use `ZES_NAME_EXT` + - All structures, enumerations and other types must follow snake case convention with appropriate prefix. Core structures and enumerations shall use `ze_name_ext_t` and Sysman shall use `zes_name_ext_t` + - All enumerator values must use all caps with appropriate prefix. Core enumerator values shall use `ZE_ENUM_EXT_ETOR_NAME` and Sysman shall use `ZES_ENUM_EXT_ETOR_NAME` + - All handle types must end with `ext_handle_t` + - All descriptor structures must end with `ext_desc_t` + - All property structures must end with `ext_properties_t` + - All flag enumerations must end with `ext_flags_t` + +The following naming conventions must be followed for **experimental** extensions: + + - Experimental extensions may be added and removed from the driver at any time. + - Experimental extensions are not guaranteed to be forward- or backward-compatible between versions. + - Experimental extensions are not guaranteed to be supported in production driver releases; and may appear and disappear from release to release. + - All extension functions must be postfixed with `Exp`. The vendor name must follow the `ze` or `zes` prefix and follow CamelCase convention. + - All macros must use all caps with the appropriate prefix. Core macros shall use `ZE_NAME_EXP`, Sysman macros shall use `ZES_NAME_EXP`. The vendor name must follow `ZE` or `ZES` prefix. + - All structures, enumerations and other types must follow snake case convention with appropriate prefix. Core structures and enumerations shall use `ze_name_exp_t` and Sysman shall use `zes_name_exp_t`. The vendor name must follow `ze` or `ZES` prefix. + - All enumerator values must use all caps with appropriate prefix. Core enumerator values shall use `ZE_ENUM_EXP_ETOR_NAME` and Sysman shall use `ZES_ENUM_EXP_ETOR_NAME`. The vendor name must follow `ZE` or `ZES` prefix. + - All handle types must end with `exp_handle_t` + - All descriptor structures must end with `exp_desc_t` + - All property structures must end with `exp_properties_t` + - All flag enumerations must end with `exp_flags_t` + +Extending Enumerations +---------------------- + +Any existing enumeration may be extended by adding new etors. +Etors must still use extension naming convention and values should be assigned to avoid future compatibility issues. + +Extending Structures +-------------------- + +Any structure derived from base descriptor or base property structure types may be extended using structure chains. +While it is possible to use other methods, this is the required method for extending existing structures. + +A structure chain can contain more than one extension structure, in any order. Therefore, extensions should not be +dependent on their order relative to other extensions and the implementation must be order agnostic. In addition, +the implementation will ignore extended structures that it does not support. + +The extension must document the specific structures and functions that may be extended using the structure chain. + +List of Standard Core Extensions +================================ + + - :ref:`"ZE_extension_eu_count" ` + - :ref:`"ZE_extension_pci_properties" ` + - :ref:`"ZE_extension_srgb" ` + - :ref:`"ZE_extension_bfloat16_conversions" ` + - :ref:`"ZE_extension_cache_reservation" ` + - :ref:`"ZE_extension_device_luid" ` + - :ref:`"ZE_extension_device_ip_version" ` + - :ref:`"ZE_extension_event_query_kernel_timestamps" ` + - :ref:`"ZE_extension_float_atomics" ` + - :ref:`"ZE_extension_image_copy" ` + - :ref:`"ZE_extension_image_query_alloc_properties" ` + - :ref:`"ZE_extension_image_view" ` + - :ref:`"ZE_extension_image_view_planar" ` + - :ref:`"ZE_extension_kernel_max_group_size_properties" ` + - :ref:`"ZE_extension_linkage_inspection" ` + - :ref:`"ZE_extension_linkonce_odr" ` + - :ref:`"ZE_extension_memory_compression_hints" ` + - :ref:`"ZE_extension_memory_free_policies" ` + - :ref:`"ZE_extension_device_memory_properties" ` + - :ref:`"ZE_extension_raytracing" ` + - :ref:`"ZE_extension_subgroups" ` + - :ref:`"ZES_extension_engine_activity" ` + + +List of Experimental Extensions +=============================== + + - :ref:`"ZE_experimental_rtas_builder" ` + - :ref:`"ZE_experimental_bandwidth_properties" ` + - :ref:`"ZE_experimental_bindless_image" ` + - :ref:`"ZE_experimental_command_list_clone" ` + - :ref:`"ZE_experimental_event_pool_counter_based" ` + - :ref:`"ZE_experimental_event_query_timestamps" ` + - :ref:`"ZE_experimental_fabric" ` + - :ref:`"ZE_experimental_global_offset" ` + - :ref:`"ZE_experimental_image_memory_properties" ` + - :ref:`"ZE_experimental_image_view" ` + - :ref:`"ZE_experimental_image_view_planar" ` + - :ref:`"ZE_experimental_immediate_command_list_append" ` + - :ref:`"ZE_experimental_scheduling_hints" ` + - :ref:`"ZE_experimental_mutable_command_list" ` + - :ref:`"ZE_experimental_power_saving_hint" ` + - :ref:`"ZE_experimental_module_program" ` + - :ref:`"ZE_experimental_relaxed_allocation_limits" ` + - :ref:`"ZE_experimental_sub_allocations" ` + - :ref:`"ZET_experimental_global_metric_timestamps" ` + - :ref:`"ZET_experimental_concurrent_metric_groups" ` + - :ref:`"ZET_experimental_metric_export_data" ` + - :ref:`"ZET_experimental_programmable_metrics" ` + - :ref:`"ZET_experimental_metric_tracer" ` + - :ref:`"ZET_experimental_calculate_multiple_metrics" ` + - :ref:`"ZET_experimental_api_tracing" ` + - :ref:`"ZES_experimental_firmware_security_version" ` + - :ref:`"ZES_extension_mem_state" ` + - :ref:`"ZES_extension_power_domain_properties" ` + - :ref:`"ZES_extension_ras_state" ` + - :ref:`"ZES_experimental_sysman_device_mapping" ` + - :ref:`"ZES_experimental_virtual_function_management" ` + +List of Standard Sysman Extensions +================================== + + - :ref:`"ZES_extension_power_limits" ` diff --git a/level-zero/1.10/_sources/core/EXT_Bfloat16Conversions.rst b/level-zero/1.10/_sources/core/EXT_Bfloat16Conversions.rst new file mode 100644 index 0000000..2a6c8ee --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Bfloat16Conversions.rst @@ -0,0 +1,16 @@ + +:orphan: + +.. _ZE_extension_bfloat16_conversions: + +================================ + Bfloat16 Conversions Extension +================================ + +API +---- + +* Enumerations + + + * :ref:`ze-bfloat16-conversions-ext-version-t` diff --git a/level-zero/1.10/_sources/core/EXT_CacheReservation.rst b/level-zero/1.10/_sources/core/EXT_CacheReservation.rst new file mode 100644 index 0000000..f1b5d31 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_CacheReservation.rst @@ -0,0 +1,25 @@ + +:orphan: + +.. _ZE_extension_cache_reservation: + +============================= + Cache Reservation Extension +============================= + +API +---- + +* Functions + + * :ref:`zeDeviceReserveCacheExt` + * :ref:`zeDeviceSetCacheAdviceExt` + +* Enumerations + + * :ref:`ze-cache-reservation-ext-version-t` + * :ref:`ze-cache-ext-region-t` + +* Structures + + * :ref:`ze-cache-reservation-ext-desc-t` diff --git a/level-zero/1.10/_sources/core/EXT_DeviceIpVersion.rst b/level-zero/1.10/_sources/core/EXT_DeviceIpVersion.rst new file mode 100644 index 0000000..235c03a --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_DeviceIpVersion.rst @@ -0,0 +1,15 @@ + +:orphan: + +.. _ZE_extension_device_ip_version: + +====================================== + Device IP Version Extension +====================================== + +API +---- + +* Structures + + * :ref:`ze-device-ip-version-ext-t` diff --git a/level-zero/1.10/_sources/core/EXT_DeviceLUID.rst b/level-zero/1.10/_sources/core/EXT_DeviceLUID.rst new file mode 100644 index 0000000..d82faa0 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_DeviceLUID.rst @@ -0,0 +1,22 @@ + +:orphan: + +.. _ZE_extension_device_luid: + +========================================== + Device Local Identifier (LUID) Extension +========================================== + +API +---- + +* Enumerations + + + * :ref:`ze-device-luid-ext-version-t` + + +* Structures + + * :ref:`ze-device-luid-ext-t` + * :ref:`ze-device-luid-ext-properties-t` diff --git a/level-zero/1.10/_sources/core/EXT_EUCount.rst b/level-zero/1.10/_sources/core/EXT_EUCount.rst new file mode 100644 index 0000000..5fbd3ac --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_EUCount.rst @@ -0,0 +1,15 @@ + +:orphan: + +.. _ZE_extension_eu_count: + +====================================== + EU Count Extension +====================================== + +API +---- + +* Structures + + * :ref:`ze-eu-count-ext-t` diff --git a/level-zero/1.10/_sources/core/EXT_EXP_BindlessImages.rst b/level-zero/1.10/_sources/core/EXT_EXP_BindlessImages.rst new file mode 100644 index 0000000..6f22dc9 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_EXP_BindlessImages.rst @@ -0,0 +1,278 @@ + +:orphan: + +.. _ZE_experimental_bindless_image: + +======================================== + Bindless Image Experimental Extension +======================================== + +API +---- + +* Enumerations + + * :ref:`ze-bindless-image-exp-version-t` + * :ref:`ze-image-bindless-exp-flags-t` + +* Structures + + * :ref:`ze-device-pitched-alloc-exp-properties-t` + * :ref:`ze-image-bindless-exp-desc-t` + * :ref:`ze-image-pitched-exp-desc-t` + +* Functions + + * :ref:`zeMemGetPitchFor2dImage` + * :ref:`zeImageGetDeviceOffsetExp` + +Bindless Images +~~~~~~~~~~~~~~~ + +A bindless image is defined as one which provides access to the underlying data via image reference handles. +At the application level, this allows the user to implement programs where the number of images is not known at +compile-time, and store all handles to images irrespective of varying formats and layouts in some container such as a dynamic array. + +Currently, in Level Zero, `zeImageCreate` performs the image memory allocation and image handle generation. +This function only allows for the allocation of image memory in an implementation-specific layout. + +In this extension, we propose the following additions: + * Provide a new image descriptor and flags for Bindless images. + * Support for creation of images on linearly allocated memory backed by USM. + * Extension API to create an image handle from pitched memory + * Create Bindless sampled images + +A "Bindless image" can be created by passing :ref:`ze-image-bindless-exp-desc-t` to pNext member of +:ref:`ze-image-desc-t` and set the flags value as :ref:`ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS ` + +A "Bindless sampled image" can be created by passing :ref:`ze-image-bindless-exp-desc-t` to pNext member of +:ref:`ze-image-desc-t` and setting the flags to a combination of :ref:`ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS ` and :ref:`ZE_IMAGE_BINDLESS_EXP_FLAG_SAMPLED_IMAGE ` +When image view is created from bindless sampled image, sampling modes can be redefined by passing sampler descriptor in pNext field of :ref:`ze-image-bindless-exp-desc-t` struct. +Image view created from bindless sampled image without setting :ref:`ZE_IMAGE_BINDLESS_EXP_FLAG_SAMPLED_IMAGE ` is an unsampled image. +Sampled image view can be created from bindless unsampled image by setting :ref:`ZE_IMAGE_BINDLESS_EXP_FLAG_SAMPLED_IMAGE ` and passing sampler descriptor in pNext field of :ref:`ze-image-bindless-exp-desc-t` struct. + +This extension is complimentary to and may be used in conjunction with the `ZE_extension_image_view `_ extension + +Programming example with Bindless images +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. parsed-literal:: + + // Assumed image data on host + std::vector imageDataHost; + + // 2D image dimensions + size_t imageWidth = 1024; + size_t imageHeight = 1024; + + // Single-precision float image format with one channel + :ref:`ze-image-format-t` imageFormat = { + ZE_IMAGE_FORMAT_LAYOUT_32, ZE_IMAGE_FORMAT_TYPE_FLOAT, + ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_X, + ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_X + } + + // Create an image descriptor for bindless image + :ref:`ze-image-desc-t` imageDesc = { + ZE_STRUCTURE_TYPE_IMAGE_DESC, + nullptr, + 0, + ZE_IMAGE_TYPE_2D, + imageFormat, + 128, 128, 0, 0, 0 + }; + + :ref:`ze-image-bindless-exp-desc-t` bindlessImageDesc = {:ref:`ZE_STRUCTURE_TYPE_BINDLESS_IMAGE_EXP_DESC `\}; + bindlessImageDesc.flags = :ref:`ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS `\; + imageDesc.pNext = &bindlessImageDesc; + + // A bindless image is valid on both host and device and can be passed into kernels + // When passing :ref:`ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS ` to zeImageCreate, only the backing memory is allocated for Image + ze_image_handle_t hImage; + :ref:`zeImageCreate`\(hContext, hDevice, &imageDesc, &hImage); + + //Copy To new bindless image memory + :ref:`zeCommandListAppendImageCopyFromMemory`\(hCommandlist, hImage, imageDataHost.data(), nullptr, nullptr, 0, nullptr); + + // Launch kernel and perform appropriate synchronizations + + // Copy back + :ref:`zeCommandListAppendImageCopyToMemory`\(hCommandlist, imageDataHost.data(), hImage, nullptr, nullptr, 0, nullptr); + + // Further image views can be created from the existing memory allocated using bindless flags + ze_image_handle_t hImageView; + :ref:`zeImageViewCreateExt`\(hContext, hDevice, &imageDesc, hImage, &hImageView); + + // New image view can be separately used by users and destroyed + // ... + + // Once all operations are complete we need destroy bindless image handle(s) + :ref:`zeImageDestroy`\(hImageView); + :ref:`zeImageDestroy`\(hImage); + +Programming example with pitched memory usage +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. parsed-literal:: + + // Retrieve pitched alloc properties specific to device + :ref:`ze-device-image-properties-t` deviceImageProperties = {}; + :ref:`ze-device-pitched-alloc-exp-properties-t` pitchedAllocProperties = {}; + pitchedAllocProperties.stype = :ref:`ZE_STRUCTURE_TYPE_PITCHED_ALLOC_DEVICE_EXP_PROPERTIES ` + + deviceImageProperties.pNext = &pitchedAllocProperties; + :ref:`zeDeviceGetImageProperties`\(hDevice, &deviceImageProperties); + + // Assumed image data on host + std::vector imageDataHost; + + // 2D image dimensions + size_t imageWidth = 1024; + size_t imageHeight = 1024; + + //Pitched memory in linear layout + size_t rowPitch; + unsigned int elementSize = 128; + :ref:`zeMemGetPitchFor2dImage`\(hContext, hDevice, imageWidth, imageHeight, elementSize, &rowPitch); + size_t allocSize = rowPitch * imageHeight; + :ref:`ze-device-mem-alloc-desc-t` allocDesc = {:ref:`ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC `\}; + :ref:`zeMemAllocDevice`\(hContext, &allocDesc, allocSize, allocSize, hDevice, &pitchedPtr); + + // Declare the copy region for copying + :ref:`ze-copy-region-t` copyRegion = {0, 0, 0, imageWidth * sizeof(float), imageHeight, 0}; + + // Copy from host to device + :ref:`zeCommandListAppendMemoryCopyRegion`\(hCommandList, pitchedPtr, ©Region, rowPitch, 0, imageDataHost.data(), ©Region, imageWidth * sizeof(float), 0, nullptr, 0, nullptr); + + // Single-precision float image format with one channel + :ref:`ze-image-format-t` imageFormat = { + ZE_IMAGE_FORMAT_LAYOUT_32, ZE_IMAGE_FORMAT_TYPE_FLOAT, + ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_X, + ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_X + } + + // Create an image descriptor for bindless image + :ref:`ze-image-desc-t` imageDesc = { + ZE_STRUCTURE_TYPE_IMAGE_DESC, + nullptr, + 0, + ZE_IMAGE_TYPE_2D, + imageFormat, + 128, 128, 0, 0, 0 + }; + + :ref:`ze-image-pitched-exp-desc-t` pitchedImageDesc = {:ref:`ZE_STRUCTURE_TYPE_PITCHED_IMAGE_EXP_DESC `\}; + pitchedImageDesc.ptr = pitchedPtr; + imageDesc.pNext = &pitchedImageDesc; + + // A image created out of pitched memory is valid on both host and device and can be passed into kernels + ze_image_handle_t hImage; + :ref:`zeImageCreate`\(hContext, hDevice, &imageDesc, &hImage); + + // Launch kernel and perform appropriate synchronizations + + // ... + + // Copy from device to host + :ref:`zeCommandListAppendMemoryCopyRegion`\(hCommandList, imageDataHost.data(), ©Region, imageWidth * sizeof(float), 0, pitchedPtr, ©Region, rowPitch, 0, nullptr, 0, nullptr); + + // Once all operations on the image are complete we need destroy image handle and free memory + :ref:`zeImageDestroy`\(hImage); + :ref:`zeMemFree`\(hContext, pitchedPtr); + +Programming example with Bindless sampled images +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. parsed-literal:: + + // 2D image dimensions + size_t imageWidth = 1024; + size_t imageHeight = 1024; + + // Single-precision float image format with one channel + :ref:`ze-image-format-t` imageFormat = { + ZE_IMAGE_FORMAT_LAYOUT_32, ZE_IMAGE_FORMAT_TYPE_FLOAT, + ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_X, + ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_X + } + + // Define sampler descriptor + :ref:`ze-sampler-desc-t` samplerDesc = { + ZE_STRUCTURE_TYPE_SAMPLER_DESC, + nullptr, + ZE_SAMPLER_ADDRESS_MODE_CLAMP, + ZE_SAMPLER_FILTER_MODE_LINEAR, + true + }; + + // Create an image descriptor for bindless image + :ref:`ze-image-desc-t` imageDesc = { + ZE_STRUCTURE_TYPE_IMAGE_DESC, + nullptr, + 0, + ZE_IMAGE_TYPE_2D, + imageFormat, + imageWidth, imageHeight, 0, 0, 0 + }; + + :ref:`ze-image-bindless-exp-desc-t` bindlessImageDesc = {ZE_STRUCTURE_TYPE_BINDLESS_IMAGE_EXP_DESC}; + bindlessImageDesc.flags = ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS | ZE_IMAGE_BINDLESS_EXP_FLAG_SAMPLED_IMAGE; + imageDesc.pNext = &bindlessImageDesc; + + bindlessImageDesc.pNext = &samplerDesc; + + // Create bindless sampled image + // pass ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS and ZE_IMAGE_BINDLESS_EXP_FLAG_SAMPLED_IMAGE to zeImageCreate(), + ze_image_handle_t hImage; + :ref:`zeImageCreate`\(hContext, hDevice, &imageDesc, &hImage); + + // Create an image view from bindless sampled image + // define sampler descriptor for view + :ref:`ze-sampler-desc-t` samplerDescForView = { + ZE_STRUCTURE_TYPE_SAMPLER_DESC, + nullptr, + ZE_SAMPLER_ADDRESS_MODE_CLAMP, + ZE_SAMPLER_FILTER_MODE_NEAREST, + true + }; + + :ref:`ze-image-format-t` imageViewFormat = { + ZE_IMAGE_FORMAT_LAYOUT_32, ZE_IMAGE_FORMAT_TYPE_UINT, + ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_X, + ZE_IMAGE_FORMAT_SWIZZLE_R, ZE_IMAGE_FORMAT_SWIZZLE_X + } + + // image descriptor for bindless image view + :ref:`ze-image-desc-t` imageViewDesc = { + ZE_STRUCTURE_TYPE_IMAGE_DESC, + nullptr, + 0, + ZE_IMAGE_TYPE_2D, + imageViewFormat, + 128, 128, 0, 0, 0 + }; + imageViewDesc.pNext = &bindlessImageDesc; + bindlessImageDesc.pNext = &samplerDescForView; + ze_image_handle_t hImageView; + + :ref:`zeImageViewCreateExt`\(hContext, hDevice, &imageViewDesc, hImage, &hImageView); + + // If ZE_IMAGE_BINDLESS_EXP_FLAG_SAMPLED_IMAGE is not set, unsampled image is created + ze_image_handle_t hUnsampledImageView; + bindlessImageDesc.flags = ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS; + bindlessImageDesc.pNext = nullptr; + :ref:`zeImageViewCreateExt`\(hContext, hDevice, &imageViewDesc, hImage, &hUnsampledImageView); + + // Create an image view from bindless unsampled image + ze_image_handle_t hUnsampledImage; + ze_image_handle_t hSampledImageView; + bindlessImageDesc.flags = ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS; + bindlessImageDesc.pNext = nullptr; + imageDesc.pNext = &bindlessImageDesc; + + // create unsampled image + :ref:`zeImageCreate`\(hContext, hDevice, &imageDesc, &hUnsampledImage); + + bindlessImageDesc.flags = ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS | ZE_IMAGE_BINDLESS_EXP_FLAG_SAMPLED_IMAGE; + bindlessImageDesc.pNext = &samplerDescForView; + :ref:`zeImageViewCreateExt`\(hContext, hDevice, &imageDesc, hUnsampledImage, &hSampledImageView); diff --git a/level-zero/1.10/_sources/core/EXT_EventQueryKernelTimestamps.rst b/level-zero/1.10/_sources/core/EXT_EventQueryKernelTimestamps.rst new file mode 100644 index 0000000..687de79 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_EventQueryKernelTimestamps.rst @@ -0,0 +1,95 @@ + +:orphan: + +.. _ZE_extension_event_query_kernel_timestamps: + +========================================= + Event Query Kernel Timestamps Extension +========================================= + +API +---- + +* Enumerations + + + * :ref:`ze-event-query-kernel-timestamps-ext-version-t` + * :ref:`ze-event-query-kernel-timestamps-ext-flags-t` + + +* Structures + + + * :ref:`ze-event-query-kernel-timestamps-ext-properties-t` + * :ref:`ze-event-query-kernel-timestamps-results-ext-properties-t` + * :ref:`ze-synchronized-timestamp-data-ext-t` + * :ref:`ze-synchronized-timestamp-result-ext-t` + + +* Functions + + + * :ref:`zeEventQueryKernelTimestampsExt` + + +Event Query Kernel Timestamps +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This extension enables the querying of synchronized event timestamps. + +- *Synchronized event timestamps* are device timestamps synchronized to the host time domain. + +**Notes** + +- The querying of synchronized event timestamps has a performance cost. +- This extension is designed to complement and eventually replace all usages of :ref:`zeEventQueryTimestampsExp` and :ref:`zeEventQueryKernelTimestamp`\. +- The value returned by the `pCount` parameter of :ref:`zeEventQueryKernelTimestampsExt` is implementation specific. + +.. parsed-literal:: + + :ref:`ze-device-properties-t` devProps; + :ref:`ze-event-query-kernel-timestamps-ext-properties-t` tsProps; + + devProps.stype = :ref:`ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES `\; + devProps.pNext = &tsProps; + + tsProps.stype = :ref:`ZE_STRUCTURE_TYPE_EVENT_QUERY_KERNEL_TIMESTAMPS_EXT_PROPERTIES `\; + tsProps.pNext = nullptr; + + // Determine the level of support by getting the module properties + :ref:`zeDeviceGetProperties`\(hDevice, &devProps); + + const bool supportsKernelTimestamps = (0 != (tsProps.flags & :ref:`ZE_EVENT_QUERY_KERNEL_TIMESTAMPS_EXT_FLAG_KERNEL `\)); + const bool supportsSynchronizedTimestamps = (0 != (tsProps.flags & :ref:`ZE_EVENT_QUERY_KERNEL_TIMESTAMPS_EXT_FLAG_SYNCHRONIZED `\)); + + // Assumption: hEvent was created with :ref:`ZE_EVENT_POOL_FLAG_KERNEL_MAPPED_TIMESTAMP ` + + // ... + // launch kernel + // synchronize host + // ... + + if (supportsKernelTimestamps || supportsSynchronizedTimestamps) { + // Number of event timestamps + uint32_t count = 0; + + // Get the number of timestamps associated with the event. + :ref:`zeEventQueryKernelTimestampsExt`\(hEvent, hDevice, &count, nullptr); + + // Allocate storage for kernel timestamp results + std::vector<:ref:`ze-kernel-timestamp-result-t`\> kernelTimestamps(count); + + // Allocate storage for synchronized timestamp results + std::vector<:ref:`ze-synchronized-timestamp-result-ext-t`\> synchronizedTimestamps(count); + + // Build event query kernel timestamps descriptors + :ref:`ze-event-query-kernel-timestamps-results-ext-properties-t` resultsProps; + + resultsProps.stype = :ref:`ZE_STRUCTURE_TYPE_EVENT_QUERY_KERNEL_TIMESTAMPS_RESULTS_EXT_PROPERTIES `\; + resultsProps.pNext = nullptr; + resultsProps.pKernelTimestampsBuffer = supportsKernelTimestamps ? kernelTimestamps.data() : nullptr; + resultsProps.pSynchronizedTimestampsBuffer = supportsSynchronizedTimestamps ? synchronizedTimestamps.data() : nullptr; + + // Query the event timestamps + :ref:`zeEventQueryKernelTimestampsExt`\(hEvent, hDevice, &count, &resultsProps); + } diff --git a/level-zero/1.10/_sources/core/EXT_Exp_BandwidthProperties.rst b/level-zero/1.10/_sources/core/EXT_Exp_BandwidthProperties.rst new file mode 100644 index 0000000..cd02efe --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_BandwidthProperties.rst @@ -0,0 +1,107 @@ + +:orphan: + +.. _ZE_experimental_bandwidth_properties: + +================================= +Bandwidth Extension Properties +================================= + +API +---- + +* Structures + + + * :ref:`ze-device-p2p-bandwidth-exp-properties-t` + + * :ref:`ze-copy-bandwidth-exp-properties-t` + + +Bandwidth Properties +~~~~~~~~~~~~~~~~~~~~~ + +Properties of interest during data movement and remote access across various accelerators +interconnected via a set of fabrics include the bandwidths and latencies provided by the fabrics, +logical as well as physical, but also the bandwidths that can be driven by the various engines +present in the accelerators, i.e. the copy bandwidth. In order to saturate the interconnecting +fabrics, the copy bandwidth used to drive a transfer must be matched to the bandwidth provided by +the fabric. This may be achieved by utilizing one or more engines to drive the transfer. The +extensions provided here allow users to query both the fabric bandwidth & latencies as well the +copy bandwidth provided by the various engines present on each accelerator. + +Accelerators within a system may be connected using different link technologies as well as differing +numbers of links. Two accelerators may be logically but not physically connected to each other, meaning +that memory accesses and copies between the accelerators have to go over intervening accelerators. +This limits the maximum bandwidth to the lowest bandwidth link along the connection while increasing +the latency to the sum total of the latencies of the links along the connection. The net bandwidth and +latency for two logically connected accelerators accounts for link technology, number of links, number +of hops between the accelerators, etc... The net physical bandwidth & physical latency between two +accelerators are zero unless the accelerators are directly connected to each other by a fabric, and +account for link technology, number of links, etc... + +The following pseudo-code demonstrates a sequence for obtaining the p2p bandwidth & latency between two devices: + +.. parsed-literal:: + + // devCount is the count of the number of devices in the system + uint32_t** bwTable + uint32_t** latTable + + bwTable = (uint32_t**)allocate(devCount*sizeof(uint32_t*)); + latTable = (uint32_t**)allocate(devCount*sizeof(uint32_t*)); + + :ref:`ze-device-p2p-properties-t` P2PProps; + :ref:`ze-device-p2p-bandwidth-exp-properties-t` P2PBandwidthProps; + P2PProps.stype = ZE_STRUCTURE_TYPE_DEVICE_P2P_PROPERTIES + P2Props.pNext = &P2PbandwidthProps; + P2PBandwidthProps = ZE_STRUCTURE_TYPE_DEVICE_P2P_BANDWIDTH_EXT_PROPERTIES; + P2PBandwidthProps = nullptr; + + // Assume devices are stored in array called devices of size devCount + for (uint32_t dev = 0; dev < devCount; ++dev) { + bwTable[dev] = (uint32_t*)allocate(devCount*sizeof(uint32_t)); + latTable[dev] = (uint32_t*)allocate(devCount*sizeof(uint32_t)); + for (uint32_t peer_dev = 0; peer_dev < devCount; ++peer_dev) { + zeDeviceGetP2PProperties(devices[dev], devices[peer_dev], &P2PProps); + bwTable[dev][peer_dev] = P2PProps.pNext->logicalBandwidth; + latTable[dev][peer_dev] = P2PProps.pNext->logicalLatency; + } + } + + +Engines from different command queue groups may drive differing amounts of bandwidth over the same link between two accelerators. The copy bandwidth of the engines within each command queue group is provided to help users determine which command queue group to pick the right types and numbers of engines from the accelerator for driving each copy operation given constraints such as the maximum bandwidth that a link supports, current usage of engines, etc... For example, some command queue groups that support copy may afford engines that support a higher copy bandwidth as compared to those from a different command queue group. For driving copies from local memory to local memory, it may be advisable to use an engine from a higher copy bandwidth group. For performing copies between devices interconnected with a lower bandwidth link, it may suffice to use an engine from a lower copy bandwidth group. + +The following pseudo-code demonstrates a sequence for obtaining the copy bandwidth of the engines in each command queue group: + +.. parsed-literal:: + + // Discover all command queue groups + uint32_t cmdqueueGroupCount = 0; + :ref:`zeDeviceGetCommandQueueGroupProperties`\(hDevice, &cmdqueueGroupCount, nullptr); + + :ref:`ze-command-queue-group-properties-t`\* cmdqueueGroupProperties = (:ref:`ze-command-queue-group-properties-t`\*) + allocate(cmdqueueGroupCount * sizeof(:ref:`ze-command-queue-group-properties-t`\)); + :ref:`ze-copy-bandwidth-exp-properties-t`\* cmdqueueGroupBandwidth = (:ref:`ze-copy-bandwidth-exp-properties-t`\*) + allocate(cmdqueueGroupCount * sizeof(:ref:`ze-copy-bandwidth-exp-properties-t`\)); + for( uint32_t i = 0; i < cmdqueueGroupCount; ++i ) { + cmdqueueGroupProperties[i].stype = :ref:`ZE_STRUCTURE_TYPE_COMMAND_QUEUE_GROUP_PROPERTIES `\; + cmdqueueGroupProperties[i].pNext = &cmdqueueGroupBandwidth[i]; + cmdqueueGroupBandwidth[i].stype = :ref:`ZE_STRUCTURE_TYPE_COPY_BANDWIDTH_EXP_PROPERTIES `\; + cmdqueueGroupBandwidth[i].pNext = nullptr; + } + :ref:`zeDeviceGetCommandQueueGroupProperties`\(hDevice, &cmdqueueGroupCount, cmdqueueGroupProperties); + + + // Find a command queue type that supports copy & print the copy bandwidth + uint32_t computeQueueGroupOrdinal = cmdqueueGroupCount; + for( uint32_t i = 0; i < cmdqueueGroupCount; ++i ) { + if( cmdqueueGroupProperties[ i ].flags & :ref:`ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_COPY ` ) { + computeQueueGroupOrdinal = i; + printf("copyBandwidth: %ul\n", cmdqueueGroupBandwidth[i].copyBandwidth) + break; + } + } + + if(computeQueueGroupOrdinal == cmdqueueGroupCount) + return; // no compute queues found diff --git a/level-zero/1.10/_sources/core/EXT_Exp_CommandListClone.rst b/level-zero/1.10/_sources/core/EXT_Exp_CommandListClone.rst new file mode 100644 index 0000000..92411f9 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_CommandListClone.rst @@ -0,0 +1,53 @@ + +:orphan: + +.. _ZE_experimental_command_list_clone: + +============================== + Command List Clone Extension +============================== + +API +---- + +* Enumerations + + * :ref:`ze-command-list-clone-exp-version-t` + +* Functions + + * :ref:`zeCommandListCreateCloneExp` + + +==================== + Command List Clone +==================== + +A command list created with the cloneable flag may be cloned only after it has been closed. + +.. parsed-literal:: + + // Create a command list that may be cloned + :ref:`ze-command-list-desc-t` commandListDesc = { + :ref:`ZE_STRUCTURE_TYPE_COMMAND_LIST_DESC `\, + nullptr, + 0, + :ref:`ZE_COMMAND_LIST_FLAG_EXP_CLONEABLE ` + }; + ze_command_list_handle_t hCommandList = nullptr; + :ref:`zeCommandListCreate`\(hContext, hDevice, &commandListDesc, &hCommandList); + + // { ...[construct command list]... } + + // Close the command list + :ref:`zeCommandListClose`\(hCommandList); + + // Execute the command list + zeCommandQueueExecuteCommandLists(hCommandQueue, 1, &hCommandList, nullptr); + + // Clone the command list, no synchronization required + ze_command_list_handle_t hClonedCommandList = nullptr; + :ref:`zeCommandListCreateCloneExp`\(hCommandList, &hClonedCommandList); + + // ... + diff --git a/level-zero/1.10/_sources/core/EXT_Exp_CounterBasedEventPools.rst b/level-zero/1.10/_sources/core/EXT_Exp_CounterBasedEventPools.rst new file mode 100644 index 0000000..b5263e7 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_CounterBasedEventPools.rst @@ -0,0 +1,62 @@ + +:orphan: + +.. _ZE_experimental_event_pool_counter_based: + +===================================== + Counter-Based Event Pools Extension +===================================== + +API +---- + +* Enumerations + + * :ref:`ze-event-pool-counter-based-exp-flags-t` + * :ref:`ze-event-pool-counter-based-exp-version-t` + +* Structures + + * :ref:`ze-event-pool-counter-based-exp-desc-t` + +Counter-Based Events +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +By default, events in Level Zero contains one of two states: signaled or not signaled. +Signaling of an event, as well as resetting its state, can be done from either host or +device. + +Another way of tracking the state of an event is by using a counter, which is incremented +every time a task has completed in the device. Using a counter-based event may provide +Level Zero driver implementations with the opportunity for both functional and performance +optimizations. + +The following recommendations and restrictions apply to counter-based events: + +- Counter-based events can be used only with in-orders lists, whether those are regular or immediate. +- Counter-based events must not be reset, i.e., a call to :ref:`zeEventHostReset` or :ref:`zeCommandListAppendEventReset` + is not allowed. +- Counter-based events must not be signaled from host, i.e., a call to :ref:`zeEventHostSignal` is not allowed. +- Counter-based events may be reused multiple times without a need for reset. +- Counter-based events may be used on multiple command lists. +- Querying a counter-based event queries only the last saved counter value from the last command list that incremented it, + i.e., a signaled counter-based event always represents the completion of the last call to which it was passed as signal event. +- Synchronizing on a counter-based event waits only for the last saved counter value from the last command list that incremented it. +- A counter-based event may be passed as signaling event for a new append call without needing to wait for the signaling of + the last call where it was used. + +Counter-based events can be created by passing :ref:`ze-event-pool-counter-based-exp-desc-t` to :ref:`zeEventPoolCreate` +as pNext member of :ref:`ze-event-pool-desc-t`\. + +.. parsed-literal:: + + uint32_t numEvents = 2; + ze_event_pool_handle_t eventPool = {}; + :ref:`ze-event-pool-desc-t` eventPoolDesc = {:ref:`ZE_STRUCTURE_TYPE_EVENT_POOL_DESC `\}; + eventPoolDesc.count = numEvents; + + :ref:`ze-event-pool-counter-based-exp-desc-t` counterBasedDesc = {:ref:`ZE_STRUCTURE_TYPE_COUNTER_BASED_EVENT_POOL_EXP_DESC `\}; + counterBasedDesc.flags = :ref:`ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_IMMEDIATE `\; + eventPoolDesc.pNext = &counterBasedDesc; + + :ref:`ze-result-t` = zeEventPoolCreate(context, &eventPoolDesc, 1, &device, &eventPool)); diff --git a/level-zero/1.10/_sources/core/EXT_Exp_EventQueryTimestamps.rst b/level-zero/1.10/_sources/core/EXT_Exp_EventQueryTimestamps.rst new file mode 100644 index 0000000..a123972 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_EventQueryTimestamps.rst @@ -0,0 +1,24 @@ + +:orphan: + +.. _ZE_experimental_event_query_timestamps: + +==================================== + Event Query Timestamps Extension +==================================== + +API +---- + +* Functions + + + * :ref:`zeEventQueryTimestampsExp` + + +* Enumerations + + + * :ref:`ze-event-query-timestamps-exp-version-t` + + diff --git a/level-zero/1.10/_sources/core/EXT_Exp_Fabric.rst b/level-zero/1.10/_sources/core/EXT_Exp_Fabric.rst new file mode 100644 index 0000000..0371085 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_Fabric.rst @@ -0,0 +1,149 @@ + +:orphan: + +.. _ZE_experimental_fabric: + +==================================== +Fabric Topology Discovery Extension +==================================== + +API +---- + +* Macros + + * ZE_MAX_FABRIC_EDGE_MODEL_EXP_SIZE + +* Enumerations + + * :ref:`ze-fabric-vertex-exp-type-t` + + * :ref:`ze-fabric-edge-exp-duplexity-t` + +* Structures + + * :ref:`ze-fabric-vertex-pci-exp-address-t` + + * :ref:`ze-fabric-vertex-exp-properties-t` + + * :ref:`ze-fabric-edge-exp-properties-t` + +* Functions + + * :ref:`zeFabricVertexGetExp` + + * :ref:`zeFabricVertexGetSubVerticesExp` + + * :ref:`zeFabricVertexGetPropertiesExp` + + * :ref:`zeFabricVertexGetDeviceExp` + + * :ref:`zeDeviceGetFabricVertexExp` + + * :ref:`zeFabricEdgeGetExp` + + * :ref:`zeFabricEdgeGetVerticesExp` + + * :ref:`zeFabricEdgeGetPropertiesExp` + +Fabric Topology Discovery +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The API supports two forms of topology discovery - logical & physical. + +The API architecture exposes both the logical topology as well as the physical topology of the fabrics interconnecting accelerators. Accelerators are logically connected if they are able to access peer memory, even if the access passes through other accelerators. Accelerators are physically connected if there is a direct fabric connection between the two accelerators that allows the accelerators access to peer memory without passing through other accelerators in the fabrics. + +Two accelerators can be checked for logical connectivity using :ref:`zeDeviceCanAccessPeer`\. Support for remote memory access & atomic capabilities can be checked using the :ref:`zeDeviceGetP2PProperties` function. The :ref:`ze-device-p2p-bandwidth-exp-properties-t` extension struct passed to :ref:`zeDeviceGetP2PProperties` as the pNext member of :ref:`ze-device-p2p-properties-t` provides the bandwidth & latency of the connection between the two accelerators both logical as well as physical topology. This bandwidth & latency information can be used to create the logical & physical adjacency matrix representations of the fabric topology. + +The API architecture also exposes the physical topology of scale-up fabrics interconnecting accelerators (exposed as devices and subdevices) and switches in the form of the adjacency graph representation of the fabric topology. Both accelerators and switches are represented as fabric vertices. The physical links that interconnect accelerators and switches are represented as fabric edges. The API supports a hierarchy of fabric vertices and fabric subvertices in keeping with the hierarchy of devices and subdevices. Devices always correspond to fabric vertices while subdevices always correspond to fabric subvertices. Both fabric vertices and fabric subvertices are represented by the same opaque handle. Fabric vertices may be remote, i.e. be associated with accelerator devices on remote nodes. + +Fabric Vertices +--------------- + +A fabric vertex object represents either a physical accelerator or switch in a system that supports Level-Zero. + +- The application may query the number of fabric vertices supported by a driver, and their respective handles, using :ref:`zeFabricVertexGetExp`\. +- The application may also obtain fabric vertex handles directly from the underlying device handles using :ref:`zeDeviceGetFabricVertexExp`\. +- Fabric vertices objects are read-only, global constructs. i.e. multiple calls to :ref:`zeFabricVertexGetExp` or :ref:`zeDeviceGetFabricVertexExp` will return identical fabric vertex handles. +- Fabric vertices may expose sub-vertices that allow finer-grained querying of the topological properties of the system. +- The device represented by a fabric vertex may be obtainable from the fabric vertex handle using :ref:`zeFabricVertexGetDeviceExp`\. +- Fabric vertices may represent remote accelerators or switches, i.e. accelerators or switches on a remote node, that are connected to the accelerators and switches in the local node via scale-out links. Such accelerators cannot be programmed from the local node & the corresponding device handles cannot be obtained from the fabric vertex handles representing the remote accelerator. +- A fabric vertex handle is primarily used for identifying topological properties of the L0 system that can be used for optimization of the algorithm used for compute/communication. + +Fabric Edges +------------ + +A fabric edge object represents one or more physical links between fabric vertices in a system that supports Level-Zero. + +- The application may query the number of fabric edges connected to a fabric vertex, and their respective handles, using :ref:`zeFabricEdgeGetExp`\. +- Fabric edge objects are read-only, global constructs. Multiple calls to :ref:`zeFabricEdgeGetExp` made with the same fabric vertices will return identical fabric edge handles. +- A single fabric edge may represent multiple physical links between two fabric vertices as long as traffic is automatically spread over all links when a single engine is used to drive the transfer. +- A fabric edge handle is primarily used for identifying topological properties of the L0 system that can be used for optimization of the algorithm used for compute/communication. + +Discovery +--------- + +Assuming that the application is using a graph API to construct a graph, the following pseudo-code demonstrates a basic topology discovery sequence: + +.. parsed-literal:: + + // Create graph object + + // Find all fabric vertices & the edges connecting them + ze_fabric_vertex_handle_t* vertices = nullptr; + + uint32_t vertexCount = 0; + :ref:`zeFabricVertexGetExp`\(drivers[0], &vertexCount, nullptr); + + vertices = allocate(vertexCount * sizeof(ze_fabric_vertex_handle_t)); + + :ref:`zeFabricVertexGetExp`\(drivers[0], &vertexCount, vertices); + + // Copy all vertices into graph + + for (u = 0; u < vertexCount; ++u) { + for (v = u + 1; u < vertexCount; ++v) { + + uint32_t edgeCount = 0; + + :ref:`zeFabricEdgeGetExp`\(vertices[u], vertices[v], &edgeCount, nullptr); + + ze_fabric_edge_handle_t* edges = nullptr; + + edges = allocate(edgeCount * sizeof(ze_fabric_edge_handle_t)); + + :ref:`zeFabricEdgeGetExp`\(vertices[u], vertices[v], &edgeCount, edges); + + // Copy edges into graph + + free(edges); + + } + } + + free(vertices); + + ... + +The following diagrams illustrates examples of topologies exposed via the fabric vertex & fabric edge API. + +A six device system with all-to-all connectivity between the devices. + +.. image:: ../images/A21_Vertex.png + +Subvertex discovery reveals that each device in the system is actually composed of two subdevices with two planes of all-to-all connectivity (light-green & dark-green) and one plane of 2-d mesh connectivity (blue) between the subdevices. + +.. image:: ../images/A21_Subvertex.png + +Same as above, but with remote subdevices that manifest as subvertices but do not expose a subdevice handle. + +.. image:: ../images/A21_Subvertex+Remote.png + +The API also supports mixing & matching vertices & subvertices, both local as well as remote in the same set of queries. + +.. image:: ../images/A21_Vertex+Subvertex+Remote.png + +An eight device system with six switches establishing all-to-all connectivity between the devices. + +.. image:: ../images/DGXA100_Vertex.png + diff --git a/level-zero/1.10/_sources/core/EXT_Exp_GlobalOffset.rst b/level-zero/1.10/_sources/core/EXT_Exp_GlobalOffset.rst new file mode 100644 index 0000000..61880bb --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_GlobalOffset.rst @@ -0,0 +1,23 @@ + +:orphan: + +.. _ZE_experimental_global_offset: + +========================= + Global Offset Extension +========================= + +API +---- + +* Functions + + + * :ref:`zeKernelSetGlobalOffsetExp` + + +* Enumerations + + + * :ref:`ze-global-offset-exp-version-t` + diff --git a/level-zero/1.10/_sources/core/EXT_Exp_ImageMemoryProperties.rst b/level-zero/1.10/_sources/core/EXT_Exp_ImageMemoryProperties.rst new file mode 100644 index 0000000..bd29675 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_ImageMemoryProperties.rst @@ -0,0 +1,27 @@ + +:orphan: + +.. _ZE_experimental_image_memory_properties: + +==================================== + Image Memory Properties Extension +==================================== + +API +---- + +* Functions + + * :ref:`zeImageGetMemoryPropertiesExp` + + +* Enumerations + + * :ref:`ze-image-memory-properties-exp-version-t` + + +* Structures + + * :ref:`ze-image-memory-properties-exp-t` + + diff --git a/level-zero/1.10/_sources/core/EXT_Exp_ImageView.rst b/level-zero/1.10/_sources/core/EXT_Exp_ImageView.rst new file mode 100644 index 0000000..6bef6e6 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_ImageView.rst @@ -0,0 +1,28 @@ + + + + +:orphan: + +.. _ZE_experimental_image_view: + +========================= + Image View Extension +========================= + +This experimental extension is deprecated and replaced by the :ref:`ZE_extension_image_view ` standard extension. + +API +---- + +* Functions + + + * :ref:`zeImageViewCreateExp` + + +* Enumerations + + + * :ref:`ze-image-view-exp-version-t` + diff --git a/level-zero/1.10/_sources/core/EXT_Exp_ImageViewPlanar.rst b/level-zero/1.10/_sources/core/EXT_Exp_ImageViewPlanar.rst new file mode 100644 index 0000000..78f59a2 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_ImageViewPlanar.rst @@ -0,0 +1,29 @@ + + + + +:orphan: + +.. _ZE_experimental_image_view_planar: + +============================= + Image View Planar Extension +============================= + +This experimental extension is deprecated and replaced by the :ref:`ZE_extension_image_view_planar ` standard extension. + +API +---- + +* Enumerations + + + * :ref:`ze-image-view-planar-exp-version-t` + + +* Structures + + + * :ref:`ze-image-view-planar-exp-desc-t` + + diff --git a/level-zero/1.10/_sources/core/EXT_Exp_ImmediateCommandListAppend.rst b/level-zero/1.10/_sources/core/EXT_Exp_ImmediateCommandListAppend.rst new file mode 100644 index 0000000..3765359 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_ImmediateCommandListAppend.rst @@ -0,0 +1,25 @@ + +:orphan: + +.. _ZE_experimental_immediate_command_list_append: + +========================================= + Immediate Command List Append Extension +========================================= + +API +---- + +* Enumerations + + * :ref:`ze-immediate-command-list-append-exp-version-t` + +* Functions + + * :ref:`zeCommandListImmediateAppendCommandListsExp` + +=============================== + Immediate Command List Append +=============================== + +This extension allows an application to append one or more command lists to an immediate command list for dispatch. diff --git a/level-zero/1.10/_sources/core/EXT_Exp_ModuleProgram.rst b/level-zero/1.10/_sources/core/EXT_Exp_ModuleProgram.rst new file mode 100644 index 0000000..a7b9b62 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_ModuleProgram.rst @@ -0,0 +1,22 @@ + +:orphan: + +.. _ZE_experimental_module_program: + +========================= + Module Program Extension +========================= + +API +---- + +* Enumerations + + + * :ref:`ze-module-program-exp-version-t` + + +* Structures + + + * :ref:`ze-module-program-exp-desc-t` diff --git a/level-zero/1.10/_sources/core/EXT_Exp_MutableCommandList.rst b/level-zero/1.10/_sources/core/EXT_Exp_MutableCommandList.rst new file mode 100644 index 0000000..48efd8f --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_MutableCommandList.rst @@ -0,0 +1,287 @@ + +:orphan: + +.. _ZE_experimental_mutable_command_list: + +================================ + Mutable Command List Extension +================================ + +API +---- + +* Enumerations + + * :ref:`ze-mutable-command-list-exp-version-t` + * :ref:`ze-mutable-command-exp-flags-t` + * :ref:`ze-mutable-command-list-exp-flags-t` + +* Structures + + * :ref:`ze-mutable-command-id-exp-desc-t` + * :ref:`ze-mutable-command-list-exp-properties-t` + * :ref:`ze-mutable-command-list-exp-desc-t` + * :ref:`ze-mutable-commands-exp-desc-t` + * :ref:`ze-mutable-kernel-argument-exp-desc-t` + * :ref:`ze-mutable-group-count-exp-desc-t` + * :ref:`ze-mutable-group-size-exp-desc-t` + * :ref:`ze-mutable-global-offset-exp-desc-t` + + * :ref:`ze-mutable-graph-argument-exp-desc-t` + +* Functions + + * :ref:`zeCommandListGetNextCommandIdExp` + * :ref:`zeCommandListGetNextCommandIdWithKernelsExp` + * :ref:`zeCommandListUpdateMutableCommandsExp` + * :ref:`zeCommandListUpdateMutableCommandSignalEventExp` + * :ref:`zeCommandListUpdateMutableCommandWaitEventsExp` + * :ref:`zeCommandListUpdateMutableCommandKernelsExp` + + +====================== + Mutable Command List +====================== + +- A mutable command list is created by supplying a :ref:`ze-mutable-command-list-exp-desc-t` object via the `pNext` member of :ref:`ze-command-list-desc-t`\. +- Mutable command lists support mutation to **identified** commands *after* being closed with :ref:`zeCommandListClose`\. +- Implementation support for mutable commands may be discovered by providing a :ref:`ze-mutable-command-list-exp-properties-t` object in the `pNext` member of :ref:`ze-device-properties-t` in a call to :ref:`zeDeviceGetProperties`\. + +.. parsed-literal:: + + // Discover mutable command list properties + :ref:`ze-mutable-command-list-exp-properties-t` mutCmdListProps = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_COMMAND_LIST_EXP_PROPERTIES `\, // stype + nullptr, // pNext + 0, // mutableCommandListFlags + 0 // mutableCommandFlags + }; + + :ref:`ze-device-properties-t` deviceProps = { + :ref:`ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES ` + }; + deviceProps.pNext = &mutCmdListProps; + + :ref:`zeDeviceGetProperties`\(hDevice, &deviceProps); + + // ... + + // Create a mutable command list + :ref:`ze-mutable-command-list-exp-desc-t` mutCmdListDesc = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_COMMAND_LIST_EXP_DESC `\, + nullptr, + 0 // flags + }; + + :ref:`ze-command-list-desc-t` commandListDesc = { + :ref:`ZE_STRUCTURE_TYPE_COMMAND_LIST_DESC `\, + &mutCmdListDesc, + 0, + 0 // flags + }; + + ze_command_list_handle_t hCommandList = nullptr; + :ref:`zeCommandListCreate`\(hContext, hDevice, &commandListDesc, &hCommandList); + + // [ ...create fence, signal event and wait event objects... ] + // This example assumes hFence, hSignalEvent and hWaitEvent have been created. + + // Create kernel from module + :ref:`ze-kernel-desc-t` kernelDesc = { + :ref:`ZE_STRUCTURE_TYPE_KERNEL_DESC `\, + 0, + "example" + }; + ze_kernel_handle_t hKernel = nullptr; + :ref:`ze-result-t` result = :ref:`zeKernelCreate`\(hModule, &kernelDesc, &hKernel); + + // Set the kernel arguments + :ref:`ze-group-count-t` groupSize = {}; + :ref:`zeKernelSuggestGroupSize`\(hKernel, 1024, 1024, 1, &groupSize.groupCountX, &groupSize.groupCountY, &groupSize.groupCountZ); + + int defaultValue = 0; + :ref:`zeKernelSetArgumentValue`\(hKernel, 0, sizeof(int), &defaultValue); + + // Get next command identifier + :ref:`ze-mutable-command-id-exp-desc-t` cmdIdDesc = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_COMMAND_ID_EXP_DESC `\, // stype + nullptr, // pNext + 0 // flags + }; + + uint64_t commandId = 0; + :ref:`zeCommandListGetNextCommandIdExp`\(hCommandList, &cmdIdDesc, &commandId); + + // Encode command into command list + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel, &groupSize, hSignalEvent, 1, &hWaitEvent); + + // Close the command list + :ref:`zeCommandListClose`\(hCommandList); + + // ... + + // Execute the command list + zeCommandQueueExecuteCommandLists(hCommandQueue, 1, &hCommandList, hFence); + + // ... + + +The application may subsequently mutate specific commands, as follows: + +.. parsed-literal:: + + // Prepare to modify group count + :ref:`ze-group-count-t` groupCount = { + 256, // groupCountX + 256, // groupCountY + 1 // groupCountZ + }; + + :ref:`ze-mutable-group-count-exp-desc-t` groupCountDesc = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_GROUP_COUNT_EXP_DESC `\, // stype + nullptr, // pNext + commandId, // commandId + &groupCount // pGroupCount + }; + + // Prepare to modify Kernel Argument + int argValue = 1; + + :ref:`ze-mutable-kernel-argument-exp-desc-t` krnlArgDesc = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_KERNEL_ARGUMENT_EXP_DESC `\, // stype + &groupCountDesc, // pNext + commandId, // commandId + 0, // argIndex + sizeof(int), // argSize + &argValue // pArgValue + }; + + // Prepare to update mutable commands + :ref:`ze-mutable-commands-exp-desc-t` desc = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_COMMANDS_EXP_DESC `\, // stype + &krnlArgDesc, // pNext + 0 // flags + }; + + // Synchronize command list execution + :ref:`zeFenceHostSynchronize`\(hFence, UINT64_MAX); + + // Update mutable commands + :ref:`zeCommandListUpdateMutableCommandsExp`\(hCommandList, &desc); + + // Update signal event for the launch kernel command + :ref:`zeCommandListUpdateMutableCommandSignalEventExp`\(hCommandList, commandId, hNewLaunchKernelSignalEvent); + + // Update the wait events for the launch kernel command + :ref:`zeCommandListUpdateMutableCommandWaitEventsExp`\(hCommandList, commandId, 1, &hNewLaunchKernelWaitEvent); + + // Close the command list + :ref:`zeCommandListClose`\(hCommandList); + + // ... + + +Note, the command list must be explicitly closed after updating mutable commands and events. This informs the implementation that the application has finished with updates and is ready to submit the command list. +In preparation for kernel mutation user must provide all possible kernels for the command. + +.. parsed-literal:: + + // define all possible kernels + ze_kernel_handle_t addKernel; + ze_kernel_handle_t mulKernel; + + ze_kernel_handle_t kernels[] = {addKernel, mulKernel}; + + // when users want kernel mutation, they need to explicitly state this, as 0 does not include kernel instruction mutation by default + :ref:`ze-mutable-command-exp-flags-t` mutationFlags = + :ref:`ZE_MUTABLE_COMMAND_EXP_FLAG_KERNEL_ARGUMENTS ` | + :ref:`ZE_MUTABLE_COMMAND_EXP_FLAG_GROUP_COUNT ` | + :ref:`ZE_MUTABLE_COMMAND_EXP_FLAG_GROUP_SIZE ` | + :ref:`ZE_MUTABLE_COMMAND_EXP_FLAG_KERNEL_INSTRUCTION `\; + + // Get next command identifier + :ref:`ze-mutable-command-id-exp-desc-t` cmdIdDesc = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_COMMAND_ID_EXP_DESC `\, // stype + nullptr, // pNext + mutationFlags // flags + }; + + // retrieve id for the append operation and provide all possible kernels for this command + uint64_t mutableKernelCommandId = 0; + :ref:`zeCommandListGetNextCommandIdWithKernelsExp`\(hCommandList, &cmdIdDesc, &mutableKernelCommandId, 2, kernels); + + // Encode command into command list + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, addKernel, &groupSize, nullptr, 0, nullptr); + + // Close the command list + :ref:`zeCommandListClose`\(hCommandList); + +Mutation of kernels must obey two rules: +- kernel handle mutation function must be called as first for a given command id +- kernel mutation invalidates all kernel arguments and dispatch parameters, these must be provided for the new kernel + +.. parsed-literal:: + + // Update mutable kernel for the command, switch from `addKernel` to `mulKernel` + :ref:`zeCommandListUpdateMutableCommandKernelsExp`\(hCommandList, 1, &mutableKernelCommandId, &mulKernel); + + // modify group count + :ref:`ze-group-count-t` groupCount = { + 32, // groupCountX + 1, // groupCountY + 1 // groupCountZ + }; + + :ref:`ze-mutable-group-count-exp-desc-t` groupCountDesc = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_GROUP_COUNT_EXP_DESC `\, // stype + nullptr, // pNext + mutableKernelCommandId, // commandId + &groupCount // pGroupCount + }; + + :ref:`ze-mutable-group-size-exp-desc-t` groupSizeDesc = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_GROUP_SIZE_EXP_DESC `\, // stype + &groupCountDesc, // pNext + mutableKernelCommandId, // commandId + 32, // groupSizeX + 1, // groupSizeY + 1, // groupSizeZ + }; + + // Prepare to modify Kernel Argument + int argValue = 1; + void *usmPointer; + + :ref:`ze-mutable-kernel-argument-exp-desc-t` krnlArgMemoryDesc = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_KERNEL_ARGUMENT_EXP_DESC `\, // stype + &groupSizeDesc, // pNext + mutableKernelCommandId, // commandId + 0, // argIndex + sizeof(void *), // argSize + &usmPointer // pArgValue + }; + + :ref:`ze-mutable-kernel-argument-exp-desc-t` krnlArgScalarDesc = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_KERNEL_ARGUMENT_EXP_DESC `\, // stype + &krnlArgMemoryDesc, // pNext + mutableKernelCommandId, // commandId + 1, // argIndex + sizeof(int), // argSize + &argValue // pArgValue + }; + + // Prepare to update mutable commands + :ref:`ze-mutable-commands-exp-desc-t` desc = { + :ref:`ZE_STRUCTURE_TYPE_MUTABLE_COMMANDS_EXP_DESC `\, // stype + &krnlArgScalarDesc, // pNext + 0 // flags + }; + + // Update mutable kernel arguments and dispatch parameters for the command + :ref:`zeCommandListUpdateMutableCommandsExp`\(hCommandList, &desc); + + // Close the command list + :ref:`zeCommandListClose`\(hCommandList); + + +The command list must be explicitly closed after updating mutable commands. diff --git a/level-zero/1.10/_sources/core/EXT_Exp_PowerSavingHint.rst b/level-zero/1.10/_sources/core/EXT_Exp_PowerSavingHint.rst new file mode 100644 index 0000000..7a45343 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_PowerSavingHint.rst @@ -0,0 +1,21 @@ + +:orphan: + +.. _ZE_experimental_power_saving_hint: + +============================ + Power Saving Hint Extension +============================ + +API +---- + +* Enumerations + + * :ref:`ze-power-saving-hint-exp-version-t` + + +* Structures + + + * :ref:`ze-context-power-saving-hint-exp-desc-t` diff --git a/level-zero/1.10/_sources/core/EXT_Exp_RTASBuilder.rst b/level-zero/1.10/_sources/core/EXT_Exp_RTASBuilder.rst new file mode 100644 index 0000000..9893ef3 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_RTASBuilder.rst @@ -0,0 +1,340 @@ + +:orphan: + +.. _ZE_experimental_rtas_builder: + +====================================================== + Ray Tracing Acceleration Structure Builder Extension +====================================================== + +API +---- + +* Enumerations + + + * :ref:`ze-rtas-builder-exp-version-t` + * :ref:`ze-rtas-device-exp-flags-t` + * :ref:`ze-rtas-format-exp-t` + * :ref:`ze-rtas-builder-exp-flags-t` + * :ref:`ze-rtas-parallel-operation-exp-flags-t` + * :ref:`ze-rtas-builder-geometry-exp-flags-t` + * :ref:`ze-rtas-builder-instance-exp-flags-t` + * :ref:`ze-rtas-builder-build-op-exp-flags-t` + * :ref:`ze-rtas-builder-build-quality-hint-exp-t` + * :ref:`ze-rtas-builder-geometry-type-exp-t` + * :ref:`ze-rtas-builder-input-data-format-exp-t` + + +* Structures + + + * :ref:`ze-rtas-builder-exp-desc-t` + + * :ref:`ze-rtas-builder-exp-properties-t` + * :ref:`ze-rtas-parallel-operation-exp-properties-t` + * :ref:`ze-rtas-device-exp-properties-t` + + * :ref:`ze-rtas-float3-exp-t` + * :ref:`ze-rtas-transform-float3x4-column-major-exp-t` + * :ref:`ze-rtas-transform-float3x4-aligned-column-major-exp-t` + * :ref:`ze-rtas-transform-float3x4-row-major-exp-t` + * :ref:`ze-rtas-aabb-exp-t` + * :ref:`ze-rtas-triangle-indices-uint32-exp-t` + * :ref:`ze-rtas-quad-indices-uint32-exp-t` + + * :ref:`ze-rtas-builder-geometry-info-exp-t` + * :ref:`ze-rtas-builder-triangles-geometry-info-exp-t` + * :ref:`ze-rtas-builder-quads-geometry-info-exp-t` + * :ref:`ze-rtas-builder-procedural-geometry-info-exp-t` + * :ref:`ze-rtas-builder-instance-geometry-info-exp-t` + + * :ref:`ze-rtas-builder-build-op-exp-desc-t` + + +* Functions + + + * :ref:`zeRTASBuilderCreateExp` + * :ref:`zeRTASBuilderGetBuildPropertiesExp` + * :ref:`zeRTASBuilderBuildExp` + * :ref:`zeRTASBuilderDestroyExp` + + * :ref:`zeDriverRTASFormatCompatibilityCheckExp` + + * :ref:`zeRTASParallelOperationCreateExp` + * :ref:`zeRTASParallelOperationGetPropertiesExp` + * :ref:`zeRTASParallelOperationJoinExp` + * :ref:`zeRTASParallelOperationDestroyExp` + + +============================================ + Ray Tracing Acceleration Structure Builder +============================================ + +The Ray Tracing Acceleration Structure Builder extension provides the functionality to build ray tracing acceleration structures (RTAS) for 3D scenes on the host for use with GPU devices. + +It is the user's responsibility to manage the acceleration structure buffer and scratch buffer resources. The required sizes may be queried via :ref:`zeRTASBuilderGetBuildPropertiesExp`\. Once built, an acceleration structure is a self-contained entity; any input resources may be released after the successful construction. Note that acceleration structures are non-copyable resources. + +Scene Data +----------- + +To build an acceleration structure, first setup a scene that consists of one or more geometry infos. + + - :ref:`ze-rtas-builder-triangles-geometry-info-exp-t` for triangle meshes, + - :ref:`ze-rtas-builder-quads-geometry-info-exp-t` for quad meshes, + - :ref:`ze-rtas-builder-procedural-geometry-info-exp-t` for procedural primitives with attached axis-aligned bounding-box, and + - :ref:`ze-rtas-builder-instance-geometry-info-exp-t` for instances of other acceleration structures. + +The following example creates a :ref:`ze-rtas-builder-triangles-geometry-info-exp-t` to specify a triangle mesh: + +.. parsed-literal:: + + std::vector<:ref:`ze-rtas-triangle-indices-uint32-exp-t`\> triangleIndexBuffer; + std::vector<:ref:`ze-rtas-float3-exp-t`\> triangleVertexBuffer; + + // Populate vertex and index buffers + { + // ... + } + + :ref:`ze-rtas-builder-triangles-geometry-info-exp-t` mesh; + memset(&mesh, 0, sizeof(mesh)); + + mesh.geometryType = :ref:`ZE_RTAS_BUILDER_GEOMETRY_TYPE_EXP_TRIANGLES `\; + mesh.geometryFlags = 0; + mesh.geometryMask = 0xFF; + + mesh.triangleFormat = :ref:`ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXP_TRIANGLE_INDICES_UINT32 `\; + mesh.triangleCount = triangleIndexBuffer.size(); + mesh.triangleStride = sizeof(:ref:`ze-rtas-triangle-indices-uint32-exp-t`\); + mesh.pTriangleBuffer = triangleIndexBuffer.data(); + + mesh.vertexFormat = :ref:`ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXP_FLOAT3 `\; + mesh.vertexCount = triangleVertexBuffer.size(); + mesh.vertexStride = sizeof(:ref:`ze-rtas-float3-exp-t`\); + mesh.pVertexBuffer = triangleVertexBuffer.data(); + +Geometry is considered to be opaque by default, enabling a fast mode where traversal does not return to the caller of ray tracing for each triangle or quad hit. To process each triangle or quad hit by some any-hit shader, the `geometryFlags` member of the geometry infos must include the :ref:`ZE_RTAS_BUILDER_GEOMETRY_EXP_FLAG_NON_OPAQUE ` flag. The proper data formats of the triangle index- and vertex- buffers are specified, including the strides, and a pointer to the first element for each buffer. + +To refer to multiple geometries that make a scene, pointers to geometry info structures can be put into an array as follows: + +.. parsed-literal:: + + std::vector<:ref:`ze-rtas-builder-geometry-info-exp-t`\*> geometries; + geometries.push_back((:ref:`ze-rtas-builder-geometry-info-exp-t`\*)&mesh0); + geometries.push_back((:ref:`ze-rtas-builder-geometry-info-exp-t`\*)&mesh1); + ... + +This completes the definition of the geometry for the scene for which to construct the acceleration structure. + +Device Properties +------------------ + +The next step is to query the target device for acceleration structure properties. + +.. parsed-literal:: + + :ref:`ze-rtas-device-exp-properties-t` rtasDeviceProps; + rtasDeviceProps.stype = :ref:`ZE_STRUCTURE_TYPE_RTAS_DEVICE_EXP_PROPERTIES `\; + rtasDeviceProps.pNext = nullptr; + + :ref:`ze-device-properties-t` deviceProps; + deviceProps.stype = :ref:`ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES `\; + deviceProps.pNext = &rtasDeviceProps; + + :ref:`zeDeviceGetProperties`\(hDevice, &deviceProps); + + +The device properties contain information (a device-specific ray tracing acceleration structure format) that is required to complete an RTAS build operation. + + +Acceleration Structure Builder +------------------------------- + +With the scene data prepared and relevant device properties known, create a ray tracing acceleration structure builder object and query for the necessary build properties. + +.. parsed-literal:: + + :ref:`ze-rtas-builder-exp-desc-t` desc; + desc.stype = :ref:`ZE_STRUCTURE_TYPE_RTAS_BUILDER_EXP_DESC `\; + desc.pNext = nullptr; + desc.builderVersion = :ref:`ZE_RTAS_BUILDER_EXP_VERSION_CURRENT `\; + + ze_rtas_builder_exp_handle_t hBuilder = nullptr; + :ref:`ze-result-t` result = :ref:`zeRTASBuilderCreateExp`\(hDriver, &desc, &hBuilder); + assert(result == :ref:`ZE_RESULT_SUCCESS `\); + + :ref:`ze-rtas-builder-exp-properties-t` builderProps; + builderProps.stype = :ref:`ZE_STRUCTURE_TYPE_RTAS_BUILDER_EXP_PROPERTIES `\; + builderProps.pNext = nullptr; + + :ref:`ze-rtas-builder-build-op-exp-desc-t` buildOpDesc; + buildOpDesc.stype = :ref:`ZE_STRUCTURE_TYPE_RTAS_BUILDER_BUILD_OP_EXP_DESC `\; + buildOpDesc.pNext = nullptr; + buildOpDesc.rtasFormat = rtasDeviceProps.rtasFormat; + buildOpDesc.buildQuality = :ref:`ZE_RTAS_BUILDER_BUILD_QUALITY_HINT_EXP_MEDIUM `\; + buildOpDesc.buildFlags = 0; + buildOpDesc.ppGeometries = geometries.data(); + buildOpDesc.numGeometries = geometries.size(); + + result = :ref:`zeRTASBuilderGetBuildPropertiesExp`\(hBuilder, &buildOpDesc, &builderProps); + assert(result == :ref:`ZE_RESULT_SUCCESS `\); + +Note, the parameters of the build operation descriptor, such as acceleration structure build quality, affect the buffer requirements, etc. + +An application may create and use a single RTAS builder object, as multiple concurrent build operations may be performed with a single such object. + +Buffers +-------- + +With the builder properties along with everything else known at this point, the resources for the acceleration structure may be allocated. + +Scratch Buffer +^^^^^^^^^^^^^^^ + +A system memory scratch buffer is required to perform the build operation. It is used by the implementation for intermediate storage. + +.. parsed-literal:: + + void* pScratchBuffer = malloc(builderProps.scratchBufferSizeBytes); + +Acceleration Structure Buffer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The acceleration structure buffer is where the ray tracing acceleration structure is written to. It must be accessible on the host as well as the device; consequently, it must be allocated as a USM resource. This example uses the worst-case sizing. + +.. parsed-literal:: + + :ref:`ze-raytracing-mem-alloc-ext-desc-t` rtasMemAllocDesc; + rtasMemAllocDesc.stype = :ref:`ZE_STRUCTURE_TYPE_DEVICE_RAYTRACING_EXT_PROPERTIES `\; + rtasMemAllocDesc.pNext = nullptr; + rtasMemAllocDesc.flags = 0; + + :ref:`ze-device-mem-alloc-desc-t` deviceMemAllocDesc; + deviceMemAllocDesc.stype = :ref:`ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC `\; + deviceMemAllocDesc.pNext = &rtasMemAllocDesc; + deviceMemAllocDesc.flags = :ref:`ZE_DEVICE_MEM_ALLOC_FLAG_BIAS_CACHED `\; + deviceMemAllocDesc.ordinal = 0; + + :ref:`ze-host-mem-alloc-desc-t` hostMemAllocDesc; + hostMemAllocDesc.stype = :ref:`ZE_STRUCTURE_TYPE_HOST_MEM_ALLOC_DESC `\; + hostMemAllocDesc.pNext = nullptr; + hostMemAllocDesc.flags = :ref:`ZE_HOST_MEM_ALLOC_FLAG_BIAS_CACHED `\; + + void* pRtasBuffer = nullptr; + result = :ref:`zeMemAllocShared`\(hContext, &deviceMemAllocDesc, &hostMemAllocDesc, builderProps.rtasBufferSizeBytesMaxRequired, rtasDeviceProps.rtasBufferAlignment, hDevice, &pRtasBuffer); + assert(result == :ref:`ZE_RESULT_SUCCESS `\); + +Executing an Acceleration Structure Build +------------------------------------------ + +Single-Threaded Build +^^^^^^^^^^^^^^^^^^^^^^ + +A single-threaded acceleration structure build on the host is initiated using :ref:`zeRTASBuilderBuildExp`\. + +.. parsed-literal:: + + result = :ref:`zeRTASBuilderBuildExp`\(hBuilder, &buildOpDesc, pScratchBuffer, builderProps.scratchBufferSizeBytes, pRtasBuffer, builderProps.rtasBufferSizeBytesMaxRequired, nullptr, nullptr, nullptr, nullptr); + assert(result == :ref:`ZE_RESULT_SUCCESS `\); + +When the build completes successfully the acceleration structure buffer is ready for use by the ray tracing API. + +Parallel Build +^^^^^^^^^^^^^^^ + +In order to speed up the build operation using multiple worker threads, a parallel operation object can be associated with the build operation and joined with the application-provided worker threads as in the following example: + + **Note** + The following example uses `oneTBB `_ to dispatch worker threads, but this is not a requirement. + +.. parsed-literal:: + + ze_rtas_parallel_operation_exp_handle_t hParallelOperation = nullptr; + result = :ref:`zeRTASParallelOperationCreateExp`\(hDriver, &hParallelOperation); + assert(result == :ref:`ZE_RESULT_SUCCESS `\); + + // Initiate the acceleration structure build operation with a handle + // of a parallel operation object. This causes the parallel operation to be + // bound to the build operation and the function returns immediately without + // building any acceleration structure yet. + result = :ref:`zeRTASBuilderBuildExp`\(hBuilder, &buildOpDesc, pScratchBuffer, builderProps.scratchBufferSizeBytes, pRtasBuffer, builderProps.rtasBufferSizeBytesMaxRequired, hParallelOperation, nullptr, nullptr, nullptr); + assert(result == :ref:`ZE_RESULT_EXP_RTAS_BUILD_DEFERRED `\); + + // Once the parallel operation is bound to the build operation the number + // of worker threads to join the parallel operation can be queried. + :ref:`ze-rtas-parallel-operation-exp-properties-t` parallelOpProps; + parallelOpProps.stype = :ref:`ZE_STRUCTURE_TYPE_RTAS_PARALLEL_OPERATION_EXP_PROPERTIES `\; + parallelOpProps.pNext = nullptr; + + result = :ref:`zeRTASParallelOperationGetPropertiesExp`\(hParallelOperation, ¶llelOpProps); + assert(result == :ref:`ZE_RESULT_SUCCESS `\); + + // Now worker threads can join the build operation to perform the actual build + // of the acceleration structure. + tbb::parallel_for(0, parallelOpProps.maxConcurrency, 1, [&](uint32_t i) { + :ref:`ze-result-t` buildResult = :ref:`zeRTASParallelOperationJoinExp`\(hParallelOperation); + assert(buildResult == :ref:`ZE_RESULT_SUCCESS `\); + }); + + // With the parallel operation complete, the parallel operation object can be released. + result = :ref:`zeRTASParallelOperationDestroyExp`\(hParallelOperation); + assert(result == :ref:`ZE_RESULT_SUCCESS `\); + +Note that the number of worker threads to be used can only be queried from the parallel operation object after it is bound to the build operation by the call to :ref:`zeRTASBuilderBuildExp`\. + + +Conservative Acceleration Structure Buffer Size +------------------------------------------------ + +Sizing the acceleration structure buffer using the `rtasBufferSizeBytesMaxRequired` member of :ref:`ze-rtas-builder-exp-properties-t` guarantees that the build operation will not fail due to an out-of-memory condition. However, this size represents the memory requirement for the worst-case scenario and is larger than is typically needed. To reduce memory usage, the application may attempt to execute a build using an acceleration structure buffer sized to the `rtasBufferSizeBytesExpected` member of :ref:`ze-rtas-builder-exp-properties-t`\. When using the expected size, however, it is possible for the build operation to fail with :ref:`ZE_RESULT_EXP_RTAS_BUILD_RETRY `\. If this occurs, the application may resize the acceleration structure buffer with an updated size estimate provided by the builder build API. + +.. parsed-literal:: + + :ref:`ze-result-t` result; + + void* pRtasBuffer = nullptr; + size_t rtasBufferSizeBytes = builderProps.rtasBufferSizeBytesExpected; + + while (true) + { + pRtasBuffer = allocate_accel_buffer(rtasBufferSizeBytes); + + result = :ref:`zeRTASBuilderBuildExp`\(hBuilder, &buildOpDesc, pScratchBuffer, builderProps.scratchBufferSizeBytes, pRtasBuffer, rtasBufferSizeBytes, nullptr, nullptr, nullptr, &rtasBufferSizeBytes); + + if (result == :ref:`ZE_RESULT_SUCCESS `\) + { + break; + } + + assert(result == :ref:`ZE_RESULT_EXP_RTAS_BUILD_RETRY `\); + + free_accel_buffer(pRtasBuffer); + } + +The loop starts with the minimum acceleration buffer size for which the build will mostly likely succeed. If the build runs out of memory, :ref:`ZE_RESULT_EXP_RTAS_BUILD_RETRY ` is returned and the build is retried with a larger acceleration structure buffer. + +The example above passes a pointer to the `rtasBufferSizeBytes` variable as a parameter to the build API, which it will update with a larger acceleration structure buffer size estimate to be used in the next attempt should the build operation fail. Alternatively, the application could increase the acceleration buffer size for the next attempt by some percentage, which could fail again, or just use the maximum size from the builder properties for the second attempt. + +Cleaning Up +------------ + +Once the acceleration structure has been built, any resources associated with the build may be released. Additionally, any parallel operation objects should be destroyed as well as any builder objects. + +.. parsed-literal:: + + // Free the scratch buffer + free(pScratchBuffer); + + // Destroy the builder object + :ref:`zeRTASBuilderDestroyExp`\(hBuilder); + + // Use the acceleration structure buffer with the ray tracing API + { + // ... + } + + // Release the acceleration structure buffer once it is no longer needed + :ref:`zeMemFree`\(hContext, pRtasBuffer); + pRtasBuffer = nullptr; diff --git a/level-zero/1.10/_sources/core/EXT_Exp_RelaxedAllocLimits.rst b/level-zero/1.10/_sources/core/EXT_Exp_RelaxedAllocLimits.rst new file mode 100644 index 0000000..8af78e2 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_RelaxedAllocLimits.rst @@ -0,0 +1,23 @@ + +:orphan: + +.. _ZE_experimental_relaxed_allocation_limits: + +===================================== + Relaxed Allocation Limits Extension +===================================== + +API +---- + +* Enumerations + + + * :ref:`ze-relaxed-allocation-limits-exp-version-t` + * :ref:`ze-relaxed-allocation-limits-exp-flags-t` + + +* Structures + + + * :ref:`ze-relaxed-allocation-limits-exp-desc-t` diff --git a/level-zero/1.10/_sources/core/EXT_Exp_SchedulingHints.rst b/level-zero/1.10/_sources/core/EXT_Exp_SchedulingHints.rst new file mode 100644 index 0000000..3a10f35 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_SchedulingHints.rst @@ -0,0 +1,31 @@ + +:orphan: + +.. _ZE_experimental_scheduling_hints: + +=================================== + Kernel Scheduling Hints Extension +=================================== + +API +---- + +* Functions + + + * :ref:`zeKernelSchedulingHintExp` + + +* Enumerations + + + * :ref:`ze-scheduling-hints-exp-version-t` + * :ref:`ze-scheduling-hint-exp-flags-t` + + +* Structures + + + * :ref:`ze-scheduling-hint-exp-properties-t` + * :ref:`ze-scheduling-hint-exp-desc-t` + diff --git a/level-zero/1.10/_sources/core/EXT_Exp_SubAllocationProperties.rst b/level-zero/1.10/_sources/core/EXT_Exp_SubAllocationProperties.rst new file mode 100644 index 0000000..fa48f8c --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Exp_SubAllocationProperties.rst @@ -0,0 +1,63 @@ + +:orphan: + +.. _ZE_experimental_sub_allocations: + +===================================== + Sub-Allocation Properties Extension +===================================== + +API +---- + +* Enumerations + + + * :ref:`ze-sub-allocations-exp-version-t` + + +* Structures + + + * :ref:`ze-memory-sub-allocations-exp-properties-t` + +Sub-Allocation Properties +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Driver implementations may choose to create a device allocation as a series of sub-allocations. For instance, +an allocation created against a parent device may be allocated internally as set of N sub-allocations, with +N being the number of sub-devices associated with the parent device. + +The sub-allocation properties extension may be used to get the properties, i.e. base address and size, for +each of those sub-allocations. The following pseudo-code demonstrates a basic use-case of this extension: + +.. parsed-literal:: + + :ref:`zeMemAllocDevice`\(context, &desc, size, alignment, device, &ptr); + + :ref:`ze-memory-sub-allocations-exp-properties-t` subAllocationDesc {}; + uitn32_t numberOfSuballocations = 0; + subAllocationDesc.stype = :ref:`ZE_STRUCTURE_TYPE_MEMORY_SUB_ALLOCATIONS_EXP_PROPERTIES `\; + subAllocationDesc.pCount = &numberOfSuballocations; + + :ref:`ze-memory-allocation-properties-t` memAllocProperties {}; + memAllocProperties.stype = :ref:`ZE_STRUCTURE_TYPE_MEMORY_ALLOCATION_PROPERTIES `\; + memAllocProperties.pNext = &subAllocationDesc; + + // Get number of sub-allocations + :ref:`zeMemGetAllocProperties`\(context, ptr, &memAllocProperties, nullptr); + + // if more than 1 sub-allocation, then allocation has been split + if (numberOfSuballocations > 1) { + std::vector<:ref:`ze-sub-allocation-t`\> subAllocationMemAllocProperties(numberOfSuballocations); + subAllocationDesc.pSubAllocations = subAllocationMemAllocProperties.data(); + + :ref:`zeMemGetAllocProperties`\(context, ptr, &memAllocProperties, nullptr); + + // retrieve the properties of each sub-allocation + for (auto &subAllocationProperty : subAllocationMemAllocProperties) { + void * base = subAllocationProperty.base; + size_t size = subAllocationProperty.size; + } + } + ... \ No newline at end of file diff --git a/level-zero/1.10/_sources/core/EXT_FloatAtomics.rst b/level-zero/1.10/_sources/core/EXT_FloatAtomics.rst new file mode 100644 index 0000000..258fdec --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_FloatAtomics.rst @@ -0,0 +1,23 @@ + +:orphan: + +.. _ZE_extension_float_atomics: + +========================= + Float Atomics Extension +========================= + +API +---- + +* Enumerations + + + * :ref:`ze-float-atomics-ext-version-t` + * :ref:`ze-device-fp-atomic-ext-flags-t` + + +* Structures + + + * :ref:`ze-float-atomic-ext-properties-t` diff --git a/level-zero/1.10/_sources/core/EXT_ImageCopy.rst b/level-zero/1.10/_sources/core/EXT_ImageCopy.rst new file mode 100644 index 0000000..99d37db --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_ImageCopy.rst @@ -0,0 +1,66 @@ + +:orphan: + +.. _ZE_extension_image_copy: + +====================================== + Image Copy Extension +====================================== + +API +---- + +* Functions + + + * :ref:`zeCommandListAppendImageCopyToMemoryExt` + * :ref:`zeCommandListAppendImageCopyFromMemoryExt` + + +* Enumerations + + + * :ref:`ze-image-copy-ext-version-t` + +Image Copy +~~~~~~~~~~ + +Sometimes it is desired to copy the contents of an image object to a buffer object, i.e., linear un-formatted memory, e.g., for use in a different library. The :ref:`zeCommandListAppendImageCopyToMemory` API call can be used to for this purpose if no padding is desired in the buffer being written into. The :ref:`zeCommandListAppendImageCopyToMemoryExt` call can be used to copy pixel values from an image object into a destination buffer with padding. Padding can be specified in both row pitch as well as slice pitch for 3D images/2D image arrays. The slice pitch must be set to 0 when performing this operation with 2D images. + +The following psuedo-code demonstrates a sequence for copying a 32x32 region out of an image object to a buffer with row pitch set to 64: + +.. parsed-literal:: + + ... + // Create image region descriptor + :ref:`ze-image-region-t` srcReg = { + 0, // originX + 0, // originY + 0, // originZ + 32, // width + 32, // height + 0 // depth + }; + + + :ref:`ze-result-t` result = :ref:`zeCommandListAppendImageCopyToMemoryExt`\(hCmdList, pDstBuffer, hSrcImage, &srcRegion, 64, 0, nullptr, 0, nullptr); + +Similarly, sometimes it is desired to copy the contents of a buffer object, i.e., linear un-formatted memory, to an image object, e.g., if the contents of the image are being imported from a different library. The :ref:`zeCommandListAppendImageCopyFromMemory` API call can be used to for this purpose if no padding is present in the buffer being read from. The :ref:`zeCommandListAppendImageCopyFromMemoryExt` call can be used to copy pixel values from the source buffer with padding into an image object. Padding can be specified in both row pitch as well as slice pitch for 3D images/2D image arrays. The slice pitch must be set to 0 when performing this operation with 2D images. + +The following psuedo-code demonstrates a sequence for copying a 32x32 region from a buffer with row pitch equal to 64 into an image object with row pitch: + +.. parsed-literal:: + + ... + // Create image region descriptor + :ref:`ze-image-region-t` srcReg = { + 0, // originX + 0, // originY + 0, // originZ + 32, // width + 32, // height + 0 // depth + }; + + + :ref:`ze-result-t` result = :ref:`zeCommandListAppendImageCopyFromMemoryExt`\(hCmdList, hDstImage, pSrcBuffer, &srcRegion, 64, 0, nullptr, 0, nullptr); diff --git a/level-zero/1.10/_sources/core/EXT_ImageQueryAllocProperties.rst b/level-zero/1.10/_sources/core/EXT_ImageQueryAllocProperties.rst new file mode 100644 index 0000000..054deb5 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_ImageQueryAllocProperties.rst @@ -0,0 +1,24 @@ + +:orphan: + +.. _ZE_extension_image_query_alloc_properties: + +=============================================== + Querying Image Allocation Properties Extension +=============================================== + +API +---- + +* Functions + + * :ref:`zeImageGetAllocPropertiesExt` + +* Enumerations + + * :ref:`ze-image-query-alloc-properties-ext-version-t` + +* Structures + + * :ref:`ze-image-allocation-ext-properties-t` + diff --git a/level-zero/1.10/_sources/core/EXT_ImageView.rst b/level-zero/1.10/_sources/core/EXT_ImageView.rst new file mode 100644 index 0000000..6eb83ea --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_ImageView.rst @@ -0,0 +1,23 @@ + +:orphan: + +.. _ZE_extension_image_view: + +========================= + Image View Extension +========================= + +API +---- + +* Functions + + + * :ref:`zeImageViewCreateExt` + + +* Enumerations + + + * :ref:`ze-image-view-ext-version-t` + diff --git a/level-zero/1.10/_sources/core/EXT_ImageViewPlanar.rst b/level-zero/1.10/_sources/core/EXT_ImageViewPlanar.rst new file mode 100644 index 0000000..bb62300 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_ImageViewPlanar.rst @@ -0,0 +1,24 @@ + +:orphan: + +.. _ZE_extension_image_view_planar: + +============================= + Image View Planar Extension +============================= + +API +---- + +* Enumerations + + + * :ref:`ze-image-view-planar-ext-version-t` + + +* Structures + + + * :ref:`ze-image-view-planar-ext-desc-t` + + diff --git a/level-zero/1.10/_sources/core/EXT_KernelMaxGroupSizeProperties.rst b/level-zero/1.10/_sources/core/EXT_KernelMaxGroupSizeProperties.rst new file mode 100644 index 0000000..86ac104 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_KernelMaxGroupSizeProperties.rst @@ -0,0 +1,24 @@ + +:orphan: + +.. _ZE_extension_kernel_max_group_size_properties: + +============================================ + Kernel Max Group Size Properties Extension +============================================ + +API +---- + +* Enumerations + + + * :ref:`ze-kernel-max-group-size-properties-ext-version-t` + + +* Structures + + + * :ref:`ze-kernel-max-group-size-properties-ext-t` + + diff --git a/level-zero/1.10/_sources/core/EXT_LinkOnceODR.rst b/level-zero/1.10/_sources/core/EXT_LinkOnceODR.rst new file mode 100644 index 0000000..090d335 --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_LinkOnceODR.rst @@ -0,0 +1,16 @@ + +:orphan: + +.. _ZE_extension_linkonce_odr: + +============================= + Link Once ODR Extension +============================= + +API +---- + +* Enumerations + + + * :ref:`ze-linkonce-odr-ext-version-t` diff --git a/level-zero/1.10/_sources/core/EXT_LinkageInspection.rst b/level-zero/1.10/_sources/core/EXT_LinkageInspection.rst new file mode 100644 index 0000000..28a10ad --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_LinkageInspection.rst @@ -0,0 +1,63 @@ + +:orphan: + +.. _ZE_extension_linkage_inspection: + +====================================== + Linkage Inspection Extension +====================================== + +API +---- + +* Functions + + + * :ref:`zeModuleInspectLinkageExt` + + +* Enumerations + + + * :ref:`ze-linkage-inspection-ext-version-t` + * :ref:`ze-linkage-inspection-ext-flags-t` + + +* Structures + + + * :ref:`ze-linkage-inspection-ext-desc-t` + +Linkage Inspection +~~~~~~~~~~~~~~~~~~ + +Modules support SPIR-V linkage, i.e., modules can import and export global variables and function definitions to/from other modules. This extension provides an API to inspect the linkage properties & requirements of a collection of modules. + +Modules may require global variables & functions to be imported before all dependencies are satisfied. Modules may also export global variables & functions that can be imported by dependent modules. Additionally, a set of modules may have un-satisfiable import dependencies, i.e., import dependencies that are required by one or modules in the set that are not provided as exports by any other module within the set. If the set of modules is to be dynamically linked using :ref:`zeModuleDynamicLink`\, all un-resolvable import dependencies must be eliminated from the set by adding modules to the set that define the missing import dependencies. + +The ze_module_build_log_handle_t log object returned by the call to :ref:`zeModuleInspectLinkageExt` will contain separate lists of the imports, un-resolvable imports, & exports requested via the appropriate combination of :ref:`ze-linkage-inspection-ext-flags-t` flags. + +The following psuedo-code demonstrates a sequence for inspecting the import dependencies, un-resolvable import dependencies, and exports of a set of modules: + +.. parsed-literal:: + + ... + // Create a linkage inspection descriptor + :ref:`ze-linkage-inspection-ext-desc-t` inspectDesc = {:ref:`ZE_STRUCTURE_TYPE_LINKAGE_INSPECTION_EXT_DESC `\, nullptr, + :ref:`ZE_LINKAGE_INSPECTION_EXT_FLAG_IMPORTS ` | :ref:`ZE_LINKAGE_INSPECTION_EXT_FLAG_UNRESOLVABLE_IMPORTS ` | :ref:`ZE_LINKAGE_INSPECTION_EXT_FLAG_EXPORTS ` + }; + ze_module_build_log_handle_t linkLog; + :ref:`ze-result-t` result = :ref:`zeModuleInspectLinkageExt`\(&inspectDesc, numModules, &hModules, &linkLog); + + size_t szLog = 0; + :ref:`zeModuleBuildLogGetString`\(linkLog, &szLog, nullptr); + + char_t* strLog = allocate(szLog); + :ref:`zeModuleBuildLogGetString`\(linkLog, &szLog, strLog); + + // Save log to disk. + ... + + free(strLog); + + :ref:`zeModuleBuildLogDestroy`\(linkLog); diff --git a/level-zero/1.10/_sources/core/EXT_MemoryCompressionHints.rst b/level-zero/1.10/_sources/core/EXT_MemoryCompressionHints.rst new file mode 100644 index 0000000..19ccdca --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_MemoryCompressionHints.rst @@ -0,0 +1,23 @@ + +:orphan: + +.. _ZE_extension_memory_compression_hints: + +===================================== + Memory Compression Hints Extension +===================================== + +API +---- + +* Enumerations + + + * :ref:`ze-memory-compression-hints-ext-version-t` + * :ref:`ze-memory-compression-hints-ext-flags-t` + + +* Structures + + + * :ref:`ze-memory-compression-hints-ext-desc-t` diff --git a/level-zero/1.10/_sources/core/EXT_MemoryFreePolicies.rst b/level-zero/1.10/_sources/core/EXT_MemoryFreePolicies.rst new file mode 100644 index 0000000..072b5da --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_MemoryFreePolicies.rst @@ -0,0 +1,26 @@ + +:orphan: + +.. _ZE_extension_memory_free_policies: + +================================= + Memory Free Policies Extension +================================= + +API +---- + +* Functions + + * :ref:`zeMemFreeExt` + +* Enumerations + + * :ref:`ze-memory-free-policies-ext-version-t` + * :ref:`ze-driver-memory-free-policy-ext-flags-t` + +* Structures + + * :ref:`ze-driver-memory-free-ext-properties-t` + * :ref:`ze-memory-free-ext-desc-t` + diff --git a/level-zero/1.10/_sources/core/EXT_MemoryProperties.rst b/level-zero/1.10/_sources/core/EXT_MemoryProperties.rst new file mode 100644 index 0000000..9b60aad --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_MemoryProperties.rst @@ -0,0 +1,52 @@ + +:orphan: + +.. _ZE_extension_device_memory_properties: + +====================================== + Device Memory Properties Extension +====================================== + +API +---- + +* Enumerations + + + * :ref:`ze-device-memory-properties-ext-version-t` + * :ref:`ze-device-memory-ext-type-t` + + +* Structures + + + * :ref:`ze-device-memory-ext-properties-t` + +Extended Device Memory Properties +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Users may wish to build a cost model for computation on accelerators exposed through 'oneAPI' Level-Zero. Such cost models require detailed information about the properties of the accelerator such as memory bandwidth. This extension provides extended information about the memories exposed as part of a device. The extension introduces the :ref:`ze-device-memory-ext-properties-t` struct which can be passed to :ref:`zeDeviceGetMemoryProperties` via the `pNext` member of :ref:`ze-device-memory-properties-t`\. + +The following psuedo-code demonstrates a sequence for obtaining extended information about the memory properties of a memory module exposed as part of a device: + +.. parsed-literal:: + + ... + // Discover memories on device + uint32_t memCount = 0; + :ref:`zeDeviceGetMemoryProperties`\(hDevice, &memCount, nullptr); + + // Allocate properties structs + :ref:`ze-device-memory-properties-t`\* pMemProps = allocate(memCount*sizeof(:ref:`ze-device-memory-properties-t`\)); + :ref:`ze-device-memory-ext-properties-t`\* pExtMemProps = allocate(memCount*sizeof(:ref:`ze-device-memory-ext-properties-t`\)); + + // Make pNext in memProps point at corresponding extMemProps + for (uint32_t i = 0; i < memCount; ++i) { + pMemProps[i].stype = :ref:`ZE_STRUCTURE_TYPE_DEVICE_MEMORY_PROPERTIES `\; + pMemProps[i].pNext = &pExtMemProps[i]; + pExtMemProps[i].stype = :ref:`ZE_STRUCTURE_TYPE_DEVICE_MEMORY_EXT_PROPERTIES `\; + pExtMemProps[i].pNext = nullptr; + } + + // Obtain memory & extended memory properties + :ref:`zeDeviceGetMemoryProperties`\(hDevice, &memCount, pMemProps); diff --git a/level-zero/1.10/_sources/core/EXT_PCIProperties.rst b/level-zero/1.10/_sources/core/EXT_PCIProperties.rst new file mode 100644 index 0000000..932227f --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_PCIProperties.rst @@ -0,0 +1,67 @@ + +:orphan: + +.. _ZE_extension_pci_properties: + +====================================== + PCI Properties Extension +====================================== + +API +---- + +* Functions + + + * :ref:`zeDevicePciGetPropertiesExt` + + +* Enumerations + + + * :ref:`ze-pci-properties-ext-version-t` + + +* Structures + + + * :ref:`ze-pci-ext-properties-t` + * :ref:`ze-pci-address-ext-t` + * :ref:`ze-pci-speed-ext-t` + +PCI Properties +~~~~~~~~~~~~~~~~~~ + +Accelerator devices connected to the host CPU over a PCI root complex can be located in the PCI switch fabric using a bus:device:function (BDF) address. This is useful, e.g., to determine which PCI devices are located *close* to each other in the PCI switch fabric. The :ref:`ze-pci-address-ext-t` struct returned via :ref:`ze-pci-ext-properties-t` by the call to :ref:`zeDevicePciGetPropertiesExt` contains the BDF address of the device. + +The choice of the optimal algorithm to use for a given computation may be dependent on the access speed, i.e., bandwidth at which data can be transferred over PCI to the device. The :ref:`ze-pci-speed-ext-t` struct returned via :ref:`ze-pci-ext-properties-t` by the call to :ref:`zeDevicePciGetPropertiesExt` contains the theoretical PCI BW for accessing the device. + +The following psuedo-code demonstrates a sequence for obtaining the BDF address & PCI BW of a device: + +.. parsed-literal:: + + ... + // Create a PCI address struct + :ref:`ze-pci-address-ext-t` devAddr = { + 0, // domain + 0, // bus + 0, // device + 0 // function + }; + // Create a PCI speed struct + :ref:`ze-pci-speed-ext-t` devSpeed = { + 0, // gen + 0, // width + 0 // maxBandwidth + }; + + // Create a PCI Properties struct + :ref:`ze-pci-ext-properties-t` devPCIProps = { + :ref:`ZE_STRUCTURE_TYPE_PCI_EXT_PROPERTIES `\, + nullptr, + devAddr, + devSpeed + }; + + // Get the PCI Address & Speed + :ref:`ze-result-t` result = :ref:`zeDevicePciGetPropertiesExt`\(dev, &devPCIProps); diff --git a/level-zero/1.10/_sources/core/EXT_Raytracing.rst b/level-zero/1.10/_sources/core/EXT_Raytracing.rst new file mode 100644 index 0000000..6d5d42d --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Raytracing.rst @@ -0,0 +1,26 @@ + +:orphan: + +.. _ZE_extension_raytracing: + +========================= + Raytracing Extension +========================= + +API +---- + +* Enumerations + + + * :ref:`ze-raytracing-ext-version-t` + * :ref:`ze-device-raytracing-ext-flags-t` + * :ref:`ze-raytracing-mem-alloc-ext-flags-t` + + +* Structures + + + * :ref:`ze-device-raytracing-ext-properties-t` + * :ref:`ze-raytracing-mem-alloc-ext-desc-t` + diff --git a/level-zero/1.10/_sources/core/EXT_SRGB.rst b/level-zero/1.10/_sources/core/EXT_SRGB.rst new file mode 100644 index 0000000..baa8fea --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_SRGB.rst @@ -0,0 +1,50 @@ + +:orphan: + +.. _ZE_extension_srgb: + +====================================== + sRGB Extension +====================================== + +API +---- + +* Structures + + * :ref:`ze-srgb-ext-desc-t` + +sRGB +~~~~ + +Device capabilities may include native support for sRGB image formats. sRGB images may benefit from hardware acceleration on devices that include native support for sRGB. The following psuedo-code demonstrates a sequence for creating an sRGB image: + +.. parsed-literal:: + + // Specify single component FLOAT32 format + :ref:`ze-image-format-t` format = { + :ref:`ZE_IMAGE_FORMAT_LAYOUT_32 `\, :ref:`ZE_IMAGE_FORMAT_TYPE_FLOAT `\, + :ref:`ZE_IMAGE_FORMAT_SWIZZLE_R `\, :ref:`ZE_IMAGE_FORMAT_SWIZZLE_0 `\, :ref:`ZE_IMAGE_FORMAT_SWIZZLE_0 `\, :ref:`ZE_IMAGE_FORMAT_SWIZZLE_1 ` + }; + + // Specify sRGB image format + :ref:`ze-srgb-ext-desc-t` isSRGB = { + :ref:`ZE_STRUCTURE_TYPE_SRGB_EXT_DESC `\, + nullptr, + true + }; + + :ref:`ze-image-desc-t` imageDesc = { + :ref:`ZE_STRUCTURE_TYPE_IMAGE_DESC `\, + &isSRGB, + 0, // read-only + :ref:`ZE_IMAGE_TYPE_2D `\, + format, + 128, 128, 0, 0, 0 + }; + ze_image_handle_t hImage; + :ref:`zeImageCreate`\(hContext, hDevice, &imageDesc, &hImage); + + // upload contents from host pointer + :ref:`zeCommandListAppendImageCopyFromMemory`\(hCommandList, hImage, nullptr, pImageData, nullptr, 0, nullptr); + ... diff --git a/level-zero/1.10/_sources/core/EXT_Subgroups.rst b/level-zero/1.10/_sources/core/EXT_Subgroups.rst new file mode 100644 index 0000000..b1b912b --- /dev/null +++ b/level-zero/1.10/_sources/core/EXT_Subgroups.rst @@ -0,0 +1,17 @@ + +:orphan: + +.. _ZE_extension_subgroups: + +========================= + Subgroups Extension +========================= + +API +---- + +* Enumerations + + + * :ref:`ze-subgroup-ext-version-t` + diff --git a/level-zero/1.10/_sources/core/INTRO.rst b/level-zero/1.10/_sources/core/INTRO.rst new file mode 100644 index 0000000..c71861c --- /dev/null +++ b/level-zero/1.10/_sources/core/INTRO.rst @@ -0,0 +1,211 @@ + + +============== + Introduction +============== + +Objective +========= + +The objective of the 'oneAPI' Level-Zero Application Programming Interface (API) is to provide direct-to-metal interfaces to offload accelerator devices. +Its programming interface can be tailored to any device needs and can be adapted to support broader set of languages features +such as function pointers, virtual functions, unified memory, and I/O capabilities. + +.. image:: ../images/one_api_sw_stack.png + +Most applications should not require the additional control provided by the Level-Zero API. +The Level-Zero API is intended for providing explicit controls needed by higher-level runtime APIs and libraries. + +While initially influenced by other low-level APIs, such as OpenCL and Vulkan, the Level-Zero APIs are designed to evolve independently. +While initially influenced by GPU architecture, the Level-Zero APIs are designed to be supportable across different compute device architectures, such as FPGAs and other types of accelerator architectures. + +Core +---- + +The Level-Zero core APIs provide the lowest-level, fine-grain and most explicit control over: + + - Device Discovery and Partitioning + - Memory Allocation, Visibility and Caching + - Kernel Execution and Scheduling + - Peer-to-Peer Communication + - Inter-Process Sharing + +See the :ref:`core-programming-guide` for more details. + +Tools +----- + +The Level-Zero tool APIs provide low-level access to device capabilities in order to support both +direct application use and 3rd-party tools: + + - Metrics Discovery and Reporting + - Kernel Profiling, Instrumentation and Debug + +See the :ref:`tools-programming-guide` for more details. + +System Management +----------------- + +The Level-Zero Sysman APIs provide in-band access to the following features for each accelerator device: + + - Query the performance, power and health of accelerator resources + - Control the performance and power profile of accelerator resources + - Maintenance facilities such as performing hardware diagnostics, updating firmware or resetting the device + +By default, only administrator users have permissions to perform control operations on resources. +Most queries are available to any user with the exception of those that could be used for side-channel attacks. +The systems administrator can tighten/relax the default permissions. + +See the :ref:`sysman-programming-guide` for more details. + +Fundamentals +============ + +The following section provides fundamentals of the API design. +For more detailed information, refer to the programming guides and detailed specification pages. + +Header files can be found at: https://github.com/oneapi-src/level-zero + +Terminology +----------- + +This specification uses key words based on `RFC2119 `__ to indicate requirement level. +In particular, the following words are used to describe the actions of an implementation of this specification: + + - **May** - the word *may*, or the adjective *optional*, mean that conforming implementations are permitted to, but need not behave as described. + - **Should** - the word *should*, or the adjective *recommended*, mean that there could be reasons for an implementations to deviate from the behavior described, but that such deviation should be avoided. + - **Must** - the word *must*, or the term *required* or *shall*, mean that the behavior described is an absolute requirement of the specification. + +Naming Convention +----------------- + +The following naming conventions must be followed: + + - All functions must be prefixed with `ze` + - All functions must use camel case `zeObjectAction` convention + - All macros must use all caps `ZE_NAME` convention + - All structures, enumerations and other types must follow `ze_name_t` snake case convention + - All structure members and function parameters must use camel case convention + - All enumerator values must use all caps `ZE_ENUM_ETOR_NAME` convention + - All handle types must end with `handle_t` + - All descriptor structures must end with `desc_t` + - All property structures must end with `properties_t` + - All flag enumerations must end with `flags_t` + +The following coding conventions must be followed: + + - All descriptor structures must be derived from `:ref:`ze-base-desc-t`\` + - All property structures must be derived from `:ref:`ze-base-properties-t`\` + - All function input parameters must precede output parameters + - All functions must return :ref:`ze-result-t` + +Versioning +---------- + +There are multiple versions that should be used by the application to determine compatibility: + +**API Version** - this is the version of the API supported by the device. + + - This is typically used to determine if the device supports the minimum set of APIs required by the application + - There is a single 32-bit value that represents an entire collection of APIs + - The value is encoded with 16-bit Major and 16-bit Minor parts + - Major version increment consist of modified functionality, including deprecate features, and may break backwards-compatibility + - Minor version increment consist of additional functionality, including promoted extensions, and must retain backwards-compatibility + - The value is determined from calling :ref:`zeDriverGetApiVersion` + - The value returned will be the minimum of the :ref:`ze-api-version-t` supported by the device and known by the driver + +**Driver Version** - this is the version of the driver installed in the system. + + - This is typically used to mitigate driver implementation issues for a feature + - The value encoding is vendor-specific but must be monotonically increasing + - The value is determined from calling :ref:`zeDriverGetProperties` + +Error Handling +-------------- + +The following design philosophies are adopted in order to reduce Host-side overhead: + + - By default, the driver implementation may not perform parameter validation of any kind + + + This should be handled by validation layer(s) + + - By default, neither the driver nor device provide may provide any protection against the following: + + + Invalid API programming + + Invalid function arguments + + Function infinite loops or recursions + + Synchronization primitive deadlocks + + Non-visible memory access by the Host or device + + Non-resident memory access by the device + + - The driver implementation is **not** required to perform API validation of any kind + + + The driver should ensure well-behaved applications are not burdened with the overhead needed for non-behaving applications + + Unless otherwise specified, the driver behavior is undefined when APIs are improperly used + + For debug purposes, API validation can be enabled via the loader's validation layer(s) + + - All API functions return :ref:`ze-result-t` + + + This enumeration contains error codes for the Level-Zero APIs and validation layers + + This allows for a consistent pattern on the application side for catching errors; especially when validation layer(s) are enabled + +Multithreading and Concurrency +------------------------------ + +The following design philosophies are adopted in order to maximize Host thread concurrency: + + - APIs are free-threaded when the driver's object handle is different. + + + the driver should avoid thread-locks for these API calls + + - APIs are not thread-safe when the driver's object handle is the same, except when explicitly noted. + + + the application must ensure multiple threads do not enter an API when the handle is the same + + - APIs are not thread-safe with other APIs that use the same driver's object handle + + + the application must ensure multiple threads do not enter these APIs when the handle is the same + + - APIs do not support reference counting of handles. + + + the application must track ownership and explicitly free handles and memory + + the application must ensure that all driver objects and memory are no longer in-use by the device before freeing; otherwise the Host or device may fault + + no implicit garbage collection is supported by the driver + +In general, the API is designed to be free-threaded rather than thread-safe. +This provides multithreaded applications with complete control over both threading and locks. +This also eliminates unnecessary driver overhead for single threaded applications and/or very low latency usages. + +The exception to this rule is that all memory allocation APIs are thread-safe since they allocate from a single global memory pool. +If an application needs lock-free memory allocation, then it could allocate a per-thread pool and implement its own sub-allocator. + +An application is in direct control over all Host thread creation and usage. +The driver should never implicitly create threads. +If there is a need for an implementation to use a background thread, then that thread should be created and provided by the application. + +Each API function must document details on the multithreading requirements for that call. + +The primary usage-model enabled by these rules is: + + - multiple, simultaneous threads may operate on independent driver objects with no implicit thread-locks + - driver object handles may be passed between and used by multiple threads with no implicit thread-locks + +Application Binary Interface +---------------------------- + +The Level-Zero C APIs are provided to applications by a shared import library. +C/C++ applications must include "ze_api.h" and link with "ze_api.lib". +The Level-Zero C Device-Driver Interfaces (DDIs) are provided to the import library by the shared loader and driver libraries. +C/C++ loaders and drivers must include "ze_ddi.h". + +The implementation of these libraries must use the default Application Binary Interface (ABI) of the standard C compiler for the platform. +An ABI in this context means the size, alignment, and layout of C data types; the procedure calling convention; +and the naming convention for shared library symbols corresponding to C functions. The ABI is backward-compatible +for API minor version increments such as adding new functions, appending new enumerators, and using reserved +bits in bitfields. ABI is not guaranteed to be backward-compatible for API major version increments such as +modifying existing function signatures and structures, removing functions and structures, etc. + +On platforms where Level-Zero is provided as a shared library, library symbols beginning with "ze", "zet" or "zes" +and followed by a digit or uppercase letter are reserved for use by the implementation. +Applications which use Level-Zero must not provide definitions of these symbols. +This allows the Level-Zero shared library to be updated with additional symbols for new API versions or extensions without causing symbol conflicts with existing applications. \ No newline at end of file diff --git a/level-zero/1.10/_sources/core/PROG.rst b/level-zero/1.10/_sources/core/PROG.rst new file mode 100644 index 0000000..065169a --- /dev/null +++ b/level-zero/1.10/_sources/core/PROG.rst @@ -0,0 +1,2369 @@ + + + + + +.. _core-programming-guide: + +======================== + Core Programming Guide +======================== + +Drivers and Devices +=================== + +The API architecture exposes both physical and logical abstraction of the underlying devices capabilities. +The device, sub-device and memory are exposed at physical level while command queues, events and +synchronization methods are defined as logical entities. +All logical entities will be bound to device level physical capabilities. + +Device discovery APIs enumerate the accelerators functional features. +These APIs provide interface to query information like compute unit count within the device or sub device, +available memory and affinity to the compute, user managed cache size and work submission command queues. + +Drivers +------- + +A driver object represents a collection of physical devices in the system accessed by the same Level-Zero driver. + +- The application may query the number of Level-Zero drivers installed on the system, and their respective handles, using :ref:`zeDriverGet`\. +- More than one driver may be available in the system. For example, one driver may support two GPUs from one vendor, another driver supports a GPU from a different vendor, and finally a different driver may support an FPGA. +- Driver objects are read-only, global constructs. i.e. Multiple calls to :ref:`zeDriverGet` will return identical driver handles. +- A driver handle is primarily used during device discovery and during creation and management of contexts. + +Device +------ + +A device object represents a physical device in the system that supports Level-Zero. + +- The application may query the number devices supported by a driver, and their respective handles, using :ref:`zeDeviceGet`\. +- Device objects are read-only, global constructs. i.e. Multiple calls to :ref:`zeDeviceGet` will return identical device handles. +- A device handle is primarily used during creation and management of resources that are specific to a device. +- The application is responsible for sharing memory and explicit submission and synchronization across multiple devices. +- Device may expose sub-devices that allow finer-grained control of physical or logical partitions of a device. + +The following diagram illustrates the relationship between the driver, device and other objects described in this document. + +.. image:: ../images/core_device.png + +Level Zero device model hierarchy is composed of **Root Devices** and **Sub-Devices**: A root-device may contain two or more sub-devices and a sub-device shall belong to a single root-device. +A root-device may not contain a single sub-device, as that would be the same root-device. A root device may also be a device with no sub-devices. + +Sub-devices belonging to a root-device may be queried using :ref:`zeDeviceGetSubDevices`\. The root-device of a sub-device may be queried using :ref:`zeDeviceGetRootDevice`\. +The definition of what a root-device and a sub-device is for a specific device is implementation specific. + +Initialization and Discovery +---------------------------- + +The Level-Zero API must be initialized by calling :ref:`zeInit` before calling any other API function. +This function will load all Level-Zero driver(s) in the system into memory for the current process, for use by all Host threads. +Simultaneous calls to :ref:`zeInit` are thread-safe and only one instance of each driver will be loaded. + +The following pseudo-code demonstrates a basic initialization and device discovery sequence: + +.. parsed-literal:: + + // Initialize the driver + :ref:`zeInit`\(0); + + // Discover all the driver instances + uint32_t driverCount = 0; + :ref:`zeDriverGet`\(&driverCount, nullptr); + + ze_driver_handle_t* allDrivers = allocate(driverCount * sizeof(ze_driver_handle_t)); + :ref:`zeDriverGet`\(&driverCount, allDrivers); + + // Find a driver instance with a GPU device + ze_driver_handle_t hDriver = nullptr; + ze_device_handle_t hDevice = nullptr; + for(i = 0; i < driverCount; ++i) { + uint32_t deviceCount = 0; + :ref:`zeDeviceGet`\(allDrivers[i], &deviceCount, nullptr); + + ze_device_handle_t* allDevices = allocate(deviceCount * sizeof(ze_device_handle_t)); + :ref:`zeDeviceGet`\(allDrivers[i], &deviceCount, allDevices); + + for(d = 0; d < deviceCount; ++d) { + :ref:`ze-device-properties-t` device_properties {}; + device_properties.stype = :ref:`ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES `\; + :ref:`zeDeviceGetProperties`\(allDevices[d], &device_properties); + + if(:ref:`ZE_DEVICE_TYPE_GPU ` == device_properties.type) { + hDriver = allDrivers[i]; + hDevice = allDevices[d]; + break; + } + } + + free(allDevices); + if(nullptr != hDriver) { + break; + } + } + + free(allDrivers); + if(nullptr == hDevice) + return; // no GPU devices found + + ... + +Contexts +======== + +A context is a logical object used by the driver for managing all memory, command queues/lists, modules, synchronization objects, etc. + +- A context handle is primarily used during creation and management of resources that may be used by multiple devices. +- For example, memory is not implicitly shared across all devices supported by a driver. However, it is available to be explicitly shared. + +The following pseudo-code demonstrates a basic context creation: + +.. parsed-literal:: + + // Create context + :ref:`ze-context-desc-t` ctxtDesc = { + :ref:`ZE_STRUCTURE_TYPE_CONTEXT_DESC `\, + nullptr, + 0 + }; + :ref:`zeContextCreate`\(hDriver, &ctxtDesc, &hContext); + + +An application may optionally create multiple contexts using :ref:`zeContextCreate`\. + +- The primary usage-model for multiple contexts is isolation of memory and objects for multiple libraries within the same process. +- The same context may be used simultaneously on multiple Host threads. + +The following pseudo-code demonstrates a basic context creation and activation sequence: + +.. parsed-literal:: + + // Create context(s) + :ref:`zeContextCreate`\(hDriver, &ctxtDesc, &hContextA); + :ref:`zeContextCreate`\(hDriver, &ctxtDesc, &hContextB); + + :ref:`zeMemAllocHost`\(hContextA, &desc, 80, 0, &ptrA); + :ref:`zeMemAllocHost`\(hContextB, &desc, 88, 0, &ptrB); + + memcpy(ptrA, ptrB, 0xe); // ok + :ref:`zeMemGetAllocProperties`\(hContextA, ptrB, &props, &hDevice); // illegal: Context A has no knowledge of ptrB + + +If a device was hung or reset, then the context is no longer valid and all APIs will return :ref:`ZE_RESULT_ERROR_DEVICE_LOST ` when any object associated with that context is used. +All pointers to memory allocations and handles to objects (including other contexts) created on the context will be invalid and should no longer be used. +An application can use :ref:`zeContextGetStatus` at any time to check the status of a context. + +In order to recover, the context must be destroyed using :ref:`zeContextDestroy`\. +After the device is reset, the application can create a new context and continue operation. +An application must call :ref:`zeDeviceGetStatus` to confirm the device has been reset and update the OS handle attached to the device handle. +Otherwise, even after the device has been reset, the call to :ref:`zeContextCreate` will fail. + +Memory and Images +================= + +Memory is visible to the upper-level software stack as unified memory with a single virtual address space +covering both the Host and a specific device. + +For GPUs, the API exposes two levels of the device memory hierarchy: + +1. Local Device Memory: can be managed at the device and/or sub device level. +2. Device Cache(s): + + + Last Level Cache (L3) can be controlled through memory allocation APIs. + + Low Level Cache (L1) can be controlled through program language intrinsics. + +The API allows allocation of buffers and images at device and sub device granularity with full cacheablity hints. + +- Buffers are transparent memory accessed through virtual address pointers +- Images are opaque objects accessed through handles + +The memory APIs provide allocation methods to allocate either device, host or shared memory. +The APIs enable both implicit and explicit management of the resources by the application or runtimes. +The interface also provides query capabilities for all memory objects. + +There are two types of allocations: + +1. :ref:`LinearMemory` - linear, unformatted allocations for direct access from both the host and device. +2. :ref:`Images` - non-linear, formatted allocations for direct access from the device. + +.. _LinearMemory: + +Memory +------ + +Linear, unformatted memory allocations are represented as pointers in the host application. +A pointer on the Host has the same size as a pointer on the device. + +Types +~~~~~ + +Three types of allocations are supported. +The type of allocation describes the *ownership* of the allocation: + +1. **Host** allocations are owned by the host and are intended to be allocated out of system memory. + + + Host allocations are accessible by the host and one or more devices. + + The same pointer to a host allocation may be used on the host and all supported devices; they have *address equivalence*. + + Host allocations are not expected to migrate between system memory and device local memory. + + Host allocations trade off wide accessibility and transfer benefits for potentially higher per-access costs, such as over PCI express. + +2. **Device** allocations are owned by a specific device and are intended to be allocated out of device local memory, if present. + + + Device allocations generally trade off access limitations for higher performance. + + With very few exceptions, device allocations may only be accessed by the specific device that they are allocated on, + or copied to another device or Host allocation. + + The same pointer to a device allocation may be used on any supported device. + +3. **Shared** allocations share ownership and are intended to migrate between the host and one or more devices. + + + Shared allocations are accessible by at least the host and an associated device. + + Shared allocations may be accessed by other devices in some cases. + + Shared allocations trade off transfer costs for per-access benefits. + + The same pointer to a shared allocation may be used on the host and all supported devices. + +A **Shared System** allocation is a sub-class of a **Shared** allocation, +where the memory is allocated by a *system allocator* (such as ``malloc`` or ``new``) rather than by an allocation API. +Shared system allocations have no associated device; they are inherently cross-device. +Like other shared allocations, shared system allocations are intended to migrate between the host and supported devices, +and the same pointer to a shared system allocation may be used on the host and all supported devices. + +In summary: + ++-------------------+---------------------------------------+-----------------+----------------------------+----------------+----------+ +| Name | Initial Location | Accessible By | | Migratable To | | ++===================+=======================================+=================+============================+================+==========+ +| **Host** | Host | Host | Yes | Host | N/A | +| | +-----------------+----------------------------+----------------+----------+ +| | | Any Device | Yes (perhaps over PCIe) | Device | No | ++-------------------+---------------------------------------+-----------------+----------------------------+----------------+----------+ +| **Device** | Specific Device | Host | No | Host | No | +| | +-----------------+----------------------------+----------------+----------+ +| | | Specific Device | Yes | Device | N/A | +| | +-----------------+----------------------------+----------------+----------+ +| | | Another Device | Optional (may require p2p) | Another Device | No | ++-------------------+---------------------------------------+-----------------+----------------------------+----------------+----------+ +| **Shared** | Host, Specific Device, or Unspecified | Host | Yes | Host | Yes | +| | +-----------------+----------------------------+----------------+----------+ +| | | Specific Device | Yes | Device | Yes | +| | +-----------------+----------------------------+----------------+----------+ +| | | Another Device | Optional (may require p2p) | Another Device | Optional | ++-------------------+---------------------------------------+-----------------+----------------------------+----------------+----------+ +| **Shared System** | Host | Host | Yes | Host | Yes | +| | +-----------------+----------------------------+----------------+----------+ +| | | Device | Yes | Device | Yes | ++-------------------+---------------------------------------+-----------------+----------------------------+----------------+----------+ + +At a minimum, drivers will assign unique physical pages for each device and shared memory allocation. +However, it is undefined behavior for an application to access memory outside of the allocation size requested. +The actual page size used for an allocation can be queried from :ref:`ze-memory-allocation-properties-t`\.pageSize using :ref:`zeMemGetAllocProperties`\. +Applications should implement usage-specific allocators from device memory pools (e.g., small and/or fixed-sized allocations, lock-free, etc.). + +Furthermore, drivers may *oversubscribe* some **shared** allocations. +When and how such oversubscription occurs, including which allocations are evicted when the working set changes, are considered implementation details. + +Access Capabilities +~~~~~~~~~~~~~~~~~~~ + +Devices may support different access capabilities for each type of allocation. Supported capabilities are: + +1. **Host Allocations**: Assume a buffer allocated on the host via :ref:`zeMemAllocHost` that is accessed from device hDevice: + + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_RW `\: Buffer can be accessed (read from as well as written to) from hDevice as well as from the host. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC `\: Buffer can be atomically accessed from hDevice. Atomic operations may include relaxed consistency read-modify-write atomics and atomic operations that enforce memory consistency for non-atomic operations. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT `\: Buffer can be accessed from hDevice concurrently with another device that also supports concurrent access as well as with the host itself. Concurrent access is at the granularity of the whole allocation. This capability makes no guarantees about coherency or memory consistency. Undefined behavior occurs if concurrent accesses are made to an allocation from devices that do not support concurrent access. Devices that support concurrent access but do not support concurrent atomic access must write to unique non-overlapping memory locations to avoid data races and hence undefined behavior. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC `\: Buffer can be atomically accessed from hDevice concurrently with another device that also supports concurrent atomic access as well as with the host itself. Concurrent atomic access is at the granularity of the whole allocation. Memory consistency can be enforced between the host & devices that support concurrent atomic access using atomic operations. Undefined behavior occurs if concurrent atomic accesses are made to an allocation from devices that do not support concurrent atomic access. + +2. **Device Allocations**: Assume a buffer allocated on device hDevice via :ref:`zeMemAllocDevice`\: + + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_RW `\: Buffer can be accessed (read from as well as written to) from hDevice. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC `\: Buffer can be atomically accessed from hDevice. Atomic operations may include relaxed consistency read-modify-write atomics and atomic operations that enforce memory consistency for non-atomic operations. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT `\: Buffer can be accessed from hDevice concurrently with another device that also supports concurrent access. By symmetry, the buffer could be located on either device and be accessed concurrently from both devices. Concurrent access is at the granularity of the whole allocation. This capability makes no guarantees about coherency or memory consistency. Undefined behavior occurs if concurrent accesses are made to an allocation from devices that do not support concurrent access. Devices that support concurrent access but do not support concurrent atomic access must write to unique non-overlapping memory locations to avoid data races and hence undefined behavior. A device can concurrently access a buffer on another device if both devices support concurrent access and both devices also support peer-to-peer access. If one device does not permit concurrent access, but peer-to-peer access is permitted, then the devices support peer-to-peer access but not concurrently to the same buffer. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC `\: Buffer can be atomically accessed from hDevice concurrently with another device that also supports concurrent atomic access. By symmetry, the buffer could be located on either device and be atomically accessed concurrently from both devices. Concurrent atomic access is at the granularity of the whole allocation. Memory consistency can be enforced between devices that support concurrent atomic access using atomic operations. Undefined behavior occurs if concurrent atomic accesses are made to an allocation from devices that do not support concurrent atomic access. A device can concurrently perform atomic access to a device buffer on another device if both devices support concurrent atomic access and both devices also support peer-to-peer atomic access. If one device does not permit concurrent atomic access, but peer-to-peer atomic access is permitted, then the devices support peer-to-peer atomic access but not concurrently to the same buffer. + +3. **Shared Single Device Allocations**: Assume a shared allocation across the host & device hDevice created via :ref:`zeMemAllocShared` + + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_RW `\: Buffer can be accessed (read from as well as written to) from hDevice as well as from the host. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC `\: Buffer can be atomically accessed from hDevice as well as from the host. Atomic operations may include relaxed consistency read-modify-write atomics and atomic operations that enforce memory consistency for non-atomic operations. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT `\: Buffer can be accessed from hDevice concurrently with the host. Concurrent access is at the granularity of the whole allocation. This capability makes no guarantees about coherency or memory consistency. Undefined behavior occurs if concurrent accesses are made to the allocation from the host and from hDevice if it does not support concurrent access. A devices that supports concurrent access but does not support concurrent atomic access must write to unique non-overlapping (with the host) memory locations to avoid data races and hence undefined behavior. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC `\: Buffer can be atomically accessed from hDevice concurrently with the host. Concurrent atomic access is at the granularity of the whole allocation. Memory consistency can be enforced between devices that support concurrent atomic access using atomic operations. Undefined behavior occurs if concurrent atomic accesses are made to the allocation from the host & hDevice if it does not support concurrent atomic access. + +4. **Shared Cross Device Allocations**: Assume a shared allocation across the host & the set of devices that support cross-device shared access capabilities created via :ref:`zeMemAllocShared` that is accessed from device hDevice: + + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_RW `\: Buffer can be accessed (read from as well as written to) from hDevice as well as from the host. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC `\: Buffer can be atomically accessed from hDevice as well as from the host. Atomic operations may include relaxed consistency read-modify-write atomics and atomic operations that enforce memory consistency for non-atomic operations. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT `\: Buffer can be accessed from hDevice concurrently with another device that also supports concurrent access and from the host. Concurrent access is at the granularity of the whole allocation. This capability makes no guarantees about coherency or memory consistency. Undefined behavior occurs if concurrent accesses are made to an allocation from devices that do not support concurrent access. Devices that support concurrent access but do not support concurrent atomic access must write to unique non-overlapping memory locations to avoid data races and hence undefined behavior. + + :ref:`ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC `\: Buffer can be atomically accessed from hDevice concurrently with another device that also supports concurrent atomic access and from the host. Concurrent atomic access is at the granularity of the whole allocation. Memory consistency can be enforced between devices that support concurrent atomic access using atomic operations. Undefined behavior occurs if concurrent atomic accesses are made to an allocation from devices that do not support concurrent atomic access. + +The required matrix of capabilities are: + ++----------------------------------+-----------+---------------+-------------------+--------------------------+ +| Allocation Type | RW Access | Atomic Access | Concurrent Access | Concurrent Atomic Access | ++==================================+===========+===============+===================+==========================+ +| **Host** | Required | Optional | Optional | Optional | ++----------------------------------+-----------+---------------+-------------------+--------------------------+ +| **Device** | Required | Optional | Optional | Optional | ++----------------------------------+-----------+---------------+-------------------+--------------------------+ +| **Shared** | Required | Optional | Optional | Optional | ++----------------------------------+-----------+---------------+-------------------+--------------------------+ +| **Shared** (Cross-Device) | Optional | Optional | Optional | Optional | ++----------------------------------+-----------+---------------+-------------------+--------------------------+ +| **Shared System** (Cross-Device) | Optional | Optional | Optional | Optional | ++----------------------------------+-----------+---------------+-------------------+--------------------------+ + +Cache Hints, Prefetch, and Memory Advice +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Cacheability hints may be provided via separate host and device allocation flags when memory is allocated. + +**Shared** allocations may be prefetched to a supporting device via the :ref:`zeCommandListAppendMemoryPrefetch` API. +Prefetching may allow memory transfers to be scheduled concurrently with other computations and may improve performance. + +Additionally, an application may provide memory advice for a **shared** allocation via the :ref:`zeCommandListAppendMemAdvise` API, +to override driver heuristics or migration policies. +Memory advice may avoid unnecessary or unprofitable memory transfers and may improve performance. + +Both prefetch and memory advice are asynchronous operations that are appended into command lists. + +Reserved Device Allocations +--------------------------- + +If an application needs finer grained control of physical memory consumption for device allocations then it +can reserve a range of the virtual address space and map this to physical memory as needed. This provides +flexibility for applications to manage large dynamic data structures which can grow and shrink over time +while maintaining optimal physical memory usage. + +Reserving Virtual Address Space +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Virtual memory can be reserved using :ref:`zeVirtualMemReserve`\. The reservation starting address +and size must be page aligned. Applications should query the page size for the allocation +using :ref:`zeVirtualMemQueryPageSize`\. + +The following pseudo-code demonstrates a basic sequence for reserving virtual memory: + +.. parsed-literal:: + + // Query page size for our 1MB allocation. + size_t pageSize; + size_t allocationSize = 1048576; + :ref:`zeVirtualMemQueryPageSize`\(hContext, hDevice, allocationSize, &pageSize); + + // Reserve 1MB of virtual address space. + size_t reserveSize = align(allocationSize, pageSize); + + void* ptr = nullptr; + :ref:`zeVirtualMemReserve`\(hContext, nullptr, reserveSize, &ptr); + +Growing Virtual Address Reservations +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +An application may wish to reserve an address range starting at a specific virtual address. +This may be useful when there is a need to grow a reservation. However, if the +implementation is not able to reserve the new allocation at the requested starting address +then it will find a new suitable range with a different starting address. If the application +requires a specific starting address then the application should ensure that the return +address from :ref:`zeVirtualMemReserve` matches the starting address it wants. If they +are different then the application may want to create a new larger reservation and remap +the physical memory from the first reservation to this new reservation and free the +old reservation. + +.. parsed-literal:: + + // Reserve another 1MB of virtual address space that is contiguous with previous reservation. + void* newptr = (uint8_t*)ptr + reserveSize; + void* retptr; + :ref:`zeVirtualMemReserve`\(hContext, newptr, reserveSize, &retptr); + + if (retptr != newptr) + { + // Free new reservation as it's not what we want due to incorrect starting address. + :ref:`zeVirtualMemFree`\(hContext, retptr, reserveSize); + + // Make new larger 2MB reservation and remap physical pages to this. + size_t pageSize; + size_t largerAllocationSize = 2097152; + :ref:`zeVirtualMemQueryPageSize`\(hContext, hDevice, largerAllocationSize, &pageSize); + + // Reserve 2MB of virtual address space. + size_t largerReserveSize = align(largerAllocationSize, pageSize); + + void* ptr = nullptr; + :ref:`zeVirtualMemReserve`\(hContext, nullptr, largerReserveSize, &ptr); + + // Remap physical pages from original reservation to our new larger reservation. + ... + + // Free original reservation that we were trying to grow. + :ref:`zeVirtualMemFree`\(hContext, ptr, reserveSize); + } + +Physical Memory +~~~~~~~~~~~~~~~ + +Physical memory is explicitly represented in the API as physical memory objects +that are reservations of physical pages. The application will use :ref:`zePhysicalMemCreate` +to create a physical memory object. + +The following pseudo-code demonstrates a basic sequence for creating a physical memory object: + +.. parsed-literal:: + + // Create 1MB physical memory object + ze_physical_mem_handle_t hPhysicalAlloc; + size_t physicalSize = align(allocationSize, pageSize); + :ref:`ze-physical-mem-desc-t` pmemDesc = { + :ref:`ZE_STRUCTURE_TYPE_PHYSICAL_MEM_DESC `\, + nullptr, + 0, // flags + physicalSize // size + }; + + :ref:`zePhysicalMemCreate`\(hContext, hDevice, &pmemDesc, &hPhysicalAlloc); + +Mapping Virtual Memory Pages +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Reserved virtual memory pages can be mapped to physical memory using :ref:`zeVirtualMemMap`\. +An application can map the entire reserved virtual address range or can sparsely map the +reserved virtual address range using one or more physical memory objects. Once mapped, the +physical pages for a physical memory object can be faulted in for devices that support +on-demand paging. In addition, the residency API can be used to control residency of +these physical pages. + +The following pseudo-code demonstrates mapping a 1MB reservation into physical memory: + +.. parsed-literal:: + + // Map entire 1MB reservation and set access to read/write. + :ref:`zeVirtualMemMap`\(hContext, ptr, reserveSize, hPhysicalAlloc, 0, + :ref:`ZE_MEMORY_ACCESS_ATTRIBUTE_READWRITE `\); + + +Access Attributes +~~~~~~~~~~~~~~~~~ +Access attributes can be set for a range of pages when mapping virtual memory +pages with :ref:`zeVirtualMemMap` or with :ref:`zeVirtualMemSetAccessAttribute`\. +In addition, an application can query access attributes for a page aligned +virtual memory range. + +.. parsed-literal:: + + size_t accessRangeSize; + :ref:`ze-memory-access-attribute-t` access; + :ref:`zeVirtualMemGetAccessAttribute`\(hContext, ptr, reserveSize, &access, &accessRangeSize); + + // Expecting entire range to have the same access attribute and it be read/write. + assert(accessRangeSize == reserveSize); + assert(access == :ref:`ZE_MEMORY_ACCESS_ATTRIBUTE_READWRITE `\); + +Sparse Mappings +~~~~~~~~~~~~~~~ + +Applications may desire to reserve large virtual address ranges to make available +to its custom allocators. These ranges can be sparsely mapped using one or more physical +memory objects. It is recommended that the application queries the page size for each +suballocation to ensure the implementation can use an optimal page size for the mappings +based on the alignments used for starting address and size used. + +The following example makes a 1GB reserved allocation and then makes both 128KB and 8MB sub-allocations. + +.. image:: ../images/core_reserved_suballocations.png + +.. parsed-literal:: + + // Reserve 1GB of virtual address space to manage. + size_t pageSize; + size_t allocationSize = 1048576000; + :ref:`zeVirtualMemQueryPageSize`\(hContext, hDevice, allocationSize, &pageSize); + + size_t reserveSize = align(allocationSize, pageSize); + + void* ptr = nullptr; + :ref:`zeVirtualMemReserve`\(hContext, nullptr, reserveSize, &ptr); + + ... + + // Sub-allocate 128KB of our 1GB allocation. + size_t subAllocSize = 131072; + :ref:`zeVirtualMemQueryPageSize`\(hContext, hDevice, subAllocSize, &pageSize); + + // Create physical memory object for our 128KB sub-allocation. + size_t subAllocAlignedSize = align(subAllocSize, pageSize); + :ref:`ze-physical-mem-desc-t` pmemDesc = { + :ref:`ZE_STRUCTURE_TYPE_PHYSICAL_MEM_DESC `\, + nullptr, + 0, // flags + subAllocAlignedSize // size + }; + ze_physical_mem_handle_t hPhysicalAlloc; + :ref:`zePhysicalMemCreate`\(hContext, hDevice, &pmemDesc, &hPhysicalAlloc); + + // Find suitable 128KB sub-allocation that matches page alignments. + ... + + :ref:`zeVirtualMemMap`\(hContext, subAllocPtr, subAllocAlignedSize, hPhysicalAlloc, 0, + :ref:`ZE_MEMORY_ACCESS_ATTRIBUTE_READWRITE `\); + + ... + + // Sub-allocate 8MB of our 1GB allocation. + size_t subAllocDiffSize = 8388608; + :ref:`zeVirtualMemQueryPageSize`\(hContext, hDevice, subAllocDiffSize, &pageSize); + ... + +.. _Images: + +Images +------ + +An image is used to store multi-dimensional and format-defined memory. +An image's contents may be stored in an implementation-specific encoding +and layout in memory for optimal device access +(e.g., tile swizzle patterns, lossless compression, etc.). +There is no support for direct Host access to an image's content. +However, when an image is copied to a Host-accessible memory allocation, +its contents will be implicitly decoded to be implementation-independent. + +.. parsed-literal:: + + // Specify single component FLOAT32 format + :ref:`ze-image-format-t` format = { + :ref:`ZE_IMAGE_FORMAT_LAYOUT_32 `\, :ref:`ZE_IMAGE_FORMAT_TYPE_FLOAT `\, + :ref:`ZE_IMAGE_FORMAT_SWIZZLE_R `\, :ref:`ZE_IMAGE_FORMAT_SWIZZLE_0 `\, :ref:`ZE_IMAGE_FORMAT_SWIZZLE_0 `\, :ref:`ZE_IMAGE_FORMAT_SWIZZLE_1 ` + }; + + :ref:`ze-image-desc-t` imageDesc = { + :ref:`ZE_STRUCTURE_TYPE_IMAGE_DESC `\, + nullptr, + 0, // read-only + :ref:`ZE_IMAGE_TYPE_2D `\, + format, + 128, 128, 0, 0, 0 + }; + ze_image_handle_t hImage; + :ref:`zeImageCreate`\(hContext, hDevice, &imageDesc, &hImage); + + // upload contents from host pointer + :ref:`zeCommandListAppendImageCopyFromMemory`\(hCommandList, hImage, nullptr, pImageData, nullptr, 0, nullptr); + ... + +A format descriptor is a combination of a format layout, type, and a swizzle. +The format layout describes the number of components and their corresponding bit +widths. The type describes the data type for all of these components with some +exceptions that are described below. The swizzles associate how the image +components are mapped into XYZW/RGBA channels of the kernel. It is allowed +to replicate components into the channels. + +The following table describes which types are required for each layout. + ++---------------+-------------+-------------+-------------+-------------+-------------+ +| Format layout | UINT | SINT | UNORM | SNORM | FLOAT | ++===============+=============+=============+=============+=============+=============+ +| 8 | Required | Required | Required | Required | Unsupported | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 8_8 | Required | Required | Required | Required | Unsupported | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 8_8_8_8 | Required | Required | Required | Required | Unsupported | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 16 | Required | Required | Required | Required | Required | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 16_16 | Required | Required | Required | Required | Required | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 16_16_16_16 | Required | Required | Required | Required | Required | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 32 | Required | Required | Required | Required | Required | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 32_32 | Required | Required | Required | Required | Required | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 32_32_32_32 | Required | Required | Required | Required | Required | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 10_10_10_2 | Required | Required | Required | Required | Required | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 11_11_10 | Unsupported | Unsupported | Unsupported | Unsupported | Required | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 5_6_5 | Unsupported | Unsupported | Required | Unsupported | Unsupported | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 5_5_5_1 | Unsupported | Unsupported | Required | Unsupported | Unsupported | ++---------------+-------------+-------------+-------------+-------------+-------------+ +| 4_4_4_4 | Unsupported | Unsupported | Required | Unsupported | Unsupported | ++---------------+-------------+-------------+-------------+-------------+-------------+ + +Device Cache Settings +--------------------- + +There are two methods for device and kernel cache control: + +1. Cache Size Configuration: Ability to configure larger size for SLM vs Data per Kernel instance. +2. Runtime Hint/preference for application to allow access to be Cached or not in Device Caches. For GPU device this is provided via two ways: + + - During Image creation via Flag + - Kernel instruction + +The following pseudo-code demonstrates a basic sequence for Cache size +configuration: + +.. parsed-literal:: + + // Configure cache to support larger SLM + // Note: The cache setting is applied to each kernel. + :ref:`zeKernelSetCacheConfig`\(hKernel, :ref:`ZE_CACHE_CONFIG_FLAG_LARGE_SLM `\); + + +.. _external-memory: + +External Memory Import and Export +--------------------------------- + +External memory handles may be imported from other APIs, or exported for use in other APIs. +Importing and exporting external memory is an optional feature. +Devices may describe the types of external memory handles they support using :ref:`zeDeviceGetExternalMemoryProperties`\. + +Importing and exporting external memory is supported for device and host memory allocations and images. + +The following pseudo-code demonstrates how to allocate and export an external memory handle for a device memory allocation as a Linux dma_buf: + +.. parsed-literal:: + + // Set up the request for an exportable allocation + :ref:`ze-external-memory-export-desc-t` export_desc = { + :ref:`ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_EXPORT_DESC `\, + nullptr, // pNext + :ref:`ZE_EXTERNAL_MEMORY_TYPE_FLAG_DMA_BUF ` + }; + + // Link the request into the allocation descriptor and allocate + alloc_desc.pNext = &export_desc; + :ref:`zeMemAllocDevice`\(hContext, &alloc_desc, size, alignment, hDevice, &ptr); + + ... + + // Set up the request to export the external memory handle + :ref:`ze-external-memory-export-fd-t` export_fd = { + :ref:`ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_EXPORT_FD `\, + nullptr, // pNext + :ref:`ZE_EXTERNAL_MEMORY_TYPE_FLAG_OPAQUE_FD `\, + 0 // [out] fd + }; + + // Link the export request into the query + alloc_props.pNext = &export_fd; + :ref:`zeMemGetAllocProperties`\(hContext, ptr, &alloc_props, nullptr); + +The following pseudo-code demonstrates how to import a Linux dma_buf as an external memory handle for a device memory allocation: + +.. parsed-literal:: + + // Set up the request to import the external memory handle + :ref:`ze-external-memory-import-fd-t` import_fd = { + :ref:`ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMPORT_FD `\, + nullptr, // pNext + :ref:`ZE_EXTERNAL_MEMORY_TYPE_FLAG_DMA_BUF `\, + fd + }; + + // Link the request into the allocation descriptor and allocate + alloc_desc.pNext = &import_fd; + :ref:`zeMemAllocDevice`\(hContext, &alloc_desc, size, alignment, hDevice, &ptr); + +Another example, which the following pseudo-code demonstrates, is how to import a Linux dma_buf as an external +memory handle for :ref:`Images`: + +.. parsed-literal:: + + // Set up the request to import the external memory handle + :ref:`ze-external-memory-import-fd-t` import_fd = { + :ref:`ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMPORT_FD `\, + nullptr, // pNext + :ref:`ZE_EXTERNAL_MEMORY_TYPE_FLAG_DMA_BUF `\, + fd + }; + + // Link the request into the allocation descriptor and allocate + image_desc.pNext = &import_fd; // extend ze_image_desc_t + + // Setup matching image properties for imported image. + image_desc.width = import_width; + ... + + :ref:`zeImageCreate`\(hContext, hDevice, &image_desc, &hImage); + + +Command Queues and Command Lists +================================ + +The following are the motivations for separating a command queue from a command list: + +- Command queues are mostly associated with physical device properties, such as the number of input streams. +- Command queues provide (near) zero-latency access to the device. +- Command lists are mostly associated with Host threads for simultaneous construction. +- Command list construction can occur independently of command queue submission. + +The following diagram illustrates the hierarchy of command lists and command queues to the device: + +.. image:: ../images/core_queue.png + +Command Queue Groups +-------------------- + +A command queue group represents a physical input stream, which represents one or more physical device engines. + + +Discovery +~~~~~~~~~ + +- The number and properties of command queue groups is queried by using :ref:`zeDeviceGetCommandQueueGroupProperties`\. +- The number of physical engines within a group is queried from :ref:`ze-command-queue-group-properties-t`\.numQueues. +- The types of commands supported by the group is queried from :ref:`ze-command-queue-group-properties-t`\.flags. +- For example, if a command list is meant to be submitted to a copy-only engine, + then it must be created using a command queue group ordinal with + :ref:`ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_COPY ` set and :ref:`ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_COMPUTE ` not set, + and submitted to a command queue created using the same ordinal. + +The following pseudo-code demonstrates a basic sequence for discovery of command queue groups: + +.. parsed-literal:: + + // Discover all command queue groups + uint32_t cmdqueueGroupCount = 0; + :ref:`zeDeviceGetCommandQueueGroupProperties`\(hDevice, &cmdqueueGroupCount, nullptr); + + :ref:`ze-command-queue-group-properties-t`\* cmdqueueGroupProperties = (:ref:`ze-command-queue-group-properties-t`\*) + allocate(cmdqueueGroupCount * sizeof(:ref:`ze-command-queue-group-properties-t`\)); + cmdqueueGroupProperties[ i ].stype = :ref:`ZE_STRUCTURE_TYPE_COMMAND_QUEUE_GROUP_PROPERTIES `\; + cmdqueueGroupProperties[ i ].pNext = nullptr; + :ref:`zeDeviceGetCommandQueueGroupProperties`\(hDevice, &cmdqueueGroupCount, cmdqueueGroupProperties); + + + // Find a command queue type that support compute + uint32_t computeQueueGroupOrdinal = cmdqueueGroupCount; + for( uint32_t i = 0; i < cmdqueueGroupCount; ++i ) { + if( cmdqueueGroupProperties[ i ].flags & :ref:`ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_COMPUTE ` ) { + computeQueueGroupOrdinal = i; + break; + } + } + + if(computeQueueGroupOrdinal == cmdqueueGroupCount) + return; // no compute queues found + + +Command Queues +-------------- + +A command queue represents a logical input stream to the device, tied to a physical input stream. + +Creation +~~~~~~~~ + +- At creation time, the command queue is explicitly bound to a command queue group via its ordinal. +- Multiple command queues may be created that use the same command queue group. For example, + an application may create a command queue per Host thread with different scheduling priorities. +- Multiple command queues created for the same command queue group on the same context, + may also share the same physical hardware context. +- The maximum number of command queues an application can create is limited by device-specific + resources; e.g., the maximum number of logical hardware contexts supported by the device. + This can be queried from :ref:`ze-device-properties-t`\.maxHardwareContexts. +- The physical engine within a command queue group on which a command queue executes is virtualized + via its index, limited by the number of physical engines of the type of the command queue group, + i.e. :ref:`ze-command-queue-group-properties-t`\.numQueues. +- The command queue index provides a mechanism for an application to indicate which command queues + can execute concurrently (different indices). +- Command queues that do not share the same index may launch and execute concurrently. +- Command queues that share the same index launch sequentially but may execute concurrently. +- All command lists executed on a command queue are guaranteed to **only** execute on an engine from the + command queue group to which it is assigned; e.g., copy commands in a compute command list / queue will + execute via the compute engine, not the copy engine. +- There is no guarantee that command lists submitted to command queues with different indices will execute concurrently, + only a possibility that they might execute concurrently. + +The following pseudo-code demonstrates a basic sequence for creation of command queues: + +.. parsed-literal:: + + // Create a command queue + :ref:`ze-command-queue-desc-t` commandQueueDesc = { + :ref:`ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC `\, + nullptr, + computeQueueGroupOrdinal, + 0, // index + 0, // flags + :ref:`ZE_COMMAND_QUEUE_MODE_DEFAULT `\, + :ref:`ZE_COMMAND_QUEUE_PRIORITY_NORMAL ` + }; + ze_command_queue_handle_t hCommandQueue; + :ref:`zeCommandQueueCreate`\(hContext, hDevice, &commandQueueDesc, &hCommandQueue); + ... + +Execution +~~~~~~~~~ + +- Command lists submitted to a command queue are **immediately** submitted to the device for execution. +- Submitting multiple commands lists in a single submission allows an implementation the opportunity to optimize across command lists. +- Command queue submission is free-threaded, allowing multiple Host threads to share the same command queue. +- If multiple Host threads enter the same command queue simultaneously, then execution order is undefined. +- Command lists can only be executed on a command queue with an identical command queue group ordinal. +- If a device contains multiple sub-devices, then command lists submitted to a device-level command queue + may be optimized by the driver to fully exploit the concurrency of the sub-devices by distributing command lists across sub-devices. +- If the application prefers to opt-out of these optimizations, such as when the application plans to perform this distribution itself, + then it should use :ref:`ZE_COMMAND_QUEUE_FLAG_EXPLICIT_ONLY `\. Only command lists created using :ref:`ZE_COMMAND_LIST_FLAG_EXPLICIT_ONLY ` + can be executed on a command queue created using :ref:`ZE_COMMAND_QUEUE_FLAG_EXPLICIT_ONLY `\. + + +Destruction +~~~~~~~~~~~ + +- The application is responsible for making sure the device is not currently + executing from a command queue before it is deleted. This is + typically done by tracking command queue fences, but may also be + handled by calling :ref:`zeCommandQueueSynchronize`\. + +Command Lists +------------- + +A command list represents a sequence of commands for execution on a command queue. + +.. _creation-1: + +Creation +~~~~~~~~ + +- A command list is created for a device to allow device-specific appending of commands. +- A command list is created for execution on a specific type of command queue, specified using + the command queue group ordinal. +- A command list can be copied to create another command list. The application may use this + to copy a command list for use on a different device. + +Appending +~~~~~~~~~ + +- There is no implicit binding of command lists to Host threads. Therefore, an + application may share a command list handle across multiple Host threads. However, + the application is responsible for ensuring that multiple Host threads do not access + the same command list simultaneously. +- By default, commands are started in the same order in which they are appended. + However, an application may allow the driver to optimize the ordering by using + :ref:`ZE_COMMAND_LIST_FLAG_RELAXED_ORDERING `\. Reordering is guaranteed to only occur + between barriers and synchronization primitives. +- By default, commands submitted to a command list are optimized for execution by + balancing both device throughput and Host latency. +- For very low-level latency usage-models, applications should use immediate command lists. +- For usage-models where maximum throughput is desired, applications should + use :ref:`ZE_COMMAND_LIST_FLAG_MAXIMIZE_THROUGHPUT `\. This flag will indicate to the driver + it may perform additional device-specific optimizations. +- If a device contains multiple sub-devices, then commands submitted to a device-level + command list may be optimized by the driver to fully exploit the concurrency of the + sub-devices by distributing commands across sub-devices. If the application prefers + to opt-out of these optimizations, such as when the application plans to perform this + distribution itself, then it should use :ref:`ZE_COMMAND_LIST_FLAG_EXPLICIT_ONLY `\. + +The following pseudo-code demonstrates a basic sequence for creation of command lists: + +.. parsed-literal:: + + // Create a command list + :ref:`ze-command-list-desc-t` commandListDesc = { + :ref:`ZE_STRUCTURE_TYPE_COMMAND_LIST_DESC `\, + nullptr, + computeQueueGroupOrdinal, + 0 // flags + }; + ze_command_list_handle_t hCommandList; + :ref:`zeCommandListCreate`\(hContext, hDevice, &commandListDesc, &hCommandList); + ... + +Submission +~~~~~~~~~~ + +- There is no implicit association between a command list and a command queue. + Therefore, a command list may be submitted to any or multiple command queues. +- By definition, a command list cannot be executed concurrently on multiple command queues. +- The application is responsible for calling close before submission to a command queue. +- Command lists do not inherit state from other command lists executed on the same + command queue. i.e. each command list begins execution in its own default state. +- A command list may be submitted multiple times. It is up to the application to ensure + that the command list can be executed multiple times. + For example, events must be explicitly reset prior to re-execution. + +The following pseudo-code demonstrates submission of commands to a command queue, via a command list: + +.. parsed-literal:: + + ... + // finished appending commands (typically done on another thread) + :ref:`zeCommandListClose`\(hCommandList); + + // Execute command list in command queue + :ref:`zeCommandQueueExecuteCommandLists`\(hCommandQueue, 1, &hCommandList, nullptr); + + // synchronize host and device + :ref:`zeCommandQueueSynchronize`\(hCommandQueue, UINT32_MAX); + + // Reset (recycle) command list for new commands + :ref:`zeCommandListReset`\(hCommandList); + ... + +Recycling +~~~~~~~~~ + +- A command list may be recycled to avoid the overhead of frequent creation and destruction. +- The application is responsible for making sure the device is not currently + executing from a command list before it is reset. This should be + handled by tracking a completion event associated with the command list. +- The application is responsible for making sure the device is not currently + executing from a command list before it is deleted. This should be + handled by tracking a completion event associated with the command list. + +Low-Latency Immediate Command Lists +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A special type of command list can be used for very low-latency submission usage-models. + +- An immediate command list is both a command list and an implicit command queue. +- An immediate command list is created using a command queue descriptor. +- Commands appended into an immediate command list are immediately executed on the device. +- Commands appended into an immediate command list may execute synchronously, by blocking until the command is complete. +- An immediate command list is not required to be closed or reset. However, usage will be honored, and expected behaviors will be followed. + +The following pseudo-code demonstrates a basic sequence for creation and usage of immediate command lists: + +.. parsed-literal:: + + // Create an immediate command list + :ref:`ze-command-queue-desc-t` commandQueueDesc = { + :ref:`ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC `\, + nullptr, + computeQueueGroupOrdinal, + 0, // index + 0, // flags + :ref:`ZE_COMMAND_QUEUE_MODE_DEFAULT `\, + :ref:`ZE_COMMAND_QUEUE_PRIORITY_NORMAL ` + }; + ze_command_list_handle_t hCommandList; + :ref:`zeCommandListCreateImmediate`\(hContext, hDevice, &commandQueueDesc, &hCommandList); + + // Immediately submit a kernel to the device + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel, &launchArgs, nullptr, 0, nullptr); + ... + +Synchronization Primitives +========================== + +There are two types of synchronization primitives: + +1. Fences_ - used to communicate to the host that command queue execution has completed. +2. Events_ - used as fine-grain host-to-device, device-to-host or device-to-device execution and memory dependencies. + +The following are the motivations for separating the different types of synchronization primitives: + +- Allows device-specific optimizations for certain types of primitives: + + + Fences may share device memory with all other fences within the same command queue. + + Events may be implemented using pipelined operations as part of the program execution. + + Fences are implicit, coarse-grain execution and memory barriers. + + Events optionally cause fine-grain execution and memory barriers. + +- Allows distinction on which type of primitive may be shared across devices. + +Generally. Events are generic synchronization primitives that can be used across many different usage-models, including those of fences. +However, this generality comes with some cost in memory overhead and efficiency. + +.. _Fences: + +Fences +------ + +A fence is a heavyweight synchronization primitive used to communicate to the host that command list execution has completed. + +- A fence is associated with a single command queue. +- A fence can only be signaled from a device's command queue (e.g. between execution of command lists) and can only be waited upon from the host. +- A fence guarantees both execution completion and memory coherency, across the device and host, prior to being signaled. +- A fence only has two states: not signaled and signaled. +- A fence doesn't implicitly reset. Signaling a signaled fence (or resetting an unsignaled fence) is valid and has no effect on the state of the fence. +- A fence can only be reset from the Host. +- A fence cannot be shared across processes. + +The following pseudo-code demonstrates a sequence for creation, submission and querying of a fence: + +.. parsed-literal:: + + // Create fence + :ref:`ze-fence-desc-t` fenceDesc = { + :ref:`ZE_STRUCTURE_TYPE_FENCE_DESC `\, + nullptr, + 0 // flags + }; + ze_fence_handle_t hFence; + :ref:`zeFenceCreate`\(hCommandQueue, &fenceDesc, &hFence); + + // Execute a command list with a signal of the fence + :ref:`zeCommandQueueExecuteCommandLists`\(hCommandQueue, 1, &hCommandList, hFence); + + // Wait for fence to be signaled + :ref:`zeFenceHostSynchronize`\(hFence, UINT32_MAX); + :ref:`zeFenceReset`\(hFence); + ... + +The primary usage model for fences is to notify the Host when a command list has finished execution to allow: + +- Recycling of memory and images +- Recycling of command lists +- Recycling of other synchronization primitives +- Explicit memory residency. + +The following diagram illustrates fences signaled after command lists on execution: + +.. image:: ../images/core_fence.png + +.. _Events: + +Events +------ + +An event is used to communicate fine-grain host-to-device, device-to-host or device-to-device dependencies have completed. + +- An event can be: + + + Signaled from within a device's command list and waited upon within the same command list + + Signaled from within a device's command list and waited upon from the host, another command queue or another device + + Signaled from the host, and waited upon from within a device's command list. + +- An event only has two states: not signaled and signaled. +- An event doesn't implicitly reset. Signaling a signaled event (or resetting an unsignaled event) is valid and has no effect on the state of the event. +- An event can be explicitly reset from the Host or device. +- An event can be appended into multiple command lists simultaneously. +- An event can be shared across devices and processes. +- An event can invoke an execution and/or memory barrier; which should be used sparingly to avoid device underutilization. +- There are no protections against events causing deadlocks, such as circular waits scenarios. + + + These problems are left to the application to avoid. + +- An event intended to be signaled by the host, another command queue or another device after command list submission to a command queue may prevent subsequent forward progress within the command queue itself. + + + This can create bubbles in the pipeline or deadlock situations if not correctly scheduled. + +An event pool is used for creation of individual events: + +- An event pool reduces the cost of creating multiple events by allowing underlying device allocations to be shared by events with the same properties +- An event pool can be shared via :ref:`inter-process-communication`; allowing sharing blocks of events rather than sharing each individual event + +The following pseudo-code demonstrates a sequence for creation and submission of an event: + +.. parsed-literal:: + + // Create event pool + :ref:`ze-event-pool-desc-t` eventPoolDesc = { + :ref:`ZE_STRUCTURE_TYPE_EVENT_POOL_DESC `\, + nullptr, + :ref:`ZE_EVENT_POOL_FLAG_HOST_VISIBLE `\, // all events in pool are visible to Host + 1 // count + }; + ze_event_pool_handle_t hEventPool; + :ref:`zeEventPoolCreate`\(hContext, &eventPoolDesc, 0, nullptr, &hEventPool); + + :ref:`ze-event-desc-t` eventDesc = { + :ref:`ZE_STRUCTURE_TYPE_EVENT_DESC `\, + nullptr, + 0, // index + 0, // no additional memory/cache coherency required on signal + :ref:`ZE_EVENT_SCOPE_FLAG_HOST ` // ensure memory coherency across device and Host after event completes + }; + ze_event_handle_t hEvent; + :ref:`zeEventCreate`\(hEventPool, &eventDesc, &hEvent); + + // Append a signal of an event into the command list after the kernel executes + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel1, &launchArgs, hEvent, 0, nullptr); + + // Execute the command list with the signal + :ref:`zeCommandQueueExecuteCommandLists`\(hCommandQueue, 1, &hCommandList, nullptr); + + // Wait on event to complete + :ref:`zeEventHostSynchronize`\(hEvent, 0); + ... + +The following diagram illustrates a dependency between command lists using events: + +.. image:: ../images/core_event.png + +Kernel Timestamp Events +~~~~~~~~~~~~~~~~~~~~~~~ + +A kernel timestamp event is a special type of event that records device timestamps at the start and end of the execution of kernels. The primary motivation for kernel timestamps is to provide a duration of execution. For consistency and orthogonality, kernel timestamps are also supported for non-kernel operations. Kernel timestamps execute along a device timeline but because of limited range may wrap unexpectedly. Because of this, the temporal order of two kernel timestamps shouldn't be inferred despite coincidental START/END values. :ref:`zeCommandListAppendWriteGlobalTimestamp` provides a similar mechanism but with maximum range. Timestamps from :ref:`zeCommandListAppendWriteGlobalTimestamp` and kernel timestamp events should not be inferred as equivalent even if reported within identical ranges. + +- The duration of a kernel timestamp for :ref:`zeCommandListAppendSignalEvent` and :ref:`zeEventHostSignal` is undefined. However, for consistency and orthogonality the event will report correctly as signaled when used by other event API functionality. +- A kernel timestamp event result can be queried using either :ref:`zeEventQueryKernelTimestamp` or :ref:`zeCommandListAppendQueryKernelTimestamps` +- The :ref:`ze-kernel-timestamp-result-t` contains both the per-context and global timestamp values at the start and end of the kernel's execution +- Since these counters are only 32bits, the application must detect and handle counter wrapping when calculating execution time + +.. parsed-literal:: + + // Get timestamp frequency + const double timestampFreq = NS_IN_SEC / device_properties.timerResolution; + const uint64_t timestampMaxValue = ~(-1L << device_properties.kernelTimestampValidBits); + + // Create event pool + :ref:`ze-event-pool-desc-t` tsEventPoolDesc = { + :ref:`ZE_STRUCTURE_TYPE_EVENT_POOL_DESC `\, + nullptr, + :ref:`ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP `\, // all events in pool are kernel timestamps + 1 // count + }; + ze_event_pool_handle_t hTSEventPool; + :ref:`zeEventPoolCreate`\(hContext, &tsEventPoolDesc, 0, nullptr, &hTSEventPool); + + :ref:`ze-event-desc-t` tsEventDesc = { + :ref:`ZE_STRUCTURE_TYPE_EVENT_DESC `\, + nullptr, + 0, // index + 0, // no additional memory/cache coherency required on signal + 0 // no additional memory/cache coherency required on wait + }; + ze_event_handle_t hTSEvent; + :ref:`zeEventCreate`\(hEventPool, &tsEventDesc, &hTSEvent); + + // allocate memory for results + :ref:`ze-device-mem-alloc-desc-t` tsResultDesc = { + :ref:`ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC `\, + nullptr, + 0, // flags + 0 // ordinal + }; + :ref:`ze-kernel-timestamp-result-t`\* tsResult = nullptr; + :ref:`zeMemAllocDevice`\(hContext, &tsResultDesc, sizeof(:ref:`ze-kernel-timestamp-result-t`\), sizeof(uint32_t), hDevice, &tsResult); + + // Append a signal of a timestamp event into the command list after the kernel executes + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel1, &launchArgs, hTSEvent, 0, nullptr); + + // Append a query of a timestamp event into the command list + :ref:`zeCommandListAppendQueryKernelTimestamps`\(hCommandList, 1, &hTSEvent, tsResult, nullptr, hEvent, 1, &hTSEvent); + + // Execute the command list with the signal + :ref:`zeCommandQueueExecuteCommandLists`\(hCommandQueue, 1, &hCommandList, nullptr); + + // Wait on event to complete + :ref:`zeEventHostSynchronize`\(hEvent, 0); + + // Calculation execution time(s) + double globalTimeInNs = ( tsResult->global.kernelEnd >= tsResult->global.kernelStart ) + ? ( tsResult->global.kernelEnd - tsResult->global.kernelStart ) * timestampFreq + : (( timestampMaxValue - tsResult->global.kernelStart) + tsResult->global.kernelEnd + 1 ) * timestampFreq; + + double contextTimeInNs = ( tsResult->context.kernelEnd >= tsResult->context.kernelStart ) + ? ( tsResult->context.kernelEnd - tsResult->context.kernelStart ) * timestampFreq + : (( timestampMaxValue - tsResult->context.kernelStart) + tsResult->context.kernelEnd + 1 ) * timestampFreq; + ... + + +Barriers +======== + +There are two types of barriers: + +1. **Execution Barriers** - used to communicate execution dependencies between commands within a command list or across command queues, devices and/or Host. +2. **Memory Barriers** - used to communicate memory coherency dependencies between commands within a command list or across command queues, devices and/or Host. + +The following pseudo-code demonstrates a sequence for submission of a brute-force execution and global memory barrier: + +.. parsed-literal:: + + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel, &launchArgs, nullptr, 0, nullptr); + + // Append a barrier into a command list to ensure hKernel1 completes before hKernel2 begins + :ref:`zeCommandListAppendBarrier`\(hCommandList, nullptr, 0, nullptr); + + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel, &launchArgs, nullptr, 0, nullptr); + ... + +Execution Barriers +------------------ + +Commands executed on a command list are only guaranteed to start in the same order in which they are submitted; i.e. there is no implicit definition of the order of completion. + +- Fences provide implicit, coarse-grain control to indicate that all previous commands must complete prior to the fence being signaled. +- Events provide explicit, fine-grain control over execution dependencies between commands; allowing more opportunities for concurrent execution and higher device utilization. + +The following pseudo-code demonstrates a sequence for submission of a fine-grain execution-only dependency using events: + +.. parsed-literal:: + + :ref:`ze-event-desc-t` event1Desc = { + :ref:`ZE_STRUCTURE_TYPE_EVENT_DESC `\, + nullptr, + 0, // index + 0, // no additional memory/cache coherency required on signal + 0 // no additional memory/cache coherency required on wait + }; + ze_event_handle_t hEvent1; + :ref:`zeEventCreate`\(hEventPool, &event1Desc, &hEvent1); + + // Ensure hKernel1 completes before signaling hEvent1 + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel1, &launchArgs, hEvent1, 0, nullptr); + + // Ensure hEvent1 is signaled before starting hKernel2 + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel2, &launchArgs, nullptr, 1, &hEvent1); + ... + +Memory Barriers +--------------- + +Commands executed on a command list are *not* guaranteed to maintain memory coherency with other commands; +i.e. there is no implicit memory or cache coherency. + +- Fences provide implicit, coarse-grain control to indicate that all caches and memory are coherent across the device and Host prior to the fence being signaled. +- Events provide explicit, fine-grain control over cache and memory coherency dependencies between commands; allowing more opportunities for concurrent execution and higher device utilization. + +The following pseudo-code demonstrates a sequence for submission of a fine-grain memory dependency using events: + +.. parsed-literal:: + + :ref:`ze-event-desc-t` event1Desc = { + :ref:`ZE_STRUCTURE_TYPE_EVENT_DESC `\, + nullptr, + 0, // index + :ref:`ZE_EVENT_SCOPE_FLAG_DEVICE `\, // ensure memory coherency across device before event signaled + 0 // no additional memory/cache coherency required on wait + }; + ze_event_handle_t hEvent1; + :ref:`zeEventCreate`\(hEventPool, &event1Desc, &hEvent1); + + // Ensure hKernel1 memory writes are fully coherent across the device before signaling hEvent1 + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel1, &launchArgs, hEvent1, 0, nullptr); + + // Ensure hEvent1 is signaled before starting hKernel2 + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel2, &launchArgs, nullptr, 1, &hEvent1); + ... + +Range-based Memory Barriers +--------------------------- + +Range-based memory barriers provide explicit control of which cachelines +require coherency. + +The following pseudo-code demonstrates a sequence for submission of a range-based memory barrier: + +.. parsed-literal:: + + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel1, &launchArgs, nullptr, 0, nullptr); + + // Ensure memory range is fully coherent across the device after hKernel1 and before hKernel2 + :ref:`zeCommandListAppendMemoryRangesBarrier`\(hCommandList, 1, &size, &ptr, nullptr, 0, nullptr); + + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel2, &launchArgs, nullptr, 0, nullptr); + ... + +Modules and Kernels +=================== + +There are multiple levels of constructs needed for executing kernels on the device: + +1. Modules_ represent a single translation unit that consists of kernels that have been compiled together. +2. Kernels_ represent the kernel within the module that will be launched directly from a command list. + +The following diagram provides a high-level overview of the major parts +of the system. + +.. image:: ../images/core_module.png + +.. _Modules: + +Modules +------- + +Modules can be created from an IL or directly from native format using :ref:`zeModuleCreate`\. + +- :ref:`zeModuleCreate` takes a format argument that specifies the input format. +- :ref:`zeModuleCreate` performs a compilation step when format is IL. + +The following pseudo-code demonstrates a sequence for creating a module from an OpenCL kernel: + +.. parsed-literal:: + + __kernel void image_scaling( __read_only image2d_t src_img, + __write_only image2d_t dest_img, + uint WIDTH, // resized width + uint HEIGHT ) // resized height + { + int2 coor = (int2)( get_global_id(0), get_global_id(1) ); + float2 normCoor = convert_float2(coor) / (float2)( WIDTH, HEIGHT ); + + float4 color = read_imagef( src_img, SMPL_PREF, normCoor ); + + write_imagef( dest_img, coor, color ); + } + ... + +.. parsed-literal:: + + // OpenCL C kernel has been compiled to SPIRV IL (pImageScalingIL) + :ref:`ze-module-desc-t` moduleDesc = { + :ref:`ZE_STRUCTURE_TYPE_MODULE_DESC `\, + nullptr, + :ref:`ZE_MODULE_FORMAT_IL_SPIRV `\, + ilSize, + pImageScalingIL, + nullptr, + nullptr + }; + ze_module_handle_t hModule; + :ref:`zeModuleCreate`\(hContext, hDevice, &moduleDesc, &hModule, nullptr); + ... + +Module Build Options +~~~~~~~~~~~~~~~~~~~~ + +Module build options can be passed with :ref:`ze-module-desc-t` as a string. + ++--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+----------+----------------+ +| Build Option | Description | Default | Device Support | ++============================================+======================================================================================================================================================+==========+================+ +| -ze-opt-disable | Disable optimizations. | Disabled | All | ++--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+----------+----------------+ +| -ze-opt-level | Specifies optimization level for compiler. Levels are implementation specific. | 2 | All | +| | | | | +| | * 0 is no optimizations (equivalent to ze-opt-disable) | | | +| | * 1 is optimize minimally (may be the same as 2) | | | +| | * 2 is optimize more (default) | | | ++--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+----------+----------------+ +| -ze-opt-greater-than-4GB-buffer-required | Use 64-bit offset calculations for buffers. | Disabled | GPU | ++--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+----------+----------------+ +| -ze-opt-large-register-file | Increase number of registers available to threads. | Disabled | GPU | ++--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+----------+----------------+ +| -ze-opt-has-buffer-offset-arg | Extend stateless to stateful optimization to more cases with the use of additional offset (e.g. 64-bit pointer to binding table with 32-bit offset). | Disabled | GPU | ++--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+----------+----------------+ +| -g | Include debugging information. | Disabled | GPU | ++--------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+----------+----------------+ + + +Module Specialization Constants +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +SPIR-V supports specialization constants that allow certain constants to be updated to new +values during runtime execution. Each specialization constant in SPIR-V has an identifier +and default value. The :ref:`zeModuleCreate` function allows for an array of constants and their +corresponding identifiers to be passed in to override the constants in the SPIR-V module. + +.. parsed-literal:: + + // Spec constant overrides for group size. + :ref:`ze-module-constants-t` specConstants = { + 3, + pGroupSizeIds, + pGroupSizeValues + }; + // OpenCL C kernel has been compiled to SPIRV IL (pImageScalingIL) + :ref:`ze-module-desc-t` moduleDesc = { + :ref:`ZE_STRUCTURE_TYPE_MODULE_DESC `\, + nullptr, + :ref:`ZE_MODULE_FORMAT_IL_SPIRV `\, + ilSize, + pImageScalingIL, + nullptr, + &specConstants + }; + ze_module_handle_t hModule; + :ref:`zeModuleCreate`\(hContext, hDevice, &moduleDesc, &hModule, nullptr); + ... + +Note: Specialization constants are only handled at module create time and therefore if +you need to change them then you'll need to compile a new module. + +Module Build Log +~~~~~~~~~~~~~~~~ + +The :ref:`zeModuleCreate` function can optionally generate a build log object ze_module_build_log_handle_t. + +.. parsed-literal:: + + ... + ze_module_build_log_handle_t buildlog; + :ref:`ze-result-t` result = :ref:`zeModuleCreate`\(hContext, hDevice, &desc, &module, &buildlog); + + // Only save build logs for module creation errors. + if (result != :ref:`ZE_RESULT_SUCCESS `\) + { + size_t szLog = 0; + :ref:`zeModuleBuildLogGetString`\(buildlog, &szLog, nullptr); + + char_t* strLog = allocate(szLog); + :ref:`zeModuleBuildLogGetString`\(buildlog, &szLog, strLog); + + // Save log to disk. + ... + + free(strLog); + } + + :ref:`zeModuleBuildLogDestroy`\(buildlog); + +Dynamically Linked Modules +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Modules may be interdependent, i.e., a module may contain functions and global variables that are used and defined by different modules. Such a module is said to have both import as well as export linkage requirements. Private variables are not transferrable between linked modules, i.e., their visibility is limited to the module in which they are defined. Only global variables or static values passed to linked functions are visible between linked modules. All the import linkage requirements of a module must be satisfied before a kernel can be created from that module. Modules that have no imports do not need to be linked. Dynamically linking modules together is performed using :ref:`zeModuleDynamicLink`\. Modules cannot have ambiguous import dependencies, i.e., imported functions and global variables must only be defined once in any given set of modules passed to :ref:`zeModuleDynamicLink`\. Imports are linked only once. Once all the import dependencies of a module have been linked, the use of that fully import-linked module in subsequent calls to :ref:`zeModuleDynamicLink` will not cause the imports of the module to be re-linked. + +The :ref:`zeModuleDynamicLink` function can optionally generate a link log object ze_module_build_log_handle_t. + + + +.. parsed-literal:: + + ... + ze_module_build_log_handle_t linklog; + :ref:`ze-result-t` result = :ref:`zeModuleDynamicLink`\(numModules, &hModules, &hLinklog); + + // Check if there are linking errors + if (result == :ref:`ZE_RESULT_ERROR_MODULE_LINK_FAILURE `\) { + size_t szLog = 0; + :ref:`zeModuleBuildLogGetString`\(linklog, &szLog, nullptr); + + char_t* strLog = allocate(szLog); + :ref:`zeModuleBuildLogGetString`\(linklog, &szLog, strLog); + + // Save log to disk. + ... + + free(strLog); + } + + :ref:`zeModuleBuildLogDestroy`\(linklog); + +Module Caching with Native Binaries +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Disk caching of modules is not supported by the driver. If a disk cache for modules is desired, then it is the +responsibility of the application to implement this using :ref:`zeModuleGetNativeBinary`\. + +.. parsed-literal:: + + ... + // compute hash for pIL and check cache. + ... + + if (cacheUpdateNeeded) + { + size_t szBinary = 0; + :ref:`zeModuleGetNativeBinary`\(hModule, &szBinary, nullptr); + + uint8_t* pBinary = allocate(szBinary); + :ref:`zeModuleGetNativeBinary`\(hModule, &szBinary, pBinary); + + // cache pBinary for corresponding IL + ... + + free(pBinary); + } + +Also, note that the native binary will retain all debug information that is associated with the module. This allows debug +capabilities for modules that are created from native binaries. + +Built-in Kernels +~~~~~~~~~~~~~~~~ + +Built-in kernels are not supported but can be implemented by an upper level runtime or library using the native binary +interface. + +.. _Kernels: + +Kernels +------- + +A Kernel is a reference to a kernel within a module and it supports both explicit and implicit kernel +arguments along with data needed for launch. + +The following pseudo-code demonstrates a sequence for creating a kernel from a module: + +.. parsed-literal:: + + :ref:`ze-kernel-desc-t` kernelDesc = { + :ref:`ZE_STRUCTURE_TYPE_KERNEL_DESC `\, + nullptr, + 0, // flags + "image_scaling" + }; + ze_kernel_handle_t hKernel; + :ref:`ze-result-t` result = :ref:`zeKernelCreate`\(hModule, &kernelDesc, &hKernel); + + // Check if there are unresolved imports + if (result == :ref:`ZE_RESULT_ERROR_INVALID_MODULE_UNLINKED `\) { + // Un-resolvable import dependencies found in module! + ... + } + + // Check to see if the kernel "image_scaling" was found in the supplied module + if (result == :ref:`ZE_RESULT_ERROR_INVALID_KERNEL_NAME `\) { + // Kernel "image_scaling" not found in module! + ... + } + + ... + +Kernel Properties +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Use :ref:`zeKernelGetProperties` to query invariant properties from a Kernel object. + +.. parsed-literal:: + + ... + :ref:`ze-kernel-properties-t` kernelProperties; + :ref:`zeKernelGetProperties`\(hKernel, &kernelProperties); + ... + +See :ref:`ze-kernel-properties-t` for more information for kernel properties. + +.. _execution-1: + +Execution +--------- + +Kernel Group Size +~~~~~~~~~~~~~~~~~ + +The group size for a kernel can be set using :ref:`zeKernelSetGroupSize`\. If a group size is not +set prior to appending a kernel into a command list then a default will be chosen. +The group size can be updated over a series of append operations. The driver will copy the +group size information when appending the kernel into the command list. + +.. parsed-literal:: + + :ref:`zeKernelSetGroupSize`\(hKernel, groupSizeX, groupSizeY, 1); + + ... + +The API supports a query for suggested group size when providing the global size. This function ignores the +group size that was set on the kernel using :ref:`zeKernelSetGroupSize`\. + +.. parsed-literal:: + + // Find suggested group size for processing image. + uint32_t groupSizeX; + uint32_t groupSizeY; + :ref:`zeKernelSuggestGroupSize`\(hKernel, imageWidth, imageHeight, 1, &groupSizeX, &groupSizeY, nullptr); + + :ref:`zeKernelSetGroupSize`\(hKernel, groupSizeX, groupSizeY, 1); + + ... + +Kernel Arguments +~~~~~~~~~~~~~~~~ + +Kernel arguments represent only the explicit kernel arguments that are within brackets e.g. func(arg1, arg2, ...). + +- Use :ref:`zeKernelSetArgumentValue` to setup arguments for a kernel launch. +- The :ref:`zeCommandListAppendLaunchKernel` et al. functions will make a copy of the kernel arguments to send to the device. +- Kernel arguments can be updated at any time and used across multiple append calls. + +The following pseudo-code demonstrates a sequence for setting kernel arguments and launching the kernel: + +.. parsed-literal:: + + // Bind arguments + :ref:`zeKernelSetArgumentValue`\(hKernel, 0, sizeof(ze_image_handle_t), &src_image); + :ref:`zeKernelSetArgumentValue`\(hKernel, 1, sizeof(ze_image_handle_t), &dest_image); + :ref:`zeKernelSetArgumentValue`\(hKernel, 2, sizeof(uint32_t), &width); + :ref:`zeKernelSetArgumentValue`\(hKernel, 3, sizeof(uint32_t), &height); + + :ref:`ze-group-count-t` launchArgs = { numGroupsX, numGroupsY, 1 }; + + // Append launch kernel + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel, &launchArgs, nullptr, 0, nullptr); + + // Update image pointers to copy and scale next image. + :ref:`zeKernelSetArgumentValue`\(hKernel, 0, sizeof(ze_image_handle_t), &src2_image); + :ref:`zeKernelSetArgumentValue`\(hKernel, 1, sizeof(ze_image_handle_t), &dest2_image); + + // Append launch kernel + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel, &launchArgs, nullptr, 0, nullptr); + + ... + +Kernel Launch +~~~~~~~~~~~~~ + +In order to launch a kernel on the device an application must call one of the AppendLaunchKernel-style functions for +a command list. The most basic version of these is :ref:`zeCommandListAppendLaunchKernel` which takes a +command list, kernel handle, launch arguments, and an optional synchronization event used to signal completion. +The launch arguments contain thread group dimensions. + +.. parsed-literal:: + + // compute number of groups to launch based on image size and group size. + uint32_t numGroupsX = imageWidth / groupSizeX; + uint32_t numGroupsY = imageHeight / groupSizeY; + + :ref:`ze-group-count-t` launchArgs = { numGroupsX, numGroupsY, 1 }; + + // Append launch kernel + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel, &launchArgs, nullptr, 0, nullptr); + +The function :ref:`zeCommandListAppendLaunchKernelIndirect` allows the launch parameters to be supplied indirectly in a +buffer that the device reads instead of the command itself. This allows for the previous operations on the +device to generate the parameters. + +.. parsed-literal:: + + :ref:`ze-group-count-t`\* pIndirectArgs; + + ... + :ref:`zeMemAllocDevice`\(hContext, &desc, sizeof(:ref:`ze-group-count-t`\), sizeof(uint32_t), hDevice, &pIndirectArgs); + + // Append launch kernel - indirect + :ref:`zeCommandListAppendLaunchKernelIndirect`\(hCommandList, hKernel, &pIndirectArgs, nullptr, 0, nullptr); + +Cooperative Kernels +~~~~~~~~~~~~~~~~~~~ + +Cooperative kernels allow sharing of data and synchronization across all launched groups in a safe manner. To support this +there is a :ref:`zeCommandListAppendLaunchCooperativeKernel` that allows launching groups that can cooperate with each other. +The command list must be submitted to a command queue that was created with an ordinal of a command queue group +that has the :ref:`ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_COOPERATIVE_KERNELS ` flags set. The maximum number of groups for a +cooperative kernel launch may be determined by calling :ref:`zeKernelSuggestMaxCooperativeGroupCount`\. + +.. parsed-literal:: + + // query the maximum cooperative kernel launch for the kernel + uint32_t maxGroupCount; + :ref:`zeKernelSuggestMaxCooperativeGroupCount`\(hKernel, &maxGroupCount); + + // the total group count must be smaller than the queried maximum + assert(numGroupsX * numGroupsY * numGroupsZ < maxGroupCount); + + :ref:`ze-group-count-t` launchArgs = { numGroupsX, numGroupsY, numGroupsZ }; + + // Append launch cooperative kernel + :ref:`zeCommandListAppendLaunchCooperativeKernel`\(hCommandList, hKernel, &launchArgs, nullptr, 0, nullptr); + + +Sampler +------- + +The API supports Sampler objects that represent state needed for sampling images from within +kernels. The :ref:`zeSamplerCreate` function takes a sampler descriptor (:ref:`ze-sampler-desc-t`\): + ++-----------------------------------+-----------------------------------------+ +| Sampler Field | Description | ++===================================+=========================================+ +| Address Mode | Determines how out-of-bounds | +| | accesses are handled. See | +| | :ref:`ze-sampler-address-mode-t`\. | ++-----------------------------------+-----------------------------------------+ +| Filter Mode | Specifies which filtering mode to | +| | use. See | +| | :ref:`ze-sampler-filter-mode-t`\. | ++-----------------------------------+-----------------------------------------+ +| Normalized | Specifies whether coordinates for | +| | addressing image are normalized | +| | [0,1] or not. | ++-----------------------------------+-----------------------------------------+ + +The following pseudo-code demonstrates the creation of a sampler object and passing it as a kernel argument: + +.. parsed-literal:: + + // Setup sampler for linear filtering and clamp out of bounds accesses to edge. + :ref:`ze-sampler-desc-t` desc = { + :ref:`ZE_STRUCTURE_TYPE_SAMPLER_DESC `\, + nullptr, + :ref:`ZE_SAMPLER_ADDRESS_MODE_CLAMP `\, + :ref:`ZE_SAMPLER_FILTER_MODE_LINEAR `\, + false + }; + ze_sampler_handle_t sampler; + :ref:`zeSamplerCreate`\(hContext, hDevice, &desc, &sampler); + ... + + // The sampler can be passed as a kernel argument. + :ref:`zeKernelSetArgumentValue`\(hKernel, 0, sizeof(ze_sampler_handle_t), &sampler); + + // Append launch kernel + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel, &launchArgs, nullptr, 0, nullptr); + +Formatted Output +---------------- + +The API supports the ability to print formatted output from a kernel using functions such as ``printf``. +Calls to print formatted output will cause data to be written to an internal buffer, where the size of the internal buffer is given by :ref:`ze-device-module-properties-t`\.printfBufferSize. +When the internal buffer becomes full, additional calls to print formatted output will return an error code. + +There is no ordering guarantee for the formatted output. +If multiple work-items make multiple calls to ``printf``, the output from one work-item may appear intermixed with output from other work-items. + +On some devices, the internal buffer may not contain the formatted output itself, and instead the formatting may occur on the host. +Additionally, the final formatting may not occur and the output may not be flushed to the output stream until the event associated with the kernel launch is complete. +To ensure all output has been flushed to the output stream, wait on the event associated with the kernel launch, or wait for the kernel launch to complete using a coarser-grained synchronization method such as :ref:`zeFenceHostSynchronize` or :ref:`zeCommandQueueSynchronize`\. + +Advanced +======== + +Environment Variables +--------------------- + +The following table documents the supported knobs for overriding default functional behavior. + + + ++-----------------+-------------------------------------+-----------------------------------+-----------------------------------------------------------------------------------+ +| Category | Name | Values | Description | ++=================+=====================================+===================================+===================================================================================+ +| Device | ZE_FLAT_DEVICE_HIERARCHY | {**COMPOSITE**, FLAT, COMBINED} | Defines device hierarchy model exposed by Level Zero driver implementation | ++ +-------------------------------------+-----------------------------------+-----------------------------------------------------------------------------------+ +| | ZE_AFFINITY_MASK | list | Forces driver to only report devices (and sub-devices) as specified by values | ++ +-------------------------------------+-----------------------------------+-----------------------------------------------------------------------------------+ +| | ZE_ENABLE_PCI_ID_DEVICE_ORDER | {**0**, 1} | Forces driver to report devices from lowest to highest PCI bus ID | ++-----------------+-------------------------------------+-----------------------------------+-----------------------------------------------------------------------------------+ +| Memory | ZE_SHARED_FORCE_DEVICE_ALLOC | {**0**, 1} | Forces all shared allocations into device memory | ++-----------------+-------------------------------------+-----------------------------------+-----------------------------------------------------------------------------------+ + + +Device Hierarchy +~~~~~~~~~~~~~~~~ + +ZE_FLAT_DEVICE_HIERARCHY allows users to select the device hierarchy model with which the underlying hardware is exposed and the types of devices returned with :ref:`zeDeviceGet`\. + +When setting to `COMPOSITE`, :ref:`zeDeviceGet` returns all the devices that do not have a root-device. Traversing the device hierarchy is possible by querying sub-devices with :ref:`zeDeviceGetSubDevices` and root-devices with :ref:`zeDeviceGetRootDevice`\. Driver implementation may perform implicit optimizations to submissions and allocations done in the root-devices. + +When setting to `FLAT`, :ref:`zeDeviceGet` returns all the devices that do not have sub-devices. Traversing the device hierarchy is **not** possible, with :ref:`zeDeviceGetSubDevices` returning always a count of 0 device handles and :ref:`zeDeviceGetRootDevice` returning nullptr. This mode allows Level Zero driver implementations to optimize execution and memory allocations by removing any overhead required to account for simultaneous use of root-devices and sub-devices in the same application. + +When setting to `COMBINED`, :ref:`zeDeviceGet` returns all the devices that do not have sub-devices. Traversing the device hierarchy is possible by querying sub-devices with :ref:`zeDeviceGetSubDevices` and root-devices with :ref:`zeDeviceGetRootDevice`\. Driver implementation may perform implicit optimizations to submissions and allocations done in the root-devices. + +Devices returned by SYSMAN APIs are not affected by ZE_FLAT_DEVICE_HIERARCHY and always return the top-level device handles corresponding to the physical devices. + + +Affinity Mask +~~~~~~~~~~~~~ + +The affinity mask allows an application or tool to restrict which devices, and sub-devices, are visible to 3rd-party libraries or applications in another process, respectively. +The affinity mask affects the number of handles returned from :ref:`zeDeviceGet` and :ref:`zeDeviceGetSubDevices`\. +The affinity mask is specified via an environment variable as a comma-seperated list of device and/or subdevice ordinals. +The values are specific to system configuration; e.g., the number of devices and the number of sub-devices for each device. +The values are specific to the order in which devices are reported by the driver; i.e., the first device maps to ordinal 0, the second device to ordinal 1, and so forth. +If the affinity mask is not set, then all devices and sub-devices are reported; as is the default behavior. + +The affinity mask masks the devices as defined by value set in the ZE_FLAT_DEVICE_HIERARCHY environment variable, i.e., a Level Zero driver shall read +first ZE_FLAT_DEVICE_HIERARCHY to determine the device handles to be used by the application and then interpret the values passed in ZE_AFFINITY_MASK +based on the device model selected. + +The order of the devices reported by the :ref:`zeDeviceGet` is implementation-specific and not affected by the order of devices in the affinity mask. + +The order of the devices reported by the :ref:`zeDeviceGet` can be forced to be consistent by setting the ZE_ENABLE_PCI_ID_DEVICE_ORDER environment variable. + + +The following examples demonstrate proper usage for a system configuration composed of two physical devices, each of which can be further +sub-divided into four smaller devices. For the purpose of these examples, we will refer to the two physical devices as `parent devices` +and to the smaller sub-devices as `tiles`. + +When setting the ZE_AFFINITY_MASK with different values, and ZE_FLAT_DEVICE_HIERARCHY to `COMPOSITE`, the following scenarios may occur: + +ZE_AFFINITY_MASK = `0, 1`: all parent devices and tiles are reported (same as default): + ++---------------+------+---------+----------------------------------------+ +| Parent Device | Tile | Exposed | Device Handle Used | ++===============+======+=========+========================================+ +| 0 | 0 | Yes | Device handle 0, sub-device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 0 | 1 | Yes | Device handle 0, sub-device handle 1 | ++---------------+------+---------+----------------------------------------+ +| 0 | 2 | Yes | Device handle 0, sub-device handle 2 | ++---------------+------+---------+----------------------------------------+ +| 0 | 3 | Yes | Device handle 0, sub-device handle 3 | ++---------------+------+---------+----------------------------------------+ +| 1 | 0 | Yes | Device handle 1, sub-device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 1 | 1 | Yes | Device handle 1, sub-device handle 1 | ++---------------+------+---------+----------------------------------------+ +| 1 | 2 | Yes | Device handle 1, sub-device handle 2 | ++---------------+------+---------+----------------------------------------+ +| 1 | 3 | Yes | Device handle 1, sub-device handle 3 | ++---------------+------+---------+----------------------------------------+ + +ZE_AFFINITY_MASK = `0`: only parent device 0 is reported as device handle 0, with all its tiles reported as sub-device handles: + ++---------------+------+---------+----------------------------------------+ +| Parent Device | Tile | Exposed | Device Handle Used | ++===============+======+=========+========================================+ +| 0 | 0 | Yes | Device handle 0, sub-device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 0 | 1 | Yes | Device handle 0, sub-device handle 1 | ++---------------+------+---------+----------------------------------------+ +| 0 | 2 | Yes | Device handle 0, sub-device handle 2 | ++---------------+------+---------+----------------------------------------+ +| 0 | 3 | Yes | Device handle 0, sub-device handle 3 | ++---------------+------+---------+----------------------------------------+ +| 1 | 0 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 3 | No | | ++---------------+------+---------+----------------------------------------+ + + +ZE_AFFINITY_MASK = `1`: only parent device 1 is reported as device handle 0, with all its tiles reported as sub-device handles: + ++---------------+------+---------+----------------------------------------+ +| Parent Device | Tile | Exposed | Device Handle Used | ++===============+======+=========+========================================+ +| 0 | 0 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 3 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 0 | Yes | Device handle 0, sub-device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 1 | 1 | Yes | Device handle 0, sub-device handle 1 | ++---------------+------+---------+----------------------------------------+ +| 1 | 2 | Yes | Device handle 0, sub-device handle 2 | ++---------------+------+---------+----------------------------------------+ +| 1 | 3 | Yes | Device handle 0, sub-device handle 3 | ++---------------+------+---------+----------------------------------------+ + + +ZE_AFFINITY_MASK = `0.0`: only tile 0 in parent device 0 is reported as device handle 0: + ++---------------+------+---------+----------------------------------------+ +| Parent Device | Tile | Exposed | Device Handle Used | ++===============+======+=========+========================================+ +| 0 | 0 | Yes | Device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 0 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 3 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 0 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 3 | No | | ++---------------+------+---------+----------------------------------------+ + + +ZE_AFFINITY_MASK = `1.1, 1.2`: only parent device 1 is reported as device handle 0; with its tiles 1 and 2 reported as its sub-devices 0 and 1, respectively: + ++---------------+------+---------+----------------------------------------+ +| Parent Device | Tile | Exposed | Device Handle Used | ++===============+======+=========+========================================+ +| 0 | 0 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 3 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 0 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 1 | Yes | Device handle 0, sub-device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 1 | 2 | Yes | Device handle 0, sub-device handle 1 | ++---------------+------+---------+----------------------------------------+ +| 1 | 3 | No | | ++---------------+------+---------+----------------------------------------+ + + +ZE_AFFINITY_MASK = `0.2, 1.3, 1.0, 0.3`: both parent devices 0 and 1 are reported as device handles 0 and 1, respectively; parent device 0 reports its tiles 2 and 3 as sub-devices 0 and 1, respectively; parent device 1 reports tiles 0 and 3 as sub-devices 0 and 1, respectively; the order is unchanged: + ++---------------+------+---------+----------------------------------------+ +| Parent Device | Tile | Exposed | Device Handle Used | ++===============+======+=========+========================================+ +| 0 | 0 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 2 | Yes | Device handle 0, sub-device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 0 | 3 | Yes | Device handle 0, sub-device handle 1 | ++---------------+------+---------+----------------------------------------+ +| 1 | 0 | Yes | Device handle 1, sub-device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 1 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 3 | Yes | Device handle 1, sub-device handle 1 | ++---------------+------+---------+----------------------------------------+ + + +The following examples show the use of different values in the ZE_AFFINITY_MASK when setting ZE_FLAT_DEVICE_HIERARCHY to `FLAT`, in the +same system with two parent devices and four tiles each. When setting ZE_FLAT_DEVICE_HIERARCHY to `FLAT`, only the tiles are reported by +:ref:`zeDeviceGet`\, which means that in this system :ref:`zeDeviceGet` would report up to 8 device handles, with device handles 0 to 3 corresponding +to the four tiles in parent device 0, and device handles 4 to 5 corresponding to the four tiles in parent device 1: + +ZE_AFFINITY_MASK = `0, 1, 2, 3, 4, 5, 6, 7`: all tiles are reported as device handles by :ref:`zeDeviceGet` (same as default): + ++---------------+------+---------+----------------------------------------+ +| Parent Device | Tile | Exposed | Device Handle Used | ++===============+======+=========+========================================+ +| 0 | 0 | Yes | Device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 0 | 1 | Yes | Device handle 1 | ++---------------+------+---------+----------------------------------------+ +| 0 | 2 | Yes | Device handle 2 | ++---------------+------+---------+----------------------------------------+ +| 0 | 3 | Yes | Device handle 3 | ++---------------+------+---------+----------------------------------------+ +| 1 | 0 | Yes | Device handle 4 | ++---------------+------+---------+----------------------------------------+ +| 1 | 1 | Yes | Device handle 5 | ++---------------+------+---------+----------------------------------------+ +| 1 | 2 | Yes | Device handle 6 | ++---------------+------+---------+----------------------------------------+ +| 1 | 3 | Yes | Device handle 7 | ++---------------+------+---------+----------------------------------------+ + + +ZE_AFFINITY_MASK = `0`: only tile 0 in parent device 0 is reported as device handle 0: + ++---------------+------+---------+----------------------------------------+ +| Parent Device | Tile | Exposed | Device Handle Used | ++===============+======+=========+========================================+ +| 0 | 0 | Yes | Device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 0 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 3 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 0 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 3 | No | | ++---------------+------+---------+----------------------------------------+ + + +ZE_AFFINITY_MASK = `1`: only tile 1 in parent device 0 is reported as device handle 0. + ++---------------+------+---------+----------------------------------------+ +| Parent Device | Tile | Exposed | Device Handle Used | ++===============+======+=========+========================================+ +| 0 | 0 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 1 | Yes | Device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 0 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 3 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 0 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 3 | No | | ++---------------+------+---------+----------------------------------------+ + + +ZE_AFFINITY_MASK = `0, 4`: tile 0 from parent device 0 is reported as device handle 0 and tile 0 in parent device 1 is reported as device handle 1: + ++---------------+------+---------+----------------------------------------+ +| Parent Device | Tile | Exposed | Device Handle Used | ++===============+======+=========+========================================+ +| 0 | 0 | Yes | Device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 0 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 3 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 0 | Yes | Device handle 1 | ++---------------+------+---------+----------------------------------------+ +| 1 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 3 | No | | ++---------------+------+---------+----------------------------------------+ + + +ZE_AFFINITY_MASK = `1, 2, 7`: tile 1 from parent device 0 is reported as device handle 0, tile 2 in parent device 0 is reported as device handle 1, and tile 3 in parent device 1 is reported as device handle 2: + ++---------------+------+---------+----------------------------------------+ +| Parent Device | Tile | Exposed | Device Handle Used | ++===============+======+=========+========================================+ +| 0 | 0 | No | | ++---------------+------+---------+----------------------------------------+ +| 0 | 1 | Yes | Device handle 0 | ++---------------+------+---------+----------------------------------------+ +| 0 | 2 | Yes | Device handle 1 | ++---------------+------+---------+----------------------------------------+ +| 0 | 3 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 0 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 1 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 2 | No | | ++---------------+------+---------+----------------------------------------+ +| 1 | 3 | Yes | Device handle 2 | ++---------------+------+---------+----------------------------------------+ + +ZE_AFFINITY_MASK = `0.0`: is not valid, as with ZE_FLAT_DEVICE_HIERARCHY set to 1, the device handles reported by :ref:`zeDeviceGet` are those which do not contain further sub-devices. + +Sub-Device Support +------------------ + +The API allows support for sub-devices which can enable finer-grained control of scheduling and memory allocation to a sub-partition of the device. +There are functions to query and obtain sub-devices, but outside of these functions there are no distinctions between sub-devices and devices. +Sub-devices are not required to represent unique partitions of a device; i.e. multiple sub-devices may share the same physical hardware. +Furthermore, a sub-device can be partitioned into more sub-devices; e.g. down to a single slice. + +Use :ref:`zeDeviceGetSubDevices` to confirm sub-devices are supported and to obtain a sub-device handle. +There are additional device properties in :ref:`ze-device-properties-t` for sub-devices. +These can be used to confirm a device is a sub-device and to query the sub-device id. +This may be used by libraries to determine if an input device handle represents a device or sub-device. + +A driver is required to make device memory allocations on the parent device visible to its sub-devices. +However, when using a sub-device handle, the driver will attempt to place any device memory allocations in the local memory that is attached to the sub-device. +These allocations are only visible to the sub-device, its sub-devices, and so forth. +If the API call returns :ref:`ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY `\, then the application may attempt to retry using the parent device. + +When creating command queues for a sub-device, +the application must determine the ordinal from calling :ref:`zeDeviceGetCommandQueueGroupProperties` using the sub-device handle. +See :ref:`ze-command-queue-desc-t` for more details. + +A 16-byte unique device identifier (uuid) can be obtained for a device +or sub-device using :ref:`zeDeviceGetProperties`\. + +.. parsed-literal:: + + // Query for all sub-devices of the device + uint32_t subdeviceCount = 0; + :ref:`zeDeviceGetSubDevices`\(hDevice, &subdeviceCount, nullptr); + + ze_device_handle_t* allSubDevices = allocate(subdeviceCount * sizeof(ze_device_handle_t)); + :ref:`zeDeviceGetSubDevices`\(hDevice, &subdeviceCount, &allSubDevices); + + // Desire is to allocate and dispatch work to sub-device 2. + assert(subdeviceCount >= 3); + ze_device_handle_t hSubdevice = allSubDevices[2]; + + // Query sub-device properties. + :ref:`ze-device-properties-t` subdeviceProps {}; + subDeviceProps.stype = :ref:`ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES `\; + :ref:`zeDeviceGetProperties`\(hSubdevice, &subdeviceProps); + + assert(subdeviceProps.flags & :ref:`ZE_DEVICE_PROPERTY_FLAG_SUBDEVICE `\); // Ensure that we have a handle to a sub-device. + assert(subdeviceProps.subdeviceId == 2); // Ensure that we have a handle to the sub-device we asked for. + + void* pMemForSubDevice2; + :ref:`zeMemAllocDevice`\(hContext, &desc, memSize, sizeof(uint32_t), hSubdevice, &pMemForSubDevice2); + ... + +Device Residency +---------------- + +For devices that do not support page-faults, the driver must ensure that all pages that will be accessed by the kernel are resident before program execution. +This can be determined by checking :ref:`ze-device-properties-t`\.flags for :ref:`ZE_DEVICE_PROPERTY_FLAG_ONDEMANDPAGING `\. + +In most cases, the driver implicitly handles residency of allocations for device access. +This can be done by inspecting API parameters, including kernel arguments. +However, in cases where the devices does **not** support page-faulting *and* the driver is incapable of determining whether an allocation will be accessed by the device, +such as multiple levels of indirection, there are two methods available: + +1. The application may set the :ref:`ZE_KERNEL_FLAG_FORCE_RESIDENCY ` flag during program creation to force all device allocations to be resident during execution. + + + The application should specify which allocation types will be indirectly accessed, using :ref:`zeKernelSetIndirectAccess` and the following flags, to optimize which allocations are made resident. + + * :ref:`ZE_KERNEL_INDIRECT_ACCESS_FLAG_HOST ` + * :ref:`ZE_KERNEL_INDIRECT_ACCESS_FLAG_DEVICE ` + * :ref:`ZE_KERNEL_INDIRECT_ACCESS_FLAG_SHARED ` + + + If the driver is unable to make all allocations resident, then the call to :ref:`zeCommandQueueExecuteCommandLists` will return :ref:`ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY ` + +2. Explicit :ref:`zeContextMakeMemoryResident` APIs are included for the application to dynamically change residency as needed. + + + If the application over-commits device memory, then a call to :ref:`zeContextMakeMemoryResident` will return :ref:`ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY ` + +If the application does not properly manage residency for these cases then the device may experience unrecoverable page-faults. + +The following pseudo-code demonstrates a sequence for using coarse-grain residency control for indirect arguments: + +.. parsed-literal:: + + struct node { + node* next; + }; + node* begin = nullptr; + :ref:`zeMemAllocHost`\(hContext, &desc, sizeof(node), 1, &begin); + :ref:`zeMemAllocHost`\(hContext, &desc, sizeof(node), 1, &begin->next); + :ref:`zeMemAllocHost`\(hContext, &desc, sizeof(node), 1, &begin->next->next); + + // 'begin' is passed as kernel argument and appended into command list + :ref:`zeKernelSetIndirectAccess`\(hKernel, :ref:`ZE_KERNEL_INDIRECT_ACCESS_FLAG_HOST `\); + :ref:`zeKernelSetArgumentValue`\(hKernel, 0, sizeof(node*), &begin); + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel, &launchArgs, nullptr, 0, nullptr); + + ... + + :ref:`zeCommandQueueExecuteCommandLists`\(hCommandQueue, 1, &hCommandList, nullptr); + ... + +The following pseudo-code demonstrates a sequence for using fine-grain residency control for indirect arguments: + +.. parsed-literal:: + + struct node { + node* next; + }; + node* begin = nullptr; + :ref:`zeMemAllocHost`\(hContext, &desc, sizeof(node), 1, &begin); + :ref:`zeMemAllocHost`\(hContext, &desc, sizeof(node), 1, &begin->next); + :ref:`zeMemAllocHost`\(hContext, &desc, sizeof(node), 1, &begin->next->next); + + // 'begin' is passed as kernel argument and appended into command list + :ref:`zeKernelSetArgumentValue`\(hKernel, 0, sizeof(node*), &begin); + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel, &launchArgs, nullptr, 0, nullptr); + ... + + // Make indirect allocations resident before enqueuing + :ref:`zeContextMakeMemoryResident`\(hContext, hDevice, begin->next, sizeof(node)); + :ref:`zeContextMakeMemoryResident`\(hContext, hDevice, begin->next->next, sizeof(node)); + + :ref:`zeCommandQueueExecuteCommandLists`\(hCommandQueue, 1, &hCommandList, hFence); + + // wait until complete + :ref:`zeFenceHostSynchronize`\(hFence, UINT32_MAX); + + // Finally, evict to free device resources + :ref:`zeContextEvictMemory`\(hContext, hDevice, begin->next, sizeof(node)); + :ref:`zeContextEvictMemory`\(hContext, hDevice, begin->next->next, sizeof(node)); + ... + +Interoperability with Other APIs +-------------------------------- +Level-Zero includes general-purpose interoperability mechanisms for +memory allocations (both images and device memory) and modules. + +Memory allocations may be shared between Level-Zero and other APIs via +:ref:`external-memory`. +Level-Zero supports exporting memory allocations for use in other APIs +and importing memory allocations from other APIs. + +Modules may be shared between Level-Zero and other APIs via native +format binaries, see :ref:`zeModuleGetNativeBinary` and :ref:`ZE_MODULE_FORMAT_NATIVE `\. + +The following pseudo-code demonstrates interoperability with OpenCL *from* a OpenCL cl_program *to* a Level-Zero Kernel: + +.. parsed-literal:: + + void* clDeviceBinary; + size_t clDeviceBinarySize; + clGetProgramInfo(cl_program, CL_PROGRAM_BINARIES, clDeviceBinary, &clDeviceBinarySize); + + :ref:`ze-module-desc-t` desc = { + :ref:`ZE_STRUCTURE_TYPE_MODULE_DESC `\, + nullptr, + :ref:`ZE_MODULE_FORMAT_NATIVE `\, + clDeviceBinarySize, + clDeviceBinary + }; + :ref:`zeModuleCreate`\(hContext, hDevice, &desc, &hModule, nullptr); + :ref:`zeKernelCreate`\(hModule, nullptr, hKernel); // same Kernel as OpenCL in Level-Zero + + +.. _inter-process-communication: + +Inter-Process Communication +--------------------------- + +The API allows sharing of memory objects across different device +processes. Since each process has its own virtual address space, there +is no guarantee that the same virtual address will be available when the +memory object is shared in new process. There are a set of APIs that +makes it easier to share the memory objects with ease. + +There are two types of Inter-Process Communication (IPC) APIs for using +Level-Zero allocations across processes: + +1. :ref:`Memory` +2. :ref:`Events` + +.. _memory-1: + +Memory +~~~~~~ + +The following code examples demonstrate how to use the memory IPC APIs: + +1. First, the allocation is made, packaged, and sent on the sending + process: + +.. parsed-literal:: + + void* dptr = nullptr; + :ref:`zeMemAllocDevice`\(hContext, &desc, size, alignment, hDevice, &dptr); + + :ref:`ze-ipc-mem-handle-t` hIPC; + :ref:`zeMemGetIpcHandle`\(hContext, dptr, &hIPC); + + // Method of sending to receiving process is not defined by Level-Zero: + send_to_receiving_process(hIPC); + + +2. Next, the allocation is received and un-packaged on the receiving + process: + +.. parsed-literal:: + + // Method of receiving from sending process is not defined by Level-Zero: + :ref:`ze-ipc-mem-handle-t` hIPC; + hIPC = receive_from_sending_process(); + + void* dptr = nullptr; + :ref:`zeMemOpenIpcHandle`\(hContext, hDevice, hIPC, 0, &dptr); + + +3. Each process may now refer to the same device memory allocation via its ``dptr``. + Note, there is no guaranteed address equivalence for the values of ``dptr`` in each process. + +4. To cleanup, first close the handle in the receiving process: + +.. parsed-literal:: + + :ref:`zeMemCloseIpcHandle`\(hContext, dptr); + + +5. Finally, return the IPC handle to the driver with :ref:`zeMemPutIpcHandle` and + free the device pointer in the sending process. If :ref:`zeMemPutIpcHandle` is not called, + any actions performed by that call are eventually done by :ref:`zeMemFree`\. + +.. parsed-literal:: + + :ref:`zeMemPutIpcHandle`\(hContext, hIpc); + :ref:`zeMemFree`\(hContext, dptr); + +.. _events-1: + +Events +~~~~~~ + +The following code examples demonstrate how to use the event IPC APIs: + +1. First, the event pool is created, packaged, and sent on the sending process: + +.. parsed-literal:: + + // create event pool + :ref:`ze-event-pool-desc-t` eventPoolDesc = { + :ref:`ZE_STRUCTURE_TYPE_EVENT_POOL_DESC `\, + nullptr, + :ref:`ZE_EVENT_POOL_FLAG_IPC ` | :ref:`ZE_EVENT_POOL_FLAG_HOST_VISIBLE `\, + 10 // count + }; + ze_event_pool_handle_t hEventPool; + :ref:`zeEventPoolCreate`\(hContext, &eventPoolDesc, 1, &hDevice, &hEventPool); + + // get IPC handle and send to another process + :ref:`ze-ipc-event-pool-handle-t` hIpcEvent; + :ref:`zeEventPoolGetIpcHandle`\(hEventPool, &hIpcEventPool); + send_to_receiving_process(hIpcEventPool); + +2. Next, the event pool is received and un-packaged on the receiving process: + +.. parsed-literal:: + + // get IPC handle from other process + :ref:`ze-ipc-event-pool-handle-t` hIpcEventPool; + receive_from_sending_process(&hIpcEventPool); + + // open event pool + ze_event_pool_handle_t hEventPool; + :ref:`zeEventPoolOpenIpcHandle`\(hContext, hIpcEventPool, &hEventPool); + +3. Each process may now refer to the same device event allocation via its handle: + +Receiving process creates event at location + +.. parsed-literal:: + + ze_event_handle_t hEvent; + :ref:`ze-event-desc-t` eventDesc = { + :ref:`ZE_STRUCTURE_TYPE_EVENT_DESC `\, + nullptr, + 5, // index + 0, // no additional memory/cache coherency required on signal + :ref:`ZE_EVENT_SCOPE_FLAG_HOST `\, // ensure memory coherency across device and Host after event signaled + }; + :ref:`zeEventCreate`\(hEventPool, &eventDesc, &hEvent); + + // submit kernel and signal event when complete + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hKernel, &args, hEvent, 0, nullptr); + :ref:`zeCommandListClose`\(hCommandList); + :ref:`zeCommandQueueExecuteCommandLists`\(hCommandQueue, 1, &hCommandList, nullptr); + +Sending process creates event at same location + +.. parsed-literal:: + + ze_event_handle_t hEvent; + :ref:`ze-event-desc-t` eventDesc = { + :ref:`ZE_STRUCTURE_TYPE_EVENT_DESC `\, + nullptr, + 5, + 0, // no additional memory/cache coherency required on signal + :ref:`ZE_EVENT_SCOPE_FLAG_HOST `\, // ensure memory coherency across device and Host after event signaled + }; + :ref:`zeEventCreate`\(hEventPool, &eventDesc, &hEvent); + + :ref:`zeEventHostSynchronize`\(hEvent, UINT32_MAX); + + +Note, there is no guaranteed address equivalence for the values of ``hEvent`` in each process. + +4. To cleanup, first close the pool handle in the receiving process: + +.. parsed-literal:: + + :ref:`zeEventDestroy`\(hEvent); + :ref:`zeEventPoolCloseIpcHandle`\(&hEventPool); + +5. Finally, return the IPC handle to the driver with :ref:`zeEventPoolPutIpcHandle` and + free the event pool in the sending process. If :ref:`zeEventPoolPutIpcHandle` is not called, + any actions performed by that call are eventually done by :ref:`zeEventPoolDestroy`\. + +.. parsed-literal:: + + :ref:`zeEventDestroy`\(hEvent); + :ref:`zeEventPoolPutIpcHandle`\(hContext, hIpcEventPool); + :ref:`zeEventPoolDestroy`\(hEventPool); + +Peer-to-Peer Access and Queries +------------------------------- + +Peer to Peer API's provide capabilities to marshal data across Host to +Device, Device to Host and Device to Device. The data marshalling API +can be scheduled as asynchronous operations or can be synchronized with +kernel execution through command queues. Data coherency is maintained by +the driver without any explicit involvement from the application. + +Cards may be linked together within a node by a scale-up fabric and depending on the configuration, +the fabric can support remote access, atomics, and data copies. + +The following Peer-to-Peer functionalities are provided through the API: + +- Check for remote memory access capability between two devices/subdevices: :ref:`zeDeviceCanAccessPeer` + + The following rules apply to :ref:`zeDeviceCanAccessPeer` queries + + + A device/subdevice is always its own peer, i.e. it can always access itself. + +- Query remote memory access, atomic capabilities, logical & physical bandwidth & latency for peer-to-peer: :ref:`zeDeviceGetP2PProperties` + :ref:`ZE_experimental_bandwidth_properties`. + + The following rules apply to :ref:`zeDeviceGetP2PProperties` queries + + + A device/subdevice is always its own peer, i.e. it can always access itself and also do so atomically. + +- Copy data between devices over peer-to-peer fabric: :ref:`zeCommandListAppendMemoryCopy` + +Both :ref:`zeDeviceCanAccessPeer` & :ref:`zeDeviceGetP2PProperties` return the same information - do two devices support peer-to-peer access? :ref:`zeDeviceGetP2PProperties` provides more detail than :ref:`zeDeviceCanAccessPeer`\, such as support for atomics, bandwidths, latencies, etc... + diff --git a/level-zero/1.10/_sources/core/SPIRV.rst b/level-zero/1.10/_sources/core/SPIRV.rst new file mode 100644 index 0000000..5d40637 --- /dev/null +++ b/level-zero/1.10/_sources/core/SPIRV.rst @@ -0,0 +1,687 @@ + + + + +========================== + SPIR-V Programming Guide +========================== + +Introduction +============ + +`SPIR-V `__ is an open, +royalty-free, standard intermediate language capable of representing +parallel compute kernels. SPIR-V is adaptable to multiple execution +environments: a SPIR-V module is consumed by an execution environment, +as specified by a client API. This document describes the SPIR-V +execution environment for the 'oneAPI' Level-Zero API. The SPIR-V +execution environment describes required support for some SPIR-V +capabilities, additional semantics for some SPIR-V instructions, and +additional validation rules that a SPIR-V binary module must adhere to +in order to be considered valid. + +This document is written for compiler developers who are generating +SPIR-V modules intended to be consumed by the 'oneAPI' Level-Zero API, +for implementors of the 'oneAPI' Level-Zero API, and for software +developers who are using SPIR-V modules with the 'oneAPI' Level-Zero +API. + +Common Properties +================= + +This section describes common properties of all 'oneAPI' Level-Zero +environments that consume SPIR-V modules. + +A SPIR-V module is interpreted as a series of 32-bit words in host +endianness, with literal strings packed as described in the SPIR-V +specification. The first few words of the SPIR-V module must be a magic +number and a SPIR-V version number, as described in the SPIR-V +specification. + +Supported SPIR-V Versions +------------------------- + +The maximum SPIR-V version supported by a device is described by :ref:`ze-device-module-properties-t`\.spirvVersionSupported. + +Extended Instruction Sets +------------------------- + +The **OpenCL.std** `extended instruction set for +OpenCL `__ is supported. + +Source Language Encoding +------------------------ + +The source language version is purely informational and has no semantic +meaning. + +Numerical Type Formats +---------------------- + +Floating-point types are represented and stored using +`IEEE-754 `__ semantics. +All integer formats are represented and stored using 2's-complement +format. + +Supported Types +--------------- + +The following types are supported. Note that some types may require +additional capabilities, and may not be supported by all environments. + +Basic Scalar and Vector Types +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**OpTypeVoid** is supported. + +The following scalar types are supported: + +- **OpTypeBool** +- **OpTypeInt**, with *Width* equal to 8, 16, 32, or 64, and with + *Signedness* equal to zero, indicating no signedness semantics. +- **OpTypeFloat**, with *Width* equal to 16, 32, or 64. + +**OpTypeVector** vector types are supported. The vector *Component Type* +may be any of the scalar types described above. Supported vector +*Component Counts* are 2, 3, 4, 8, or 16. + +**OpTypeArray** array types are supported, **OpTypeStruct** struct types +are supported, **OpTypeFunction** functions are supported, and +**OpTypePointer** pointer types are supported. + +Image-Related Data Types +~~~~~~~~~~~~~~~~~~~~~~~~ + +The following table describes the supported **OpTypeImage** image types: + +========== ======= ========= ======================= +*Dim* *Depth* *Arrayed* **Description** +========== ======= ========= ======================= +**1D** ``0`` ``0`` A 1D image. +**1D** ``0`` ``1`` A 1D image array. +**2D** ``0`` ``0`` A 2D image. +**2D** ``1`` ``0`` A 2D depth image. +**2D** ``0`` ``1`` A 2D image array. +**2D** ``1`` ``1`` A 2D depth image array. +**3D** ``0`` ``0`` A 3D image. +**Buffer** ``0`` ``0`` A 1D buffer image. +========== ======= ========= ======================= + +**OpTypeSampler** sampler typed are supported. + +Kernels +------- + +An **OpFunction** in a SPIR-V module that is identified with +**OpEntryPoint** defines a kernel that may be launched using host API +interfaces. + +Kernel Return Types +------------------- + +The *Result Type* for an **OpFunction** identified with **OpEntryPoint** +must be **OpTypeVoid**. + +Kernel Arguments +---------------- + +An **OpFunctionParameter** for an **OpFunction** that is identified with +**OpEntryPoint** defines a kernel argument. Allowed types for kernel +arguments are: + +- **OpTypeInt** +- **OpTypeFloat** +- **OpTypeStruct** +- **OpTypeVector** +- **OpTypePointer** +- **OpTypeSampler** +- **OpTypeImage** + +For **OpTypeInt** parameters, supported *Widths* are 8, 16, 32, and 64, +and must have no signedness semantics. + +For **OpTypeFloat** parameters, supported *Widths* are 16 and 32. + +For **OpTypeStruct** parameters, supported structure *Member Types* are: + +- **OpTypeInt** +- **OpTypeFloat** +- **OpTypeStruct** +- **OpTypeVector** +- **OpTypePointer** + +For **OpTypePointer** parameters, supported *Storage Classes* are: + +- **CrossWorkgroup** +- **Workgroup** +- **UniformConstant** + +Environments that support extensions or optional features may allow +additional types in an entry point's parameter list. + +Required Capabilities +===================== + +SPIR-V 1.0 +---------- + +An environment that supports SPIR-V 1.0 must support SPIR-V 1.0 modules +that declare the following capabilities: + +- **Addresses** +- **Float16Buffer** +- **Int64** +- **Int16** +- **Int8** +- **Kernel** +- **Linkage** +- **Vector16** +- **GenericPointer** +- **Groups** +- **ImageBasic** (for devices supporting :ref:`ze-device-image-properties-t`\.supported) +- **Float16** (for devices supporting :ref:`ZE_DEVICE_MODULE_FLAG_FP16 `\) +- **Float64** (for devices supporting :ref:`ZE_DEVICE_MODULE_FLAG_FP64 `\) +- **Int64Atomics** (for devices supporting :ref:`ZE_DEVICE_MODULE_FLAG_INT64_ATOMICS `\) + +If the 'oneAPI' environment supports the **ImageBasic** capability, +then the following capabilities must also be supported: + +- **LiteralSampler** +- **Sampled1D** +- **Image1D** +- **SampledBuffer** +- **ImageBuffer** +- **ImageReadWrite** + +SPIR-V 1.1 +---------- + +An environment supporting SPIR-V 1.1 must support SPIR-V 1.1 modules +that declare the capabilities required for SPIR-V 1.0 modules, above. + +SPIR-V 1.1 does not add any new required capabilities. + +SPIR-V 1.2 +---------- + +An environment supporting SPIR-V 1.2 must support SPIR-V 1.2 modules +that declare the capabilities required for SPIR-V 1.1 modules, above. + +SPIR-V 1.2 does not add any new required capabilities. + +Validation Rules +================ + +The following are a list of validation rules that apply to SPIR-V +modules executing in all 'oneAPI' Level-Zero environments: + +The *Execution Model* declared in **OpEntryPoint** must be **Kernel**. + +The *Addressing Model* declared in **OpMemoryModel** must +**Physical64**, indicating that device pointers are 64-bits. + +The *Memory Model* declared in **OpMemoryModel** must be **OpenCL**. + +For all **OpTypeInt** integer type-declaration instructions: + +- *Signedness* must be 0, indicating no signedness semantics. + +For all **OpTypeImage** type-declaration instructions: \* *Sampled Type* +must be **OpTypeVoid**. \* *Sampled* must be 0, indicating that the +image usage will be known at run time, not at compile time. \* *MS* must +be 0, indicating single-sampled content. \* *Arrayed* may only be set to +1, indicating arrayed content, when *Dim* is set to **1D** or **2D**. \* +*Image Format* must be **Unknown**, indicating that the image does not +have a specified format. \* The optional image *Access Qualifier* must +be present. + +The image write instruction **OpImageWrite** must not include any +optional *Image Operands*. + +The image read instructions **OpImageRead** and +**OpImageSampleExplicitLod** must not include the optional *Image +Operand* **ConstOffset**. + +For all *Atomic Instructions*: + +- 32-bit integer types are supported for the *Result Type* and/or type + of *Value*. 64-bit integer types are optionally supported for the + *Result Type* and/or type of *Value* for devices supporting + :ref:`ZE_DEVICE_MODULE_FLAG_INT64_ATOMICS `\. +- The *Pointer* operand must be a pointer to the **Function**, + **Workgroup**, **CrossWorkGroup**, or **Generic** *Storage Classes*. + +Recursion is not supported. The static function call graph for an entry +point must not contain cycles. + +Whether irreducible control flow is legal is implementation defined. + +For the instructions **OpGroupAsyncCopy** and **OpGroupWaitEvents**, +*Scope* for *Execution* must be: + +- **Workgroup** + +For all other instructions, *Scope* for *Execution* must be one of: + +- **Workgroup** +- **Subgroup** + +*Scope* for *Memory* must be one of: + +- **CrossDevice** +- **Device** +- **Workgroup** +- **Invocation** +- **Subgroup** + +Extensions +========== + +Intel Subgroups +--------------- + +'oneAPI' Level-Zero API environments must accept SPIR-V modules that +declare use of the ``SPV_INTEL_subgroups`` extension via +**OpExtension**. + +When use of the ``SPV_INTEL_subgroups`` extension is declared in the +module via **OpExtension**, the environment must accept modules that +declare the following SPIR-V capabilities: + +- **SubgroupShuffleINTEL** +- **SubgroupBufferBlockIOINTEL** +- **SubgroupImageBlockIOINTEL** + +The environment must accept the following types for *Data* for the +**SubgroupShuffleINTEL** instructions: + +- Scalars and **OpTypeVectors** with 2, 4, 8, or 16 *Component Count* + components of the following *Component Type* types: + + - **OpTypeFloat** with a *Width* of 32 bits (``float``) + - **OpTypeInt** with a *Width* of 8 bits and *Signedness* of 0 + (``char`` and ``uchar``) + - **OpTypeInt** with a *Width* of 16 bits and *Signedness* of 0 + (``short`` and ``ushort``) + - **OpTypeInt** with a *Width* of 32 bits and *Signedness* of 0 + (``int`` and ``uint``) + +- Scalars of **OpTypeInt** with a *Width* of 64 bits and *Signedness* + of 0 (``long`` and ``ulong``) + +Additionally, if the **Float16** capability is declared and supported: + +- Scalars of **OpTypeFloat** with a *Width* of 16 bits (``half``) + +Additionally, if the **Float64** capability is declared and supported: + +- Scalars of **OpTypeFloat** with a *Width* of 64 bits (``double``) + +The environment must accept the following types for *Result* and *Data* +for the **SubgroupBufferBlockIOINTEL** and **SubgroupImageBlockIOINTEL** +instructions: + +- Scalars and **OpTypeVectors** with 2, 4, or 8 *Component Count* + components of the following *Component Type* types: + + - **OpTypeInt** with a *Width* of 32 bits and *Signedness* of 0 + (``int`` and ``uint``) + - **OpTypeInt** with a *Width* of 16 bits and *Signedness* of 0 + (``short`` and ``ushort``) + +For *Ptr*, valid *Storage Classes* are: + +- **CrossWorkGroup** (``global``) + +For *Image*: + +- *Dim* must be *2D* +- *Depth* must be 0 (not a depth image) +- *Arrayed* must be 0 (non-arrayed content) +- *MS* must be 0 (single-sampled content) + +For *Coordinate*, the following types are supported: + +- **OpTypeVectors** with two *Component Count* components of *Component + Type* **OpTypeInt** with a *Width* of 32 bits and *Signedness* of 0 + (``int2``) + +Notes and Restrictions +~~~~~~~~~~~~~~~~~~~~~~ + +The **SubgroupShuffleINTEL** instructions may be placed within +non-uniform control flow and hence do not have to be encountered by all +invocations in the subgroup, however *Data* may only be shuffled among +invocations encountering the **SubgroupShuffleINTEL** instruction. +Shuffling *Data* from an invocation that does not encounter the +**SubgroupShuffleINTEL** instruction will produce undefined results. + +There is no defined behavior for out-of-range shuffle indices for the +**SubgroupShuffleINTEL** instructions. + +The **SubgroupBufferBlockIOINTEL** and **SubgroupImageBlockIOINTEL** +instructions are only guaranteed to work correctly if placed strictly +within uniform control flow within the subgroup. This ensures that if +any invocation executes it, all invocations will execute it. If placed +elsewhere, behavior is undefined. + +There is no defined out-of-range behavior for the +**SubgroupBufferBlockIOINTEL** instructions. + +The **SubgroupImageBlockIOINTEL** instructions do support bounds +checking, however they bounds-check to the image width in units of +``uints``, not in units of image elements. This means: + +- If the image has an *Image Format* size equal to the size of a + ``uint`` (four bytes, for example **Rgba8**), the image will be + correctly bounds-checked. In this case, out-of-bounds reads will + return the edge image element (the equivalent of **ClampToEdge**), + and out-of-bounds writes will be ignored. + +- If the image has an *Image Format* size less than the size of a + ``uint`` (such as **R8**), the entire image is addressable, however + bounds checking will occur too late. For this reason, extra care + should be taken to avoid out-of-bounds reads and writes, since + out-of-bounds reads may return invalid data and out-of-bounds writes + may corrupt other images or buffers unpredictably. + +The following restrictions apply to the **SubgroupBufferBlockIOINTEL** +instructions: + +- The pointer *Ptr* must be 32-bit (4-byte) aligned for reads, and must + be 128-bit (16-byte) aligned for writes. + +The following restrictions apply to the **SubgroupImageBlockIOINTEL** +instructions: + +- The behavior of the **SubgroupImageBlockIOINTEL** instructions is + undefined for images with an element size greater than four bytes + (such as **Rgba32f**). + +The following restrictions apply to the +**OpSubgroupImageBlockWriteINTEL** instruction: + +- Unlike the image block read instruction, which may read from any + arbitrary byte offset, the x-component of the byte coordinate for the + image block write instruction must be a multiple of four; in other + words, the write must begin at a 32-bit boundary. There is no + restriction on the y-component of the coordinate. + +Floating-Point Atomics +---------------------- + +'oneAPI' Level-Zero API environments supporting the extension +**ZE_extension_float_atomics** must support additional atomic instructions, capabilities, and types. + +Atomic Load, Store, and Exchange +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If the 'oneAPI' Level-Zero API environment supports the extension **ZE_extension_float_atomics** and :ref:`ze-device-fp-atomic-ext-flags-t`\.fp16Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_LOAD_STORE ` or :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_LOAD_STORE `\, then for the **Atomic Instructions** **OpAtomicLoad**, **OpAtomicStore**, and **OpAtomicExchange**: + +- 16-bit floating-point types are supported for the *Result Type* and type of + *Value*. +- When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp16Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_LOAD_STORE `\, the *Pointer* operand may be a pointer to the **CrossWorkGroup** *Storage Class*. +- When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp16Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_LOAD_STORE `\, the *Pointer* operand may be a pointer to the **Workgroup** *Storage Class*. + +Atomic Add and Subtract +~~~~~~~~~~~~~~~~~~~~~~~ + +If the 'oneAPI' Level-Zero API environment supports the extension **ZE_extension_float_atomics** and :ref:`ze-device-fp-atomic-ext-flags-t`\.fp16Flags, :ref:`ze-device-fp-atomic-ext-flags-t`\.fp32Flags, or :ref:`ze-device-fp-atomic-ext-flags-t`\.fp64Flags include :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_ADD ` or :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_ADD `\, then the environment must accept modules that declare use of the extensions ``SPV_EXT_shader_atomic_float_add`` and ``SPV_EXT_shader_atomic_float16_add``. +Additionally: + +- When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp16Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_ADD ` or :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_ADD `\, the **AtomicFloat16AddEXT** capability must be supported. +- When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp32Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_ADD ` or :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_ADD `\, the **AtomicFloat32AddEXT** capability must be supported. +- When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp64Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_ADD ` or :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_ADD `\, the **AtomicFloat64AddEXT** capability must be supported. +- For the **Atomic Instruction** **OpAtomicFAddEXT** added by these extensions: + + - When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp32Flags, :ref:`ze-device-fp-atomic-ext-flags-t`\.fp64Flags, or :ref:`ze-device-fp-atomic-ext-flags-t`\.fp16Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_ADD `\, the *Pointer* operand may be a pointer to the **CrossWorkGroup** *Storage Class*. + - When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp32Flags, :ref:`ze-device-fp-atomic-ext-flags-t`\.fp64Flags, or :ref:`ze-device-fp-atomic-ext-flags-t`\.fp16Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_ADD `\, the *Pointer* operand may be a pointer to the **Workgroup** *Storage Class*. + +Atomic Min and Max +~~~~~~~~~~~~~~~~~~ + +If the 'oneAPI' Level-Zero API environment supports the extension **ZE_extension_float_atomics** and the :ref:`ze-device-fp-atomic-ext-flags-t`\.fp32Flags, :ref:`ze-device-fp-atomic-ext-flags-t`\.fp64Flags, or :ref:`ze-device-fp-atomic-ext-flags-t`\.fp16Flags bitfields include :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_MIN_MAX ` or :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_MIN_MAX `\, then the environment must accept modules that declare use of the extension ``SPV_EXT_shader_atomic_float_min_max``. +Additionally: + +- When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp32Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_MIN_MAX ` or :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_MIN_MAX `\, the **AtomicFloat32MinMaxEXT** capability must be supported. +- When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp64Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_MIN_MAX ` or :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_MIN_MAX `\, the **AtomicFloat64MinMaxEXT** capability must be supported. +- When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp16Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_MIN_MAX ` or :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_MIN_MAX `\, the **AtomicFloat16MinMaxEXT** capability must be supported. +- For the **Atomic Instructions** **OpAtomicFMinEXT** and **OpAtomicFMaxEXT** added by this extension: + + - When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp16Flags, :ref:`ze-device-fp-atomic-ext-flags-t`\.fp32Flags, or :ref:`ze-device-fp-atomic-ext-flags-t`\.fp64Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_MIN_MAX ` , the *Pointer* operand may be a pointer to the **CrossWorkGroup** *Storage Class*. + - When :ref:`ze-device-fp-atomic-ext-flags-t`\.fp16Flags, :ref:`ze-device-fp-atomic-ext-flags-t`\.fp32Flags, or :ref:`ze-device-fp-atomic-ext-flags-t`\.fp64Flags includes :ref:`ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_MIN_MAX `\, the *Pointer* operand may be a pointer to the **Workgroup** *Storage Class*. + + +Extended Subgroups +------------------ + +'oneAPI' Level-Zero API environments supporting the extension +**ZE_extension_subgroups** must support additional subgroup instructions, capabilities, and types. + +Extended Types +~~~~~~~~~~~~~~ + +The following Groups instructions must be supported with *Scope* for *Execution* +equal to **Subgroup**: + +- **OpGroupBroadcast** +- **OpGroupIAdd**, **OpGroupFAdd** +- **OpGroupSMin**, **OpGroupUMin**, **OpGroupFMin** +- **OpGroupSMax**, **OpGroupUMax**, **OpGroupFMax** + +For these instructions, valid types for *Value* are: + +- Scalars of supported types: + + - **OpTypeInt** (equivalent to ``char``, ``uchar``, ``short``, ``ushort``, + ``int``, ``uint``, ``long``, and ``ulong``) + - **OpTypeFloat** (equivalent to ``half``, ``float``, and ``double``) + +Additionally, for **OpGroupBroadcast**, valid types for *Value* are: + +- **OpTypeVectors** with 2, 3, 4, 8, or 16 Component Count components of + supported types: + + - **OpTypeInt** (equivalent to ``charn``, ``ucharn``, ``shortn``, + ``ushortn``, ``intn``, ``uintn``, ``longn``, and ``ulongn``) + - **OpTypeFloat** (equivalent to ``halfn``, ``floatn``, and ``doublen``) + +Vote +~~~~ + +The following capabilities must be supported: + +- **GroupNonUniform** +- **GroupNonUniformVote** + +For instructions requiring these capabilities, *Scope* for *Execution* may be: + +- **Subgroup** + +For the instruction **OpGroupNonUniformAllEqual**, valid types for *Value* are: + +- Scalars of supported types: + + - **OpTypeInt** (equivalent to ``char``, ``uchar``, ``short``, ``ushort``, + ``int``, ``uint``, ``long``, and ``ulong``) + - **OpTypeFloat** (equivalent to ``half``, ``float``, and ``double``) + +Ballot +~~~~~~ + +The following capabilities must be supported: + +- **GroupNonUniformBallot** + +For instructions requiring these capabilities, *Scope* for *Execution* may be: + +- **Subgroup** + +For the non-uniform broadcast instruction **OpGroupNonUniformBroadcast**, valid +types for *Value* are: + +- Scalars of supported types: + + - **OpTypeInt** (equivalent to ``char``, ``uchar``, ``short``, ``ushort``, + ``int``, ``uint``, ``long``, and ``ulong``) + - **OpTypeFloat** (equivalent to ``half``, ``float``, and ``double``) + +- **OpTypeVectors** with 2, 3, 4, 8, or 16 Component Count components of + supported types: + + - **OpTypeInt** (equivalent to ``charn``, ``ucharn``, ``shortn``, + ``ushortn``, ``intn``, ``uintn``, ``longn``, and ``ulongn``) + - **OpTypeFloat** (equivalent to ``halfn``, ``floatn``, and ``doublen``) + +For the instruction **OpGroupNonUniformBroadcastFirst**, valid types for *Value* are: + +- Scalars of supported types: + + - **OpTypeInt** (equivalent to ``char``, ``uchar``, ``short``, ``ushort``, + ``int``, ``uint``, ``long``, and ``ulong``) + - **OpTypeFloat** (equivalent to ``half``, ``float``, and ``double``) + +For the instruction **OpGroupNonUniformBallot**, the valid Result Type is an +OpTypeVector with four Component Count components of **OpTypeInt**, with *Width* +equal to 32 and *Signedness* equal to 0 (equivalent to ``uint4``). + +For the instructions **OpGroupNonUniformInverseBallot**, +**OpGroupNonUniformBallotBitExtract**, **OpGroupNonUniformBallotBitCount**, +**OpGroupNonUniformBallotFindLSB**, and **OpGroupNonUniformBallotFindMSB**, the +valid type for *Value* is an **OpTypeVector** with four *Component Count* +components of **OpTypeInt**, with *Width* equal to 32 and *Signedness* equal to +0 (equivalent to uint4). + +For built-in variables decorated with **SubgroupEqMask**, **SubgroupGeMask**, +**SubgroupGtMask**, **SubgroupLeMask**, or **SubgroupLtMask**, the supported +variable type is an **OpTypeVector** with four *Component Count* components of +**OpTypeInt**, with *Width* equal to 32 and *Signedness* equal to 0 (equivalent +to ``uint4``). + +Non-Uniform Arithmetic +~~~~~~~~~~~~~~~~~~~~~~ + +The following capabilities must be supported: + +- **GroupNonUniformArithmetic** + +For instructions requiring these capabilities, *Scope* for *Execution* may be: + +- **Subgroup** + +For the instructions **OpGroupNonUniformLogicalAnd**, +**OpGroupNonUniformLogicalOr**, and **OpGroupNonUniformLogicalXor**, the valid +type for *Value* is **OpTypeBool**. + +Otherwise, for the **GroupNonUniformArithmetic** scan and reduction +instructions, valid types for *Value* are: + +- Scalars of supported types: + + - **OpTypeInt** (equivalent to ``char``, ``uchar``, ``short``, ``ushort``, + ``int``, ``uint``, ``long``, and ``ulong``) + - **OpTypeFloat** (equivalent to ``half``, ``float``, and ``double``) + +For the **GroupNonUniformArithmetic** scan and reduction instructions, the +optional *ClusterSize* operand must not be present. + +Shuffles +~~~~~~~~ + +The following capabilities must be supported: + +- **GroupNonUniformShuffle** + +For instructions requiring these capabilities, *Scope* for *Execution* may be: + +- **Subgroup** + +For the instructions **OpGroupNonUniformShuffle** and +**OpGroupNonUniformShuffleXor** requiring these capabilities, valid types for +*Value* are: + +- Scalars of supported types: + + - **OpTypeInt** (equivalent to ``char``, ``uchar``, ``short``, ``ushort``, + ``int``, ``uint``, ``long``, and ``ulong``) + - **OpTypeFloat** (equivalent to ``half``, ``float``, and ``double``) + +Relative Shuffles +~~~~~~~~~~~~~~~~~ + +The following capabilities must be supported: + +- **GroupNonUniformShuffleRelative** + +For instructions requiring these capabilities, *Scope* for *Execution* may be: + +- **Subgroup** + +For the **GroupNonUniformShuffleRelative** instructions, valid types for *Value* +are: + +- Scalars of supported types: + + - **OpTypeInt** (equivalent to ``char``, ``uchar``, ``short``, ``ushort``, + ``int``, ``uint``, ``long``, and ``ulong``) + - **OpTypeFloat** (equivalent to ``half``, ``float``, and ``double``) + +Clustered Reductions +~~~~~~~~~~~~~~~~~~~~ + +The following capabilities must be supported: + +- **GroupNonUniformClustered** + +For instructions requiring these capabilities, *Scope* for *Execution* may be: + +- **Subgroup** + +When the **GroupNonUniformClustered** capability is declared, the +**GroupNonUniformArithmetic** scan and reduction instructions may include the +optional *ClusterSize* operand. + + +Linkonce ODR +------------ + +'oneAPI' Level-Zero API environments supporting the extension +**ZE_extension_linkonce_odr** must must accept SPIR-V modules that declare use of the ``SPV_KHR_linkonce_odr`` extension via **OpExtension**. + +When use of the ``SPV_KHR_linkonce_odr`` extension is declared in the +module via **OpExtension**, the environment must accept modules that +include the **LinkOnceODR** linkage type. + + +Bfloat16 Conversions +-------------------- + +'oneAPI' Level-Zero API environments supporting the extension +**ZE_extension_bfloat16_conversions** must must accept SPIR-V modules that declare use of the ``SPV_INTEL_bloat16_conversion`` extension via **OpExtension**. + +When use of the ``SPV_INTEL_bloat16_conversion`` extension is declared in the +module via **OpExtension**, the environment must accept modules that +declare the **Bfloat16ConversionINTEL** capability. + +For the instructions **OpConvertFToBF16INTEL** and **OpConvertBF16ToFINTEL** +added by the extension: + +- Valid types for *Result Type*, *Float Value*, and *Bfloat16 Value* are Scalars + and **OpTypeVectors** with 2, 3, 4, 8, or 16 *Component Count* components + + +Numerical Compliance +==================== + +The 'oneAPI' Level-Zero environment will meet or exceed the numerical +compliance requirements defined in the OpenCL SPIR-V Environment +Specification. See: `Numerical +Compliance `__. + +Image Addressing and Filtering +============================== + +The 'oneAPI' Level-Zero environment image addressing and filtering +behavior is compatible with the behavior defined in the OpenCL SPIR-V +Environment Specification. See: `Image Addressing and +Filtering `__. diff --git a/level-zero/1.10/_sources/core/api.rst b/level-zero/1.10/_sources/core/api.rst new file mode 100644 index 0000000..ea914db --- /dev/null +++ b/level-zero/1.10/_sources/core/api.rst @@ -0,0 +1,5853 @@ + + +============================== +Core API +============================== +oneAPI Level Zero Specification - Version 1.10 + + + + + +Common +============================================================ +* Enumerations + + + * :ref:`ze-result-t` + * :ref:`ze-structure-type-t` + * :ref:`ze-external-memory-type-flags-t` + * :ref:`ze-bandwidth-unit-t` + * :ref:`ze-latency-unit-t` + + +* Structures + + + * :ref:`ze-ipc-mem-handle-t` + * :ref:`ze-ipc-event-pool-handle-t` + * :ref:`ze-uuid-t` + * :ref:`ze-base-cb-params-t` + * :ref:`ze-base-properties-t` + * :ref:`ze-base-desc-t` + + + + +Common Enums +------------------------------------------------------------------------------ + + +.. _ze-result-t: + +ze_result_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_result_t + :project: LevelZero + + +.. _ze-structure-type-t: + +ze_structure_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_structure_type_t + :project: LevelZero + + +.. _ze-external-memory-type-flags-t: + +ze_external_memory_type_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_external_memory_type_flag_t + :project: LevelZero + + +.. _ze-bandwidth-unit-t: + +ze_bandwidth_unit_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_bandwidth_unit_t + :project: LevelZero + + +.. _ze-latency-unit-t: + +ze_latency_unit_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_latency_unit_t + :project: LevelZero + + +Common Structures +------------------------------------------------------------------------------ + +.. _ze-ipc-mem-handle-t: + +ze_ipc_mem_handle_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_ipc_mem_handle_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-ipc-event-pool-handle-t: + +ze_ipc_event_pool_handle_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_ipc_event_pool_handle_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-uuid-t: + +ze_uuid_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_uuid_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-base-cb-params-t: + +ze_base_cb_params_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_base_cb_params_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-base-properties-t: + +ze_base_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_base_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-base-desc-t: + +ze_base_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_base_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Driver +============================================================ +* Functions + + + * :ref:`zeInit` + * :ref:`zeDriverGet` + * :ref:`zeInitDrivers` + * :ref:`zeDriverGetApiVersion` + * :ref:`zeDriverGetProperties` + * :ref:`zeDriverGetIpcProperties` + * :ref:`zeDriverGetExtensionProperties` + * :ref:`zeDriverGetExtensionFunctionAddress` + * :ref:`zeDriverGetLastErrorDescription` + + +* Enumerations + + + * :ref:`ze-init-flags-t` + * :ref:`ze-init-driver-type-flags-t` + * :ref:`ze-api-version-t` + * :ref:`ze-ipc-property-flags-t` + + +* Structures + + + * :ref:`ze-init-driver-type-desc-t` + * :ref:`ze-driver-uuid-t` + * :ref:`ze-driver-properties-t` + * :ref:`ze-driver-ipc-properties-t` + * :ref:`ze-driver-extension-properties-t` + + +Driver Functions +------------------------------------------------------------------------------ + + +.. _zeInit: + +zeInit +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeInit + :project: LevelZero + + +.. _zeDriverGet: + +zeDriverGet +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDriverGet + :project: LevelZero + + +.. _zeInitDrivers: + +zeInitDrivers +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeInitDrivers + :project: LevelZero + + +.. _zeDriverGetApiVersion: + +zeDriverGetApiVersion +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDriverGetApiVersion + :project: LevelZero + + +.. _zeDriverGetProperties: + +zeDriverGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDriverGetProperties + :project: LevelZero + + +.. _zeDriverGetIpcProperties: + +zeDriverGetIpcProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDriverGetIpcProperties + :project: LevelZero + + +.. _zeDriverGetExtensionProperties: + +zeDriverGetExtensionProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDriverGetExtensionProperties + :project: LevelZero + + +.. _zeDriverGetExtensionFunctionAddress: + +zeDriverGetExtensionFunctionAddress +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDriverGetExtensionFunctionAddress + :project: LevelZero + + +.. _zeDriverGetLastErrorDescription: + +zeDriverGetLastErrorDescription +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDriverGetLastErrorDescription + :project: LevelZero + + + +Driver Enums +------------------------------------------------------------------------------ + + +.. _ze-init-flags-t: + +ze_init_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_init_flag_t + :project: LevelZero + + +.. _ze-init-driver-type-flags-t: + +ze_init_driver_type_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_init_driver_type_flag_t + :project: LevelZero + + +.. _ze-api-version-t: + +ze_api_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_api_version_t + :project: LevelZero + + +.. _ze-ipc-property-flags-t: + +ze_ipc_property_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_ipc_property_flag_t + :project: LevelZero + + +Driver Structures +------------------------------------------------------------------------------ + +.. _ze-init-driver-type-desc-t: + +ze_init_driver_type_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_init_driver_type_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-driver-uuid-t: + +ze_driver_uuid_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_driver_uuid_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-driver-properties-t: + +ze_driver_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_driver_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-driver-ipc-properties-t: + +ze_driver_ipc_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_driver_ipc_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-driver-extension-properties-t: + +ze_driver_extension_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_driver_extension_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Device +============================================================ +* Functions + + + * :ref:`zeDeviceGet` + * :ref:`zeDeviceGetRootDevice` + * :ref:`zeDeviceGetSubDevices` + * :ref:`zeDeviceGetProperties` + * :ref:`zeDeviceGetComputeProperties` + * :ref:`zeDeviceGetModuleProperties` + * :ref:`zeDeviceGetCommandQueueGroupProperties` + * :ref:`zeDeviceGetMemoryProperties` + * :ref:`zeDeviceGetMemoryAccessProperties` + * :ref:`zeDeviceGetCacheProperties` + * :ref:`zeDeviceGetImageProperties` + * :ref:`zeDeviceGetExternalMemoryProperties` + * :ref:`zeDeviceGetP2PProperties` + * :ref:`zeDeviceCanAccessPeer` + * :ref:`zeDeviceGetStatus` + * :ref:`zeDeviceGetGlobalTimestamps` + + +* Enumerations + + + * :ref:`ze-device-type-t` + * :ref:`ze-device-property-flags-t` + * :ref:`ze-device-module-flags-t` + * :ref:`ze-device-fp-flags-t` + * :ref:`ze-command-queue-group-property-flags-t` + * :ref:`ze-device-memory-property-flags-t` + * :ref:`ze-memory-access-cap-flags-t` + * :ref:`ze-device-cache-property-flags-t` + * :ref:`ze-device-p2p-property-flags-t` + + +* Structures + + + * :ref:`ze-device-uuid-t` + * :ref:`ze-device-properties-t` + * :ref:`ze-device-thread-t` + * :ref:`ze-device-compute-properties-t` + * :ref:`ze-native-kernel-uuid-t` + * :ref:`ze-device-module-properties-t` + * :ref:`ze-command-queue-group-properties-t` + * :ref:`ze-device-memory-properties-t` + * :ref:`ze-device-memory-access-properties-t` + * :ref:`ze-device-cache-properties-t` + * :ref:`ze-device-image-properties-t` + * :ref:`ze-device-external-memory-properties-t` + * :ref:`ze-device-p2p-properties-t` + + +Device Functions +------------------------------------------------------------------------------ + + +.. _zeDeviceGet: + +zeDeviceGet +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGet + :project: LevelZero + + +.. _zeDeviceGetRootDevice: + +zeDeviceGetRootDevice +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetRootDevice + :project: LevelZero + + +.. _zeDeviceGetSubDevices: + +zeDeviceGetSubDevices +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetSubDevices + :project: LevelZero + + +.. _zeDeviceGetProperties: + +zeDeviceGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetProperties + :project: LevelZero + + +.. _zeDeviceGetComputeProperties: + +zeDeviceGetComputeProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetComputeProperties + :project: LevelZero + + +.. _zeDeviceGetModuleProperties: + +zeDeviceGetModuleProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetModuleProperties + :project: LevelZero + + +.. _zeDeviceGetCommandQueueGroupProperties: + +zeDeviceGetCommandQueueGroupProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetCommandQueueGroupProperties + :project: LevelZero + + +.. _zeDeviceGetMemoryProperties: + +zeDeviceGetMemoryProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetMemoryProperties + :project: LevelZero + + +.. _zeDeviceGetMemoryAccessProperties: + +zeDeviceGetMemoryAccessProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetMemoryAccessProperties + :project: LevelZero + + +.. _zeDeviceGetCacheProperties: + +zeDeviceGetCacheProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetCacheProperties + :project: LevelZero + + +.. _zeDeviceGetImageProperties: + +zeDeviceGetImageProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetImageProperties + :project: LevelZero + + +.. _zeDeviceGetExternalMemoryProperties: + +zeDeviceGetExternalMemoryProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetExternalMemoryProperties + :project: LevelZero + + +.. _zeDeviceGetP2PProperties: + +zeDeviceGetP2PProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetP2PProperties + :project: LevelZero + + +.. _zeDeviceCanAccessPeer: + +zeDeviceCanAccessPeer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceCanAccessPeer + :project: LevelZero + + +.. _zeDeviceGetStatus: + +zeDeviceGetStatus +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetStatus + :project: LevelZero + + +.. _zeDeviceGetGlobalTimestamps: + +zeDeviceGetGlobalTimestamps +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetGlobalTimestamps + :project: LevelZero + + + +Device Enums +------------------------------------------------------------------------------ + + +.. _ze-device-type-t: + +ze_device_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_type_t + :project: LevelZero + + +.. _ze-device-property-flags-t: + +ze_device_property_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_property_flag_t + :project: LevelZero + + +.. _ze-device-module-flags-t: + +ze_device_module_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_module_flag_t + :project: LevelZero + + +.. _ze-device-fp-flags-t: + +ze_device_fp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_fp_flag_t + :project: LevelZero + + +.. _ze-command-queue-group-property-flags-t: + +ze_command_queue_group_property_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_command_queue_group_property_flag_t + :project: LevelZero + + +.. _ze-device-memory-property-flags-t: + +ze_device_memory_property_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_memory_property_flag_t + :project: LevelZero + + +.. _ze-memory-access-cap-flags-t: + +ze_memory_access_cap_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_memory_access_cap_flag_t + :project: LevelZero + + +.. _ze-device-cache-property-flags-t: + +ze_device_cache_property_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_cache_property_flag_t + :project: LevelZero + + +.. _ze-device-p2p-property-flags-t: + +ze_device_p2p_property_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_p2p_property_flag_t + :project: LevelZero + + +Device Structures +------------------------------------------------------------------------------ + +.. _ze-device-uuid-t: + +ze_device_uuid_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_uuid_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-properties-t: + +ze_device_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-thread-t: + +ze_device_thread_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_thread_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-compute-properties-t: + +ze_device_compute_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_compute_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-native-kernel-uuid-t: + +ze_native_kernel_uuid_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_native_kernel_uuid_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-module-properties-t: + +ze_device_module_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_module_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-command-queue-group-properties-t: + +ze_command_queue_group_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_command_queue_group_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-memory-properties-t: + +ze_device_memory_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_memory_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-memory-access-properties-t: + +ze_device_memory_access_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_memory_access_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-cache-properties-t: + +ze_device_cache_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_cache_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-image-properties-t: + +ze_device_image_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_image_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-external-memory-properties-t: + +ze_device_external_memory_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_external_memory_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-p2p-properties-t: + +ze_device_p2p_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_p2p_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Context +============================================================ +* Functions + + + * :ref:`zeContextCreate` + * :ref:`zeContextCreateEx` + * :ref:`zeContextDestroy` + * :ref:`zeContextGetStatus` + + +* Enumerations + + + * :ref:`ze-context-flags-t` + + +* Structures + + + * :ref:`ze-context-desc-t` + + +Context Functions +------------------------------------------------------------------------------ + + +.. _zeContextCreate: + +zeContextCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeContextCreate + :project: LevelZero + + +.. _zeContextCreateEx: + +zeContextCreateEx +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeContextCreateEx + :project: LevelZero + + +.. _zeContextDestroy: + +zeContextDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeContextDestroy + :project: LevelZero + + +.. _zeContextGetStatus: + +zeContextGetStatus +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeContextGetStatus + :project: LevelZero + + + +Context Enums +------------------------------------------------------------------------------ + + +.. _ze-context-flags-t: + +ze_context_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_context_flag_t + :project: LevelZero + + +Context Structures +------------------------------------------------------------------------------ + +.. _ze-context-desc-t: + +ze_context_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_context_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Cmdqueue +============================================================ +* Functions + + + * :ref:`zeCommandQueueCreate` + * :ref:`zeCommandQueueDestroy` + * :ref:`zeCommandQueueExecuteCommandLists` + * :ref:`zeCommandQueueSynchronize` + * :ref:`zeCommandQueueGetOrdinal` + * :ref:`zeCommandQueueGetIndex` + + +* Enumerations + + + * :ref:`ze-command-queue-flags-t` + * :ref:`ze-command-queue-mode-t` + * :ref:`ze-command-queue-priority-t` + + +* Structures + + + * :ref:`ze-command-queue-desc-t` + + +Cmdqueue Functions +------------------------------------------------------------------------------ + + +.. _zeCommandQueueCreate: + +zeCommandQueueCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandQueueCreate + :project: LevelZero + + +.. _zeCommandQueueDestroy: + +zeCommandQueueDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandQueueDestroy + :project: LevelZero + + +.. _zeCommandQueueExecuteCommandLists: + +zeCommandQueueExecuteCommandLists +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandQueueExecuteCommandLists + :project: LevelZero + + +.. _zeCommandQueueSynchronize: + +zeCommandQueueSynchronize +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandQueueSynchronize + :project: LevelZero + + +.. _zeCommandQueueGetOrdinal: + +zeCommandQueueGetOrdinal +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandQueueGetOrdinal + :project: LevelZero + + +.. _zeCommandQueueGetIndex: + +zeCommandQueueGetIndex +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandQueueGetIndex + :project: LevelZero + + + +Cmdqueue Enums +------------------------------------------------------------------------------ + + +.. _ze-command-queue-flags-t: + +ze_command_queue_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_command_queue_flag_t + :project: LevelZero + + +.. _ze-command-queue-mode-t: + +ze_command_queue_mode_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_command_queue_mode_t + :project: LevelZero + + +.. _ze-command-queue-priority-t: + +ze_command_queue_priority_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_command_queue_priority_t + :project: LevelZero + + +Cmdqueue Structures +------------------------------------------------------------------------------ + +.. _ze-command-queue-desc-t: + +ze_command_queue_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_command_queue_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Cmdlist +============================================================ +* Functions + + + * :ref:`zeCommandListCreate` + * :ref:`zeCommandListCreateImmediate` + * :ref:`zeCommandListDestroy` + * :ref:`zeCommandListClose` + * :ref:`zeCommandListReset` + * :ref:`zeCommandListAppendWriteGlobalTimestamp` + * :ref:`zeCommandListHostSynchronize` + * :ref:`zeCommandListGetDeviceHandle` + * :ref:`zeCommandListGetContextHandle` + * :ref:`zeCommandListGetOrdinal` + * :ref:`zeCommandListImmediateGetIndex` + * :ref:`zeCommandListIsImmediate` + + +* Enumerations + + + * :ref:`ze-command-list-flags-t` + + +* Structures + + + * :ref:`ze-command-list-desc-t` + + +Cmdlist Functions +------------------------------------------------------------------------------ + + +.. _zeCommandListCreate: + +zeCommandListCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListCreate + :project: LevelZero + + +.. _zeCommandListCreateImmediate: + +zeCommandListCreateImmediate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListCreateImmediate + :project: LevelZero + + +.. _zeCommandListDestroy: + +zeCommandListDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListDestroy + :project: LevelZero + + +.. _zeCommandListClose: + +zeCommandListClose +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListClose + :project: LevelZero + + +.. _zeCommandListReset: + +zeCommandListReset +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListReset + :project: LevelZero + + +.. _zeCommandListAppendWriteGlobalTimestamp: + +zeCommandListAppendWriteGlobalTimestamp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendWriteGlobalTimestamp + :project: LevelZero + + +.. _zeCommandListHostSynchronize: + +zeCommandListHostSynchronize +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListHostSynchronize + :project: LevelZero + + +.. _zeCommandListGetDeviceHandle: + +zeCommandListGetDeviceHandle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListGetDeviceHandle + :project: LevelZero + + +.. _zeCommandListGetContextHandle: + +zeCommandListGetContextHandle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListGetContextHandle + :project: LevelZero + + +.. _zeCommandListGetOrdinal: + +zeCommandListGetOrdinal +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListGetOrdinal + :project: LevelZero + + +.. _zeCommandListImmediateGetIndex: + +zeCommandListImmediateGetIndex +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListImmediateGetIndex + :project: LevelZero + + +.. _zeCommandListIsImmediate: + +zeCommandListIsImmediate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListIsImmediate + :project: LevelZero + + + +Cmdlist Enums +------------------------------------------------------------------------------ + + +.. _ze-command-list-flags-t: + +ze_command_list_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_command_list_flag_t + :project: LevelZero + + +Cmdlist Structures +------------------------------------------------------------------------------ + +.. _ze-command-list-desc-t: + +ze_command_list_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_command_list_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Barrier +============================================================ +* Functions + + + * :ref:`zeCommandListAppendBarrier` + * :ref:`zeCommandListAppendMemoryRangesBarrier` + * :ref:`zeContextSystemBarrier` + + + + + + +Barrier Functions +------------------------------------------------------------------------------ + + +.. _zeCommandListAppendBarrier: + +zeCommandListAppendBarrier +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendBarrier + :project: LevelZero + + +.. _zeCommandListAppendMemoryRangesBarrier: + +zeCommandListAppendMemoryRangesBarrier +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendMemoryRangesBarrier + :project: LevelZero + + +.. _zeContextSystemBarrier: + +zeContextSystemBarrier +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeContextSystemBarrier + :project: LevelZero + + + + + + + +Copy +============================================================ +* Functions + + + * :ref:`zeCommandListAppendMemoryCopy` + * :ref:`zeCommandListAppendMemoryFill` + * :ref:`zeCommandListAppendMemoryCopyRegion` + * :ref:`zeCommandListAppendMemoryCopyFromContext` + * :ref:`zeCommandListAppendImageCopy` + * :ref:`zeCommandListAppendImageCopyRegion` + * :ref:`zeCommandListAppendImageCopyToMemory` + * :ref:`zeCommandListAppendImageCopyFromMemory` + * :ref:`zeCommandListAppendMemoryPrefetch` + * :ref:`zeCommandListAppendMemAdvise` + + +* Enumerations + + + * :ref:`ze-memory-advice-t` + + +* Structures + + + * :ref:`ze-copy-region-t` + * :ref:`ze-image-region-t` + + +Copy Functions +------------------------------------------------------------------------------ + + +.. _zeCommandListAppendMemoryCopy: + +zeCommandListAppendMemoryCopy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendMemoryCopy + :project: LevelZero + + +.. _zeCommandListAppendMemoryFill: + +zeCommandListAppendMemoryFill +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendMemoryFill + :project: LevelZero + + +.. _zeCommandListAppendMemoryCopyRegion: + +zeCommandListAppendMemoryCopyRegion +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendMemoryCopyRegion + :project: LevelZero + + +.. _zeCommandListAppendMemoryCopyFromContext: + +zeCommandListAppendMemoryCopyFromContext +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendMemoryCopyFromContext + :project: LevelZero + + +.. _zeCommandListAppendImageCopy: + +zeCommandListAppendImageCopy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendImageCopy + :project: LevelZero + + +.. _zeCommandListAppendImageCopyRegion: + +zeCommandListAppendImageCopyRegion +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendImageCopyRegion + :project: LevelZero + + +.. _zeCommandListAppendImageCopyToMemory: + +zeCommandListAppendImageCopyToMemory +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendImageCopyToMemory + :project: LevelZero + + +.. _zeCommandListAppendImageCopyFromMemory: + +zeCommandListAppendImageCopyFromMemory +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendImageCopyFromMemory + :project: LevelZero + + +.. _zeCommandListAppendMemoryPrefetch: + +zeCommandListAppendMemoryPrefetch +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendMemoryPrefetch + :project: LevelZero + + +.. _zeCommandListAppendMemAdvise: + +zeCommandListAppendMemAdvise +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendMemAdvise + :project: LevelZero + + + +Copy Enums +------------------------------------------------------------------------------ + + +.. _ze-memory-advice-t: + +ze_memory_advice_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_memory_advice_t + :project: LevelZero + + +Copy Structures +------------------------------------------------------------------------------ + +.. _ze-copy-region-t: + +ze_copy_region_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_copy_region_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-image-region-t: + +ze_image_region_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_image_region_t + :project: LevelZero + :members: + :undoc-members: + + + + +Event +============================================================ +* Functions + + + * :ref:`zeEventPoolCreate` + * :ref:`zeEventPoolDestroy` + * :ref:`zeEventCreate` + * :ref:`zeEventDestroy` + * :ref:`zeEventPoolGetIpcHandle` + * :ref:`zeEventPoolPutIpcHandle` + * :ref:`zeEventPoolOpenIpcHandle` + * :ref:`zeEventPoolCloseIpcHandle` + * :ref:`zeCommandListAppendSignalEvent` + * :ref:`zeCommandListAppendWaitOnEvents` + * :ref:`zeEventHostSignal` + * :ref:`zeEventHostSynchronize` + * :ref:`zeEventQueryStatus` + * :ref:`zeCommandListAppendEventReset` + * :ref:`zeEventHostReset` + * :ref:`zeEventQueryKernelTimestamp` + * :ref:`zeCommandListAppendQueryKernelTimestamps` + * :ref:`zeEventGetEventPool` + * :ref:`zeEventGetSignalScope` + * :ref:`zeEventGetWaitScope` + * :ref:`zeEventPoolGetContextHandle` + * :ref:`zeEventPoolGetFlags` + + +* Enumerations + + + * :ref:`ze-event-pool-flags-t` + * :ref:`ze-event-scope-flags-t` + + +* Structures + + + * :ref:`ze-event-pool-desc-t` + * :ref:`ze-event-desc-t` + * :ref:`ze-kernel-timestamp-data-t` + * :ref:`ze-kernel-timestamp-result-t` + + +Event Functions +------------------------------------------------------------------------------ + + +.. _zeEventPoolCreate: + +zeEventPoolCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventPoolCreate + :project: LevelZero + + +.. _zeEventPoolDestroy: + +zeEventPoolDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventPoolDestroy + :project: LevelZero + + +.. _zeEventCreate: + +zeEventCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventCreate + :project: LevelZero + + +.. _zeEventDestroy: + +zeEventDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventDestroy + :project: LevelZero + + +.. _zeEventPoolGetIpcHandle: + +zeEventPoolGetIpcHandle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventPoolGetIpcHandle + :project: LevelZero + + +.. _zeEventPoolPutIpcHandle: + +zeEventPoolPutIpcHandle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventPoolPutIpcHandle + :project: LevelZero + + +.. _zeEventPoolOpenIpcHandle: + +zeEventPoolOpenIpcHandle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventPoolOpenIpcHandle + :project: LevelZero + + +.. _zeEventPoolCloseIpcHandle: + +zeEventPoolCloseIpcHandle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventPoolCloseIpcHandle + :project: LevelZero + + +.. _zeCommandListAppendSignalEvent: + +zeCommandListAppendSignalEvent +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendSignalEvent + :project: LevelZero + + +.. _zeCommandListAppendWaitOnEvents: + +zeCommandListAppendWaitOnEvents +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendWaitOnEvents + :project: LevelZero + + +.. _zeEventHostSignal: + +zeEventHostSignal +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventHostSignal + :project: LevelZero + + +.. _zeEventHostSynchronize: + +zeEventHostSynchronize +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventHostSynchronize + :project: LevelZero + + +.. _zeEventQueryStatus: + +zeEventQueryStatus +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventQueryStatus + :project: LevelZero + + +.. _zeCommandListAppendEventReset: + +zeCommandListAppendEventReset +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendEventReset + :project: LevelZero + + +.. _zeEventHostReset: + +zeEventHostReset +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventHostReset + :project: LevelZero + + +.. _zeEventQueryKernelTimestamp: + +zeEventQueryKernelTimestamp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventQueryKernelTimestamp + :project: LevelZero + + +.. _zeCommandListAppendQueryKernelTimestamps: + +zeCommandListAppendQueryKernelTimestamps +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendQueryKernelTimestamps + :project: LevelZero + + +.. _zeEventGetEventPool: + +zeEventGetEventPool +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventGetEventPool + :project: LevelZero + + +.. _zeEventGetSignalScope: + +zeEventGetSignalScope +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventGetSignalScope + :project: LevelZero + + +.. _zeEventGetWaitScope: + +zeEventGetWaitScope +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventGetWaitScope + :project: LevelZero + + +.. _zeEventPoolGetContextHandle: + +zeEventPoolGetContextHandle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventPoolGetContextHandle + :project: LevelZero + + +.. _zeEventPoolGetFlags: + +zeEventPoolGetFlags +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventPoolGetFlags + :project: LevelZero + + + +Event Enums +------------------------------------------------------------------------------ + + +.. _ze-event-pool-flags-t: + +ze_event_pool_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_event_pool_flag_t + :project: LevelZero + + +.. _ze-event-scope-flags-t: + +ze_event_scope_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_event_scope_flag_t + :project: LevelZero + + +Event Structures +------------------------------------------------------------------------------ + +.. _ze-event-pool-desc-t: + +ze_event_pool_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_event_pool_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-event-desc-t: + +ze_event_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_event_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-kernel-timestamp-data-t: + +ze_kernel_timestamp_data_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_kernel_timestamp_data_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-kernel-timestamp-result-t: + +ze_kernel_timestamp_result_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_kernel_timestamp_result_t + :project: LevelZero + :members: + :undoc-members: + + + + +Fence +============================================================ +* Functions + + + * :ref:`zeFenceCreate` + * :ref:`zeFenceDestroy` + * :ref:`zeFenceHostSynchronize` + * :ref:`zeFenceQueryStatus` + * :ref:`zeFenceReset` + + +* Enumerations + + + * :ref:`ze-fence-flags-t` + + +* Structures + + + * :ref:`ze-fence-desc-t` + + +Fence Functions +------------------------------------------------------------------------------ + + +.. _zeFenceCreate: + +zeFenceCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFenceCreate + :project: LevelZero + + +.. _zeFenceDestroy: + +zeFenceDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFenceDestroy + :project: LevelZero + + +.. _zeFenceHostSynchronize: + +zeFenceHostSynchronize +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFenceHostSynchronize + :project: LevelZero + + +.. _zeFenceQueryStatus: + +zeFenceQueryStatus +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFenceQueryStatus + :project: LevelZero + + +.. _zeFenceReset: + +zeFenceReset +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFenceReset + :project: LevelZero + + + +Fence Enums +------------------------------------------------------------------------------ + + +.. _ze-fence-flags-t: + +ze_fence_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_fence_flag_t + :project: LevelZero + + +Fence Structures +------------------------------------------------------------------------------ + +.. _ze-fence-desc-t: + +ze_fence_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_fence_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Image +============================================================ +* Functions + + + * :ref:`zeImageGetProperties` + * :ref:`zeImageCreate` + * :ref:`zeImageDestroy` + + +* Enumerations + + + * :ref:`ze-image-flags-t` + * :ref:`ze-image-type-t` + * :ref:`ze-image-format-layout-t` + * :ref:`ze-image-format-type-t` + * :ref:`ze-image-format-swizzle-t` + * :ref:`ze-image-sampler-filter-flags-t` + + +* Structures + + + * :ref:`ze-image-format-t` + * :ref:`ze-image-desc-t` + * :ref:`ze-image-properties-t` + + +Image Functions +------------------------------------------------------------------------------ + + +.. _zeImageGetProperties: + +zeImageGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeImageGetProperties + :project: LevelZero + + +.. _zeImageCreate: + +zeImageCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeImageCreate + :project: LevelZero + + +.. _zeImageDestroy: + +zeImageDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeImageDestroy + :project: LevelZero + + + +Image Enums +------------------------------------------------------------------------------ + + +.. _ze-image-flags-t: + +ze_image_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_flag_t + :project: LevelZero + + +.. _ze-image-type-t: + +ze_image_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_type_t + :project: LevelZero + + +.. _ze-image-format-layout-t: + +ze_image_format_layout_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_format_layout_t + :project: LevelZero + + +.. _ze-image-format-type-t: + +ze_image_format_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_format_type_t + :project: LevelZero + + +.. _ze-image-format-swizzle-t: + +ze_image_format_swizzle_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_format_swizzle_t + :project: LevelZero + + +.. _ze-image-sampler-filter-flags-t: + +ze_image_sampler_filter_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_sampler_filter_flag_t + :project: LevelZero + + +Image Structures +------------------------------------------------------------------------------ + +.. _ze-image-format-t: + +ze_image_format_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_image_format_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-image-desc-t: + +ze_image_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_image_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-image-properties-t: + +ze_image_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_image_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Memory +============================================================ +* Functions + + + * :ref:`zeMemAllocShared` + * :ref:`zeMemAllocDevice` + * :ref:`zeMemAllocHost` + * :ref:`zeMemFree` + * :ref:`zeMemGetAllocProperties` + * :ref:`zeMemGetAddressRange` + * :ref:`zeMemGetIpcHandle` + * :ref:`zeMemGetIpcHandleFromFileDescriptorExp` + * :ref:`zeMemGetFileDescriptorFromIpcHandleExp` + * :ref:`zeMemPutIpcHandle` + * :ref:`zeMemOpenIpcHandle` + * :ref:`zeMemCloseIpcHandle` + * :ref:`zeMemSetAtomicAccessAttributeExp` + * :ref:`zeMemGetAtomicAccessAttributeExp` + + +* Enumerations + + + * :ref:`ze-device-mem-alloc-flags-t` + * :ref:`ze-host-mem-alloc-flags-t` + * :ref:`ze-memory-type-t` + * :ref:`ze-ipc-memory-flags-t` + * :ref:`ze-memory-atomic-attr-exp-flags-t` + + +* Structures + + + * :ref:`ze-device-mem-alloc-desc-t` + * :ref:`ze-host-mem-alloc-desc-t` + * :ref:`ze-memory-allocation-properties-t` + * :ref:`ze-external-memory-export-desc-t` + * :ref:`ze-external-memory-import-fd-t` + * :ref:`ze-external-memory-export-fd-t` + * :ref:`ze-external-memory-import-win32-handle-t` + * :ref:`ze-external-memory-export-win32-handle-t` + + +Memory Functions +------------------------------------------------------------------------------ + + +.. _zeMemAllocShared: + +zeMemAllocShared +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemAllocShared + :project: LevelZero + + +.. _zeMemAllocDevice: + +zeMemAllocDevice +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemAllocDevice + :project: LevelZero + + +.. _zeMemAllocHost: + +zeMemAllocHost +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemAllocHost + :project: LevelZero + + +.. _zeMemFree: + +zeMemFree +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemFree + :project: LevelZero + + +.. _zeMemGetAllocProperties: + +zeMemGetAllocProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemGetAllocProperties + :project: LevelZero + + +.. _zeMemGetAddressRange: + +zeMemGetAddressRange +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemGetAddressRange + :project: LevelZero + + +.. _zeMemGetIpcHandle: + +zeMemGetIpcHandle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemGetIpcHandle + :project: LevelZero + + +.. _zeMemGetIpcHandleFromFileDescriptorExp: + +zeMemGetIpcHandleFromFileDescriptorExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemGetIpcHandleFromFileDescriptorExp + :project: LevelZero + + +.. _zeMemGetFileDescriptorFromIpcHandleExp: + +zeMemGetFileDescriptorFromIpcHandleExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemGetFileDescriptorFromIpcHandleExp + :project: LevelZero + + +.. _zeMemPutIpcHandle: + +zeMemPutIpcHandle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemPutIpcHandle + :project: LevelZero + + +.. _zeMemOpenIpcHandle: + +zeMemOpenIpcHandle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemOpenIpcHandle + :project: LevelZero + + +.. _zeMemCloseIpcHandle: + +zeMemCloseIpcHandle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemCloseIpcHandle + :project: LevelZero + + +.. _zeMemSetAtomicAccessAttributeExp: + +zeMemSetAtomicAccessAttributeExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemSetAtomicAccessAttributeExp + :project: LevelZero + + +.. _zeMemGetAtomicAccessAttributeExp: + +zeMemGetAtomicAccessAttributeExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemGetAtomicAccessAttributeExp + :project: LevelZero + + + +Memory Enums +------------------------------------------------------------------------------ + + +.. _ze-device-mem-alloc-flags-t: + +ze_device_mem_alloc_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_mem_alloc_flag_t + :project: LevelZero + + +.. _ze-host-mem-alloc-flags-t: + +ze_host_mem_alloc_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_host_mem_alloc_flag_t + :project: LevelZero + + +.. _ze-memory-type-t: + +ze_memory_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_memory_type_t + :project: LevelZero + + +.. _ze-ipc-memory-flags-t: + +ze_ipc_memory_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_ipc_memory_flag_t + :project: LevelZero + + +.. _ze-memory-atomic-attr-exp-flags-t: + +ze_memory_atomic_attr_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_memory_atomic_attr_exp_flag_t + :project: LevelZero + + +Memory Structures +------------------------------------------------------------------------------ + +.. _ze-device-mem-alloc-desc-t: + +ze_device_mem_alloc_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_mem_alloc_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-host-mem-alloc-desc-t: + +ze_host_mem_alloc_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_host_mem_alloc_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-memory-allocation-properties-t: + +ze_memory_allocation_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_memory_allocation_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-external-memory-export-desc-t: + +ze_external_memory_export_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_external_memory_export_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-external-memory-import-fd-t: + +ze_external_memory_import_fd_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_external_memory_import_fd_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-external-memory-export-fd-t: + +ze_external_memory_export_fd_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_external_memory_export_fd_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-external-memory-import-win32-handle-t: + +ze_external_memory_import_win32_handle_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_external_memory_import_win32_handle_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-external-memory-export-win32-handle-t: + +ze_external_memory_export_win32_handle_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_external_memory_export_win32_handle_t + :project: LevelZero + :members: + :undoc-members: + + + + +Module +============================================================ +* Functions + + + * :ref:`zeModuleCreate` + * :ref:`zeModuleDestroy` + * :ref:`zeModuleDynamicLink` + * :ref:`zeModuleBuildLogDestroy` + * :ref:`zeModuleBuildLogGetString` + * :ref:`zeModuleGetNativeBinary` + * :ref:`zeModuleGetGlobalPointer` + * :ref:`zeModuleGetKernelNames` + * :ref:`zeModuleGetProperties` + * :ref:`zeKernelCreate` + * :ref:`zeKernelDestroy` + * :ref:`zeModuleGetFunctionPointer` + * :ref:`zeKernelSetGroupSize` + * :ref:`zeKernelSuggestGroupSize` + * :ref:`zeKernelSuggestMaxCooperativeGroupCount` + * :ref:`zeKernelSetArgumentValue` + * :ref:`zeKernelSetIndirectAccess` + * :ref:`zeKernelGetIndirectAccess` + * :ref:`zeKernelGetSourceAttributes` + * :ref:`zeKernelSetCacheConfig` + * :ref:`zeKernelGetProperties` + * :ref:`zeKernelGetName` + * :ref:`zeCommandListAppendLaunchKernel` + * :ref:`zeCommandListAppendLaunchCooperativeKernel` + * :ref:`zeCommandListAppendLaunchKernelIndirect` + * :ref:`zeCommandListAppendLaunchMultipleKernelsIndirect` + + +* Enumerations + + + * :ref:`ze-module-format-t` + * :ref:`ze-module-property-flags-t` + * :ref:`ze-kernel-flags-t` + * :ref:`ze-kernel-indirect-access-flags-t` + * :ref:`ze-cache-config-flags-t` + + +* Structures + + + * :ref:`ze-module-constants-t` + * :ref:`ze-module-desc-t` + * :ref:`ze-module-properties-t` + * :ref:`ze-kernel-desc-t` + * :ref:`ze-kernel-uuid-t` + * :ref:`ze-kernel-properties-t` + * :ref:`ze-kernel-preferred-group-size-properties-t` + * :ref:`ze-group-count-t` + + +Module Functions +------------------------------------------------------------------------------ + + +.. _zeModuleCreate: + +zeModuleCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeModuleCreate + :project: LevelZero + + +.. _zeModuleDestroy: + +zeModuleDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeModuleDestroy + :project: LevelZero + + +.. _zeModuleDynamicLink: + +zeModuleDynamicLink +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeModuleDynamicLink + :project: LevelZero + + +.. _zeModuleBuildLogDestroy: + +zeModuleBuildLogDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeModuleBuildLogDestroy + :project: LevelZero + + +.. _zeModuleBuildLogGetString: + +zeModuleBuildLogGetString +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeModuleBuildLogGetString + :project: LevelZero + + +.. _zeModuleGetNativeBinary: + +zeModuleGetNativeBinary +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeModuleGetNativeBinary + :project: LevelZero + + +.. _zeModuleGetGlobalPointer: + +zeModuleGetGlobalPointer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeModuleGetGlobalPointer + :project: LevelZero + + +.. _zeModuleGetKernelNames: + +zeModuleGetKernelNames +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeModuleGetKernelNames + :project: LevelZero + + +.. _zeModuleGetProperties: + +zeModuleGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeModuleGetProperties + :project: LevelZero + + +.. _zeKernelCreate: + +zeKernelCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelCreate + :project: LevelZero + + +.. _zeKernelDestroy: + +zeKernelDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelDestroy + :project: LevelZero + + +.. _zeModuleGetFunctionPointer: + +zeModuleGetFunctionPointer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeModuleGetFunctionPointer + :project: LevelZero + + +.. _zeKernelSetGroupSize: + +zeKernelSetGroupSize +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelSetGroupSize + :project: LevelZero + + +.. _zeKernelSuggestGroupSize: + +zeKernelSuggestGroupSize +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelSuggestGroupSize + :project: LevelZero + + +.. _zeKernelSuggestMaxCooperativeGroupCount: + +zeKernelSuggestMaxCooperativeGroupCount +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelSuggestMaxCooperativeGroupCount + :project: LevelZero + + +.. _zeKernelSetArgumentValue: + +zeKernelSetArgumentValue +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelSetArgumentValue + :project: LevelZero + + +.. _zeKernelSetIndirectAccess: + +zeKernelSetIndirectAccess +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelSetIndirectAccess + :project: LevelZero + + +.. _zeKernelGetIndirectAccess: + +zeKernelGetIndirectAccess +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelGetIndirectAccess + :project: LevelZero + + +.. _zeKernelGetSourceAttributes: + +zeKernelGetSourceAttributes +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelGetSourceAttributes + :project: LevelZero + + +.. _zeKernelSetCacheConfig: + +zeKernelSetCacheConfig +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelSetCacheConfig + :project: LevelZero + + +.. _zeKernelGetProperties: + +zeKernelGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelGetProperties + :project: LevelZero + + +.. _zeKernelGetName: + +zeKernelGetName +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelGetName + :project: LevelZero + + +.. _zeCommandListAppendLaunchKernel: + +zeCommandListAppendLaunchKernel +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendLaunchKernel + :project: LevelZero + + +.. _zeCommandListAppendLaunchCooperativeKernel: + +zeCommandListAppendLaunchCooperativeKernel +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendLaunchCooperativeKernel + :project: LevelZero + + +.. _zeCommandListAppendLaunchKernelIndirect: + +zeCommandListAppendLaunchKernelIndirect +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendLaunchKernelIndirect + :project: LevelZero + + +.. _zeCommandListAppendLaunchMultipleKernelsIndirect: + +zeCommandListAppendLaunchMultipleKernelsIndirect +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendLaunchMultipleKernelsIndirect + :project: LevelZero + + + +Module Enums +------------------------------------------------------------------------------ + + +.. _ze-module-format-t: + +ze_module_format_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_module_format_t + :project: LevelZero + + +.. _ze-module-property-flags-t: + +ze_module_property_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_module_property_flag_t + :project: LevelZero + + +.. _ze-kernel-flags-t: + +ze_kernel_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_kernel_flag_t + :project: LevelZero + + +.. _ze-kernel-indirect-access-flags-t: + +ze_kernel_indirect_access_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_kernel_indirect_access_flag_t + :project: LevelZero + + +.. _ze-cache-config-flags-t: + +ze_cache_config_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_cache_config_flag_t + :project: LevelZero + + +Module Structures +------------------------------------------------------------------------------ + +.. _ze-module-constants-t: + +ze_module_constants_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_module_constants_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-module-desc-t: + +ze_module_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_module_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-module-properties-t: + +ze_module_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_module_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-kernel-desc-t: + +ze_kernel_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_kernel_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-kernel-uuid-t: + +ze_kernel_uuid_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_kernel_uuid_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-kernel-properties-t: + +ze_kernel_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_kernel_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-kernel-preferred-group-size-properties-t: + +ze_kernel_preferred_group_size_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_kernel_preferred_group_size_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-group-count-t: + +ze_group_count_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_group_count_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Program +============================================================ +* Enumerations + + + * :ref:`ze-module-program-exp-version-t` + + +* Structures + + + * :ref:`ze-module-program-exp-desc-t` + + + + +Program Enums +------------------------------------------------------------------------------ + + +.. _ze-module-program-exp-version-t: + +ze_module_program_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_module_program_exp_version_t + :project: LevelZero + + +Program Structures +------------------------------------------------------------------------------ + +.. _ze-module-program-exp-desc-t: + +ze_module_program_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_module_program_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Raytracing +============================================================ +* Enumerations + + + * :ref:`ze-raytracing-ext-version-t` + * :ref:`ze-device-raytracing-ext-flags-t` + * :ref:`ze-raytracing-mem-alloc-ext-flags-t` + + +* Structures + + + * :ref:`ze-device-raytracing-ext-properties-t` + * :ref:`ze-raytracing-mem-alloc-ext-desc-t` + + + + +Raytracing Enums +------------------------------------------------------------------------------ + + +.. _ze-raytracing-ext-version-t: + +ze_raytracing_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_raytracing_ext_version_t + :project: LevelZero + + +.. _ze-device-raytracing-ext-flags-t: + +ze_device_raytracing_ext_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_raytracing_ext_flag_t + :project: LevelZero + + +.. _ze-raytracing-mem-alloc-ext-flags-t: + +ze_raytracing_mem_alloc_ext_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_raytracing_mem_alloc_ext_flag_t + :project: LevelZero + + +Raytracing Structures +------------------------------------------------------------------------------ + +.. _ze-device-raytracing-ext-properties-t: + +ze_device_raytracing_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_raytracing_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-raytracing-mem-alloc-ext-desc-t: + +ze_raytracing_mem_alloc_ext_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_raytracing_mem_alloc_ext_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Residency +============================================================ +* Functions + + + * :ref:`zeContextMakeMemoryResident` + * :ref:`zeContextEvictMemory` + * :ref:`zeContextMakeImageResident` + * :ref:`zeContextEvictImage` + + + + + + +Residency Functions +------------------------------------------------------------------------------ + + +.. _zeContextMakeMemoryResident: + +zeContextMakeMemoryResident +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeContextMakeMemoryResident + :project: LevelZero + + +.. _zeContextEvictMemory: + +zeContextEvictMemory +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeContextEvictMemory + :project: LevelZero + + +.. _zeContextMakeImageResident: + +zeContextMakeImageResident +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeContextMakeImageResident + :project: LevelZero + + +.. _zeContextEvictImage: + +zeContextEvictImage +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeContextEvictImage + :project: LevelZero + + + + + + + +Sampler +============================================================ +* Functions + + + * :ref:`zeSamplerCreate` + * :ref:`zeSamplerDestroy` + + +* Enumerations + + + * :ref:`ze-sampler-address-mode-t` + * :ref:`ze-sampler-filter-mode-t` + + +* Structures + + + * :ref:`ze-sampler-desc-t` + + +Sampler Functions +------------------------------------------------------------------------------ + + +.. _zeSamplerCreate: + +zeSamplerCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeSamplerCreate + :project: LevelZero + + +.. _zeSamplerDestroy: + +zeSamplerDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeSamplerDestroy + :project: LevelZero + + + +Sampler Enums +------------------------------------------------------------------------------ + + +.. _ze-sampler-address-mode-t: + +ze_sampler_address_mode_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_sampler_address_mode_t + :project: LevelZero + + +.. _ze-sampler-filter-mode-t: + +ze_sampler_filter_mode_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_sampler_filter_mode_t + :project: LevelZero + + +Sampler Structures +------------------------------------------------------------------------------ + +.. _ze-sampler-desc-t: + +ze_sampler_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_sampler_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Virtual +============================================================ +* Functions + + + * :ref:`zeVirtualMemReserve` + * :ref:`zeVirtualMemFree` + * :ref:`zeVirtualMemQueryPageSize` + * :ref:`zePhysicalMemCreate` + * :ref:`zePhysicalMemDestroy` + * :ref:`zeVirtualMemMap` + * :ref:`zeVirtualMemUnmap` + * :ref:`zeVirtualMemSetAccessAttribute` + * :ref:`zeVirtualMemGetAccessAttribute` + + +* Enumerations + + + * :ref:`ze-memory-access-attribute-t` + * :ref:`ze-physical-mem-flags-t` + + +* Structures + + + * :ref:`ze-physical-mem-desc-t` + + +Virtual Functions +------------------------------------------------------------------------------ + + +.. _zeVirtualMemReserve: + +zeVirtualMemReserve +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeVirtualMemReserve + :project: LevelZero + + +.. _zeVirtualMemFree: + +zeVirtualMemFree +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeVirtualMemFree + :project: LevelZero + + +.. _zeVirtualMemQueryPageSize: + +zeVirtualMemQueryPageSize +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeVirtualMemQueryPageSize + :project: LevelZero + + +.. _zePhysicalMemCreate: + +zePhysicalMemCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zePhysicalMemCreate + :project: LevelZero + + +.. _zePhysicalMemDestroy: + +zePhysicalMemDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zePhysicalMemDestroy + :project: LevelZero + + +.. _zeVirtualMemMap: + +zeVirtualMemMap +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeVirtualMemMap + :project: LevelZero + + +.. _zeVirtualMemUnmap: + +zeVirtualMemUnmap +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeVirtualMemUnmap + :project: LevelZero + + +.. _zeVirtualMemSetAccessAttribute: + +zeVirtualMemSetAccessAttribute +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeVirtualMemSetAccessAttribute + :project: LevelZero + + +.. _zeVirtualMemGetAccessAttribute: + +zeVirtualMemGetAccessAttribute +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeVirtualMemGetAccessAttribute + :project: LevelZero + + + +Virtual Enums +------------------------------------------------------------------------------ + + +.. _ze-memory-access-attribute-t: + +ze_memory_access_attribute_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_memory_access_attribute_t + :project: LevelZero + + +.. _ze-physical-mem-flags-t: + +ze_physical_mem_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_physical_mem_flag_t + :project: LevelZero + + +Virtual Structures +------------------------------------------------------------------------------ + +.. _ze-physical-mem-desc-t: + +ze_physical_mem_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_physical_mem_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Floatatomics +============================================================ +* Enumerations + + + * :ref:`ze-float-atomics-ext-version-t` + * :ref:`ze-device-fp-atomic-ext-flags-t` + + +* Structures + + + * :ref:`ze-float-atomic-ext-properties-t` + + + + +Floatatomics Enums +------------------------------------------------------------------------------ + + +.. _ze-float-atomics-ext-version-t: + +ze_float_atomics_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_float_atomics_ext_version_t + :project: LevelZero + + +.. _ze-device-fp-atomic-ext-flags-t: + +ze_device_fp_atomic_ext_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_fp_atomic_ext_flag_t + :project: LevelZero + + +Floatatomics Structures +------------------------------------------------------------------------------ + +.. _ze-float-atomic-ext-properties-t: + +ze_float_atomic_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_float_atomic_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Globaloffset +============================================================ +* Functions + + + * :ref:`zeKernelSetGlobalOffsetExp` + + +* Enumerations + + + * :ref:`ze-global-offset-exp-version-t` + + + + +Globaloffset Functions +------------------------------------------------------------------------------ + + +.. _zeKernelSetGlobalOffsetExp: + +zeKernelSetGlobalOffsetExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelSetGlobalOffsetExp + :project: LevelZero + + + +Globaloffset Enums +------------------------------------------------------------------------------ + + +.. _ze-global-offset-exp-version-t: + +ze_global_offset_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_global_offset_exp_version_t + :project: LevelZero + + + + + +Mutablecommandlist +============================================================ +* Functions + + + * :ref:`zeCommandListGetNextCommandIdExp` + * :ref:`zeCommandListGetNextCommandIdWithKernelsExp` + * :ref:`zeCommandListUpdateMutableCommandsExp` + * :ref:`zeCommandListUpdateMutableCommandSignalEventExp` + * :ref:`zeCommandListUpdateMutableCommandWaitEventsExp` + * :ref:`zeCommandListUpdateMutableCommandKernelsExp` + + +* Enumerations + + + * :ref:`ze-mutable-command-list-exp-version-t` + * :ref:`ze-mutable-command-exp-flags-t` + * :ref:`ze-mutable-command-list-exp-flags-t` + + +* Structures + + + * :ref:`ze-mutable-command-id-exp-desc-t` + * :ref:`ze-mutable-command-list-exp-properties-t` + * :ref:`ze-mutable-command-list-exp-desc-t` + * :ref:`ze-mutable-commands-exp-desc-t` + * :ref:`ze-mutable-kernel-argument-exp-desc-t` + * :ref:`ze-mutable-group-count-exp-desc-t` + * :ref:`ze-mutable-group-size-exp-desc-t` + * :ref:`ze-mutable-global-offset-exp-desc-t` + * :ref:`ze-mutable-graph-argument-exp-desc-t` + + +Mutablecommandlist Functions +------------------------------------------------------------------------------ + + +.. _zeCommandListGetNextCommandIdExp: + +zeCommandListGetNextCommandIdExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListGetNextCommandIdExp + :project: LevelZero + + +.. _zeCommandListGetNextCommandIdWithKernelsExp: + +zeCommandListGetNextCommandIdWithKernelsExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListGetNextCommandIdWithKernelsExp + :project: LevelZero + + +.. _zeCommandListUpdateMutableCommandsExp: + +zeCommandListUpdateMutableCommandsExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListUpdateMutableCommandsExp + :project: LevelZero + + +.. _zeCommandListUpdateMutableCommandSignalEventExp: + +zeCommandListUpdateMutableCommandSignalEventExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListUpdateMutableCommandSignalEventExp + :project: LevelZero + + +.. _zeCommandListUpdateMutableCommandWaitEventsExp: + +zeCommandListUpdateMutableCommandWaitEventsExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListUpdateMutableCommandWaitEventsExp + :project: LevelZero + + +.. _zeCommandListUpdateMutableCommandKernelsExp: + +zeCommandListUpdateMutableCommandKernelsExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListUpdateMutableCommandKernelsExp + :project: LevelZero + + + +Mutablecommandlist Enums +------------------------------------------------------------------------------ + + +.. _ze-mutable-command-list-exp-version-t: + +ze_mutable_command_list_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_mutable_command_list_exp_version_t + :project: LevelZero + + +.. _ze-mutable-command-exp-flags-t: + +ze_mutable_command_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_mutable_command_exp_flag_t + :project: LevelZero + + +.. _ze-mutable-command-list-exp-flags-t: + +ze_mutable_command_list_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_mutable_command_list_exp_flag_t + :project: LevelZero + + +Mutablecommandlist Structures +------------------------------------------------------------------------------ + +.. _ze-mutable-command-id-exp-desc-t: + +ze_mutable_command_id_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_mutable_command_id_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-mutable-command-list-exp-properties-t: + +ze_mutable_command_list_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_mutable_command_list_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-mutable-command-list-exp-desc-t: + +ze_mutable_command_list_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_mutable_command_list_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-mutable-commands-exp-desc-t: + +ze_mutable_commands_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_mutable_commands_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-mutable-kernel-argument-exp-desc-t: + +ze_mutable_kernel_argument_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_mutable_kernel_argument_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-mutable-group-count-exp-desc-t: + +ze_mutable_group_count_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_mutable_group_count_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-mutable-group-size-exp-desc-t: + +ze_mutable_group_size_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_mutable_group_size_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-mutable-global-offset-exp-desc-t: + +ze_mutable_global_offset_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_mutable_global_offset_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-mutable-graph-argument-exp-desc-t: + +ze_mutable_graph_argument_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_mutable_graph_argument_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Relaxedalloclimits +============================================================ +* Enumerations + + + * :ref:`ze-relaxed-allocation-limits-exp-version-t` + * :ref:`ze-relaxed-allocation-limits-exp-flags-t` + + +* Structures + + + * :ref:`ze-relaxed-allocation-limits-exp-desc-t` + + + + +Relaxedalloclimits Enums +------------------------------------------------------------------------------ + + +.. _ze-relaxed-allocation-limits-exp-version-t: + +ze_relaxed_allocation_limits_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_relaxed_allocation_limits_exp_version_t + :project: LevelZero + + +.. _ze-relaxed-allocation-limits-exp-flags-t: + +ze_relaxed_allocation_limits_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_relaxed_allocation_limits_exp_flag_t + :project: LevelZero + + +Relaxedalloclimits Structures +------------------------------------------------------------------------------ + +.. _ze-relaxed-allocation-limits-exp-desc-t: + +ze_relaxed_allocation_limits_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_relaxed_allocation_limits_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Cachereservation +============================================================ +* Functions + + + * :ref:`zeDeviceReserveCacheExt` + * :ref:`zeDeviceSetCacheAdviceExt` + + +* Enumerations + + + * :ref:`ze-cache-reservation-ext-version-t` + * :ref:`ze-cache-ext-region-t` + + +* Structures + + + * :ref:`ze-cache-reservation-ext-desc-t` + + +Cachereservation Functions +------------------------------------------------------------------------------ + + +.. _zeDeviceReserveCacheExt: + +zeDeviceReserveCacheExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceReserveCacheExt + :project: LevelZero + + +.. _zeDeviceSetCacheAdviceExt: + +zeDeviceSetCacheAdviceExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceSetCacheAdviceExt + :project: LevelZero + + + +Cachereservation Enums +------------------------------------------------------------------------------ + + +.. _ze-cache-reservation-ext-version-t: + +ze_cache_reservation_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_cache_reservation_ext_version_t + :project: LevelZero + + +.. _ze-cache-ext-region-t: + +ze_cache_ext_region_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_cache_ext_region_t + :project: LevelZero + + +Cachereservation Structures +------------------------------------------------------------------------------ + +.. _ze-cache-reservation-ext-desc-t: + +ze_cache_reservation_ext_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_cache_reservation_ext_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Eventquerytimestamps +============================================================ +* Functions + + + * :ref:`zeEventQueryTimestampsExp` + + +* Enumerations + + + * :ref:`ze-event-query-timestamps-exp-version-t` + + + + +Eventquerytimestamps Functions +------------------------------------------------------------------------------ + + +.. _zeEventQueryTimestampsExp: + +zeEventQueryTimestampsExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventQueryTimestampsExp + :project: LevelZero + + + +Eventquerytimestamps Enums +------------------------------------------------------------------------------ + + +.. _ze-event-query-timestamps-exp-version-t: + +ze_event_query_timestamps_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_event_query_timestamps_exp_version_t + :project: LevelZero + + + + + +Imagememoryproperties +============================================================ +* Functions + + + * :ref:`zeImageGetMemoryPropertiesExp` + + +* Enumerations + + + * :ref:`ze-image-memory-properties-exp-version-t` + + +* Structures + + + * :ref:`ze-image-memory-properties-exp-t` + + +Imagememoryproperties Functions +------------------------------------------------------------------------------ + + +.. _zeImageGetMemoryPropertiesExp: + +zeImageGetMemoryPropertiesExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeImageGetMemoryPropertiesExp + :project: LevelZero + + + +Imagememoryproperties Enums +------------------------------------------------------------------------------ + + +.. _ze-image-memory-properties-exp-version-t: + +ze_image_memory_properties_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_memory_properties_exp_version_t + :project: LevelZero + + +Imagememoryproperties Structures +------------------------------------------------------------------------------ + +.. _ze-image-memory-properties-exp-t: + +ze_image_memory_properties_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_image_memory_properties_exp_t + :project: LevelZero + :members: + :undoc-members: + + + + +Imageview +============================================================ +* Functions + + + * :ref:`zeImageViewCreateExt` + * :ref:`zeImageViewCreateExp` + + +* Enumerations + + + * :ref:`ze-image-view-ext-version-t` + * :ref:`ze-image-view-exp-version-t` + + + + +Imageview Functions +------------------------------------------------------------------------------ + + +.. _zeImageViewCreateExt: + +zeImageViewCreateExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeImageViewCreateExt + :project: LevelZero + + +.. _zeImageViewCreateExp: + +zeImageViewCreateExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeImageViewCreateExp + :project: LevelZero + + + +Imageview Enums +------------------------------------------------------------------------------ + + +.. _ze-image-view-ext-version-t: + +ze_image_view_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_view_ext_version_t + :project: LevelZero + + +.. _ze-image-view-exp-version-t: + +ze_image_view_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_view_exp_version_t + :project: LevelZero + + + + + + + +Imageviewplanar +============================================================ +* Enumerations + + + * :ref:`ze-image-view-planar-ext-version-t` + * :ref:`ze-image-view-planar-exp-version-t` + + +* Structures + + + * :ref:`ze-image-view-planar-ext-desc-t` + * :ref:`ze-image-view-planar-exp-desc-t` + + + + +Imageviewplanar Enums +------------------------------------------------------------------------------ + + +.. _ze-image-view-planar-ext-version-t: + +ze_image_view_planar_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_view_planar_ext_version_t + :project: LevelZero + + +.. _ze-image-view-planar-exp-version-t: + +ze_image_view_planar_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_view_planar_exp_version_t + :project: LevelZero + + +Imageviewplanar Structures +------------------------------------------------------------------------------ + +.. _ze-image-view-planar-ext-desc-t: + +ze_image_view_planar_ext_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_image_view_planar_ext_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-image-view-planar-exp-desc-t: + +ze_image_view_planar_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_image_view_planar_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Kernelschedulinghints +============================================================ +* Functions + + + * :ref:`zeKernelSchedulingHintExp` + + +* Enumerations + + + * :ref:`ze-scheduling-hints-exp-version-t` + * :ref:`ze-scheduling-hint-exp-flags-t` + + +* Structures + + + * :ref:`ze-scheduling-hint-exp-properties-t` + * :ref:`ze-scheduling-hint-exp-desc-t` + + +Kernelschedulinghints Functions +------------------------------------------------------------------------------ + + +.. _zeKernelSchedulingHintExp: + +zeKernelSchedulingHintExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeKernelSchedulingHintExp + :project: LevelZero + + + +Kernelschedulinghints Enums +------------------------------------------------------------------------------ + + +.. _ze-scheduling-hints-exp-version-t: + +ze_scheduling_hints_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_scheduling_hints_exp_version_t + :project: LevelZero + + +.. _ze-scheduling-hint-exp-flags-t: + +ze_scheduling_hint_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_scheduling_hint_exp_flag_t + :project: LevelZero + + +Kernelschedulinghints Structures +------------------------------------------------------------------------------ + +.. _ze-scheduling-hint-exp-properties-t: + +ze_scheduling_hint_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_scheduling_hint_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-scheduling-hint-exp-desc-t: + +ze_scheduling_hint_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_scheduling_hint_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Linkonceodr +============================================================ +* Enumerations + + + * :ref:`ze-linkonce-odr-ext-version-t` + + + + + + +Linkonceodr Enums +------------------------------------------------------------------------------ + + +.. _ze-linkonce-odr-ext-version-t: + +ze_linkonce_odr_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_linkonce_odr_ext_version_t + :project: LevelZero + + + + + + + +Powersavinghint +============================================================ +* Enumerations + + + * :ref:`ze-power-saving-hint-exp-version-t` + * :ref:`ze-power-saving-hint-type-t` + + +* Structures + + + * :ref:`ze-context-power-saving-hint-exp-desc-t` + + + + +Powersavinghint Enums +------------------------------------------------------------------------------ + + +.. _ze-power-saving-hint-exp-version-t: + +ze_power_saving_hint_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_power_saving_hint_exp_version_t + :project: LevelZero + + +.. _ze-power-saving-hint-type-t: + +ze_power_saving_hint_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_power_saving_hint_type_t + :project: LevelZero + + +Powersavinghint Structures +------------------------------------------------------------------------------ + +.. _ze-context-power-saving-hint-exp-desc-t: + +ze_context_power_saving_hint_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_context_power_saving_hint_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Subgroups +============================================================ +* Enumerations + + + * :ref:`ze-subgroup-ext-version-t` + + + + + + +Subgroups Enums +------------------------------------------------------------------------------ + + +.. _ze-subgroup-ext-version-t: + +ze_subgroup_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_subgroup_ext_version_t + :project: LevelZero + + + + + + + +Eucount +============================================================ +* Enumerations + + + * :ref:`ze-eu-count-ext-version-t` + + +* Structures + + + * :ref:`ze-eu-count-ext-t` + + + + +Eucount Enums +------------------------------------------------------------------------------ + + +.. _ze-eu-count-ext-version-t: + +ze_eu_count_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_eu_count_ext_version_t + :project: LevelZero + + +Eucount Structures +------------------------------------------------------------------------------ + +.. _ze-eu-count-ext-t: + +ze_eu_count_ext_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_eu_count_ext_t + :project: LevelZero + :members: + :undoc-members: + + + + +Pciproperties +============================================================ +* Functions + + + * :ref:`zeDevicePciGetPropertiesExt` + + +* Enumerations + + + * :ref:`ze-pci-properties-ext-version-t` + + +* Structures + + + * :ref:`ze-pci-address-ext-t` + * :ref:`ze-pci-speed-ext-t` + * :ref:`ze-pci-ext-properties-t` + + +Pciproperties Functions +------------------------------------------------------------------------------ + + +.. _zeDevicePciGetPropertiesExt: + +zeDevicePciGetPropertiesExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDevicePciGetPropertiesExt + :project: LevelZero + + + +Pciproperties Enums +------------------------------------------------------------------------------ + + +.. _ze-pci-properties-ext-version-t: + +ze_pci_properties_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_pci_properties_ext_version_t + :project: LevelZero + + +Pciproperties Structures +------------------------------------------------------------------------------ + +.. _ze-pci-address-ext-t: + +ze_pci_address_ext_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_pci_address_ext_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-pci-speed-ext-t: + +ze_pci_speed_ext_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_pci_speed_ext_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-pci-ext-properties-t: + +ze_pci_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_pci_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Srgb +============================================================ +* Enumerations + + + * :ref:`ze-srgb-ext-version-t` + + +* Structures + + + * :ref:`ze-srgb-ext-desc-t` + + + + +Srgb Enums +------------------------------------------------------------------------------ + + +.. _ze-srgb-ext-version-t: + +ze_srgb_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_srgb_ext_version_t + :project: LevelZero + + +Srgb Structures +------------------------------------------------------------------------------ + +.. _ze-srgb-ext-desc-t: + +ze_srgb_ext_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_srgb_ext_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Imagecopy +============================================================ +* Functions + + + * :ref:`zeCommandListAppendImageCopyToMemoryExt` + * :ref:`zeCommandListAppendImageCopyFromMemoryExt` + + +* Enumerations + + + * :ref:`ze-image-copy-ext-version-t` + + + + +Imagecopy Functions +------------------------------------------------------------------------------ + + +.. _zeCommandListAppendImageCopyToMemoryExt: + +zeCommandListAppendImageCopyToMemoryExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendImageCopyToMemoryExt + :project: LevelZero + + +.. _zeCommandListAppendImageCopyFromMemoryExt: + +zeCommandListAppendImageCopyFromMemoryExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListAppendImageCopyFromMemoryExt + :project: LevelZero + + + +Imagecopy Enums +------------------------------------------------------------------------------ + + +.. _ze-image-copy-ext-version-t: + +ze_image_copy_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_copy_ext_version_t + :project: LevelZero + + + + + +Imagequeryallocproperties +============================================================ +* Functions + + + * :ref:`zeImageGetAllocPropertiesExt` + + +* Enumerations + + + * :ref:`ze-image-query-alloc-properties-ext-version-t` + + +* Structures + + + * :ref:`ze-image-allocation-ext-properties-t` + + +Imagequeryallocproperties Functions +------------------------------------------------------------------------------ + + +.. _zeImageGetAllocPropertiesExt: + +zeImageGetAllocPropertiesExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeImageGetAllocPropertiesExt + :project: LevelZero + + + +Imagequeryallocproperties Enums +------------------------------------------------------------------------------ + + +.. _ze-image-query-alloc-properties-ext-version-t: + +ze_image_query_alloc_properties_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_query_alloc_properties_ext_version_t + :project: LevelZero + + +Imagequeryallocproperties Structures +------------------------------------------------------------------------------ + +.. _ze-image-allocation-ext-properties-t: + +ze_image_allocation_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_image_allocation_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Linkageinspection +============================================================ +* Functions + + + * :ref:`zeModuleInspectLinkageExt` + + +* Enumerations + + + * :ref:`ze-linkage-inspection-ext-version-t` + * :ref:`ze-linkage-inspection-ext-flags-t` + + +* Structures + + + * :ref:`ze-linkage-inspection-ext-desc-t` + + +Linkageinspection Functions +------------------------------------------------------------------------------ + + +.. _zeModuleInspectLinkageExt: + +zeModuleInspectLinkageExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeModuleInspectLinkageExt + :project: LevelZero + + + +Linkageinspection Enums +------------------------------------------------------------------------------ + + +.. _ze-linkage-inspection-ext-version-t: + +ze_linkage_inspection_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_linkage_inspection_ext_version_t + :project: LevelZero + + +.. _ze-linkage-inspection-ext-flags-t: + +ze_linkage_inspection_ext_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_linkage_inspection_ext_flag_t + :project: LevelZero + + +Linkageinspection Structures +------------------------------------------------------------------------------ + +.. _ze-linkage-inspection-ext-desc-t: + +ze_linkage_inspection_ext_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_linkage_inspection_ext_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Memorycompressionhints +============================================================ +* Enumerations + + + * :ref:`ze-memory-compression-hints-ext-version-t` + * :ref:`ze-memory-compression-hints-ext-flags-t` + + +* Structures + + + * :ref:`ze-memory-compression-hints-ext-desc-t` + + + + +Memorycompressionhints Enums +------------------------------------------------------------------------------ + + +.. _ze-memory-compression-hints-ext-version-t: + +ze_memory_compression_hints_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_memory_compression_hints_ext_version_t + :project: LevelZero + + +.. _ze-memory-compression-hints-ext-flags-t: + +ze_memory_compression_hints_ext_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_memory_compression_hints_ext_flag_t + :project: LevelZero + + +Memorycompressionhints Structures +------------------------------------------------------------------------------ + +.. _ze-memory-compression-hints-ext-desc-t: + +ze_memory_compression_hints_ext_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_memory_compression_hints_ext_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Memoryfreepolicies +============================================================ +* Functions + + + * :ref:`zeMemFreeExt` + + +* Enumerations + + + * :ref:`ze-memory-free-policies-ext-version-t` + * :ref:`ze-driver-memory-free-policy-ext-flags-t` + + +* Structures + + + * :ref:`ze-driver-memory-free-ext-properties-t` + * :ref:`ze-memory-free-ext-desc-t` + + +Memoryfreepolicies Functions +------------------------------------------------------------------------------ + + +.. _zeMemFreeExt: + +zeMemFreeExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemFreeExt + :project: LevelZero + + + +Memoryfreepolicies Enums +------------------------------------------------------------------------------ + + +.. _ze-memory-free-policies-ext-version-t: + +ze_memory_free_policies_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_memory_free_policies_ext_version_t + :project: LevelZero + + +.. _ze-driver-memory-free-policy-ext-flags-t: + +ze_driver_memory_free_policy_ext_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_driver_memory_free_policy_ext_flag_t + :project: LevelZero + + +Memoryfreepolicies Structures +------------------------------------------------------------------------------ + +.. _ze-driver-memory-free-ext-properties-t: + +ze_driver_memory_free_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_driver_memory_free_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-memory-free-ext-desc-t: + +ze_memory_free_ext_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_memory_free_ext_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + + + + + +Bandwidth +============================================================ +* Structures + + + * :ref:`ze-device-p2p-bandwidth-exp-properties-t` + * :ref:`ze-copy-bandwidth-exp-properties-t` + + + + + +Bandwidth Structures +------------------------------------------------------------------------------ + +.. _ze-device-p2p-bandwidth-exp-properties-t: + +ze_device_p2p_bandwidth_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_p2p_bandwidth_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-copy-bandwidth-exp-properties-t: + +ze_copy_bandwidth_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_copy_bandwidth_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Deviceluid +============================================================ +* Enumerations + + + * :ref:`ze-device-luid-ext-version-t` + + +* Structures + + + * :ref:`ze-device-luid-ext-t` + * :ref:`ze-device-luid-ext-properties-t` + + + + +Deviceluid Enums +------------------------------------------------------------------------------ + + +.. _ze-device-luid-ext-version-t: + +ze_device_luid_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_luid_ext_version_t + :project: LevelZero + + +Deviceluid Structures +------------------------------------------------------------------------------ + +.. _ze-device-luid-ext-t: + +ze_device_luid_ext_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_luid_ext_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-luid-ext-properties-t: + +ze_device_luid_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_luid_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Fabric +============================================================ +* Functions + + + * :ref:`zeFabricVertexGetExp` + * :ref:`zeFabricVertexGetSubVerticesExp` + * :ref:`zeFabricVertexGetPropertiesExp` + * :ref:`zeFabricVertexGetDeviceExp` + * :ref:`zeDeviceGetFabricVertexExp` + * :ref:`zeFabricEdgeGetExp` + * :ref:`zeFabricEdgeGetVerticesExp` + * :ref:`zeFabricEdgeGetPropertiesExp` + + +* Enumerations + + + * :ref:`ze-fabric-vertex-exp-type-t` + * :ref:`ze-fabric-edge-exp-duplexity-t` + + +* Structures + + + * :ref:`ze-fabric-vertex-pci-exp-address-t` + * :ref:`ze-fabric-vertex-exp-properties-t` + * :ref:`ze-fabric-edge-exp-properties-t` + + +Fabric Functions +------------------------------------------------------------------------------ + + +.. _zeFabricVertexGetExp: + +zeFabricVertexGetExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFabricVertexGetExp + :project: LevelZero + + +.. _zeFabricVertexGetSubVerticesExp: + +zeFabricVertexGetSubVerticesExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFabricVertexGetSubVerticesExp + :project: LevelZero + + +.. _zeFabricVertexGetPropertiesExp: + +zeFabricVertexGetPropertiesExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFabricVertexGetPropertiesExp + :project: LevelZero + + +.. _zeFabricVertexGetDeviceExp: + +zeFabricVertexGetDeviceExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFabricVertexGetDeviceExp + :project: LevelZero + + +.. _zeDeviceGetFabricVertexExp: + +zeDeviceGetFabricVertexExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDeviceGetFabricVertexExp + :project: LevelZero + + +.. _zeFabricEdgeGetExp: + +zeFabricEdgeGetExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFabricEdgeGetExp + :project: LevelZero + + +.. _zeFabricEdgeGetVerticesExp: + +zeFabricEdgeGetVerticesExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFabricEdgeGetVerticesExp + :project: LevelZero + + +.. _zeFabricEdgeGetPropertiesExp: + +zeFabricEdgeGetPropertiesExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeFabricEdgeGetPropertiesExp + :project: LevelZero + + + +Fabric Enums +------------------------------------------------------------------------------ + + +.. _ze-fabric-vertex-exp-type-t: + +ze_fabric_vertex_exp_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_fabric_vertex_exp_type_t + :project: LevelZero + + +.. _ze-fabric-edge-exp-duplexity-t: + +ze_fabric_edge_exp_duplexity_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_fabric_edge_exp_duplexity_t + :project: LevelZero + + +Fabric Structures +------------------------------------------------------------------------------ + +.. _ze-fabric-vertex-pci-exp-address-t: + +ze_fabric_vertex_pci_exp_address_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_fabric_vertex_pci_exp_address_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-fabric-vertex-exp-properties-t: + +ze_fabric_vertex_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_fabric_vertex_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-fabric-edge-exp-properties-t: + +ze_fabric_edge_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_fabric_edge_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Memoryproperties +============================================================ +* Enumerations + + + * :ref:`ze-device-memory-properties-ext-version-t` + * :ref:`ze-device-memory-ext-type-t` + + +* Structures + + + * :ref:`ze-device-memory-ext-properties-t` + + + + +Memoryproperties Enums +------------------------------------------------------------------------------ + + +.. _ze-device-memory-properties-ext-version-t: + +ze_device_memory_properties_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_memory_properties_ext_version_t + :project: LevelZero + + +.. _ze-device-memory-ext-type-t: + +ze_device_memory_ext_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_memory_ext_type_t + :project: LevelZero + + +Memoryproperties Structures +------------------------------------------------------------------------------ + +.. _ze-device-memory-ext-properties-t: + +ze_device_memory_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_memory_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Bfloat16conversions +============================================================ +* Enumerations + + + * :ref:`ze-bfloat16-conversions-ext-version-t` + + + + + + +Bfloat16conversions Enums +------------------------------------------------------------------------------ + + +.. _ze-bfloat16-conversions-ext-version-t: + +ze_bfloat16_conversions_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_bfloat16_conversions_ext_version_t + :project: LevelZero + + + + + + + +Deviceipversion +============================================================ +* Enumerations + + + * :ref:`ze-device-ip-version-version-t` + + +* Structures + + + * :ref:`ze-device-ip-version-ext-t` + + + + +Deviceipversion Enums +------------------------------------------------------------------------------ + + +.. _ze-device-ip-version-version-t: + +ze_device_ip_version_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_device_ip_version_version_t + :project: LevelZero + + +Deviceipversion Structures +------------------------------------------------------------------------------ + +.. _ze-device-ip-version-ext-t: + +ze_device_ip_version_ext_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_ip_version_ext_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Kernelmaxgroupsizeproperties +============================================================ +* Enumerations + + + * :ref:`ze-kernel-max-group-size-properties-ext-version-t` + + +* Structures + + + * :ref:`ze-kernel-max-group-size-properties-ext-t` + + + + +Kernelmaxgroupsizeproperties Enums +------------------------------------------------------------------------------ + + +.. _ze-kernel-max-group-size-properties-ext-version-t: + +ze_kernel_max_group_size_properties_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_kernel_max_group_size_properties_ext_version_t + :project: LevelZero + + +Kernelmaxgroupsizeproperties Structures +------------------------------------------------------------------------------ + +.. _ze-kernel-max-group-size-properties-ext-t: + +ze_kernel_max_group_size_properties_ext_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_kernel_max_group_size_properties_ext_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Suballocationsproperties +============================================================ +* Enumerations + + + * :ref:`ze-sub-allocations-exp-version-t` + + +* Structures + + + * :ref:`ze-sub-allocation-t` + * :ref:`ze-memory-sub-allocations-exp-properties-t` + + + + +Suballocationsproperties Enums +------------------------------------------------------------------------------ + + +.. _ze-sub-allocations-exp-version-t: + +ze_sub_allocations_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_sub_allocations_exp_version_t + :project: LevelZero + + +Suballocationsproperties Structures +------------------------------------------------------------------------------ + +.. _ze-sub-allocation-t: + +ze_sub_allocation_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_sub_allocation_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-memory-sub-allocations-exp-properties-t: + +ze_memory_sub_allocations_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_memory_sub_allocations_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Eventquerykerneltimestamps +============================================================ +* Functions + + + * :ref:`zeEventQueryKernelTimestampsExt` + + +* Enumerations + + + * :ref:`ze-event-query-kernel-timestamps-ext-version-t` + * :ref:`ze-event-query-kernel-timestamps-ext-flags-t` + + +* Structures + + + * :ref:`ze-event-query-kernel-timestamps-ext-properties-t` + * :ref:`ze-synchronized-timestamp-data-ext-t` + * :ref:`ze-synchronized-timestamp-result-ext-t` + * :ref:`ze-event-query-kernel-timestamps-results-ext-properties-t` + + +Eventquerykerneltimestamps Functions +------------------------------------------------------------------------------ + + +.. _zeEventQueryKernelTimestampsExt: + +zeEventQueryKernelTimestampsExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeEventQueryKernelTimestampsExt + :project: LevelZero + + + +Eventquerykerneltimestamps Enums +------------------------------------------------------------------------------ + + +.. _ze-event-query-kernel-timestamps-ext-version-t: + +ze_event_query_kernel_timestamps_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_event_query_kernel_timestamps_ext_version_t + :project: LevelZero + + +.. _ze-event-query-kernel-timestamps-ext-flags-t: + +ze_event_query_kernel_timestamps_ext_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_event_query_kernel_timestamps_ext_flag_t + :project: LevelZero + + +Eventquerykerneltimestamps Structures +------------------------------------------------------------------------------ + +.. _ze-event-query-kernel-timestamps-ext-properties-t: + +ze_event_query_kernel_timestamps_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_event_query_kernel_timestamps_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-synchronized-timestamp-data-ext-t: + +ze_synchronized_timestamp_data_ext_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_synchronized_timestamp_data_ext_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-synchronized-timestamp-result-ext-t: + +ze_synchronized_timestamp_result_ext_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_synchronized_timestamp_result_ext_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-event-query-kernel-timestamps-results-ext-properties-t: + +ze_event_query_kernel_timestamps_results_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_event_query_kernel_timestamps_results_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Rtasbuilder +============================================================ +* Functions + + + * :ref:`zeRTASBuilderCreateExp` + * :ref:`zeRTASBuilderGetBuildPropertiesExp` + * :ref:`zeDriverRTASFormatCompatibilityCheckExp` + * :ref:`zeRTASBuilderBuildExp` + * :ref:`zeRTASBuilderDestroyExp` + * :ref:`zeRTASParallelOperationCreateExp` + * :ref:`zeRTASParallelOperationGetPropertiesExp` + * :ref:`zeRTASParallelOperationJoinExp` + * :ref:`zeRTASParallelOperationDestroyExp` + + +* Enumerations + + + * :ref:`ze-rtas-builder-exp-version-t` + * :ref:`ze-rtas-device-exp-flags-t` + * :ref:`ze-rtas-format-exp-t` + * :ref:`ze-rtas-builder-exp-flags-t` + * :ref:`ze-rtas-parallel-operation-exp-flags-t` + * :ref:`ze-rtas-builder-geometry-exp-flags-t` + * :ref:`ze-rtas-builder-instance-exp-flags-t` + * :ref:`ze-rtas-builder-build-op-exp-flags-t` + * :ref:`ze-rtas-builder-build-quality-hint-exp-t` + * :ref:`ze-rtas-builder-geometry-type-exp-t` + * :ref:`ze-rtas-builder-input-data-format-exp-t` + + +* Structures + + + * :ref:`ze-rtas-builder-exp-desc-t` + * :ref:`ze-rtas-builder-exp-properties-t` + * :ref:`ze-rtas-parallel-operation-exp-properties-t` + * :ref:`ze-rtas-device-exp-properties-t` + * :ref:`ze-rtas-float3-exp-t` + * :ref:`ze-rtas-transform-float3x4-column-major-exp-t` + * :ref:`ze-rtas-transform-float3x4-aligned-column-major-exp-t` + * :ref:`ze-rtas-transform-float3x4-row-major-exp-t` + * :ref:`ze-rtas-aabb-exp-t` + * :ref:`ze-rtas-triangle-indices-uint32-exp-t` + * :ref:`ze-rtas-quad-indices-uint32-exp-t` + * :ref:`ze-rtas-builder-geometry-info-exp-t` + * :ref:`ze-rtas-builder-triangles-geometry-info-exp-t` + * :ref:`ze-rtas-builder-quads-geometry-info-exp-t` + * :ref:`ze-rtas-geometry-aabbs-exp-cb-params-t` + * :ref:`ze-rtas-builder-procedural-geometry-info-exp-t` + * :ref:`ze-rtas-builder-instance-geometry-info-exp-t` + * :ref:`ze-rtas-builder-build-op-exp-desc-t` + + +Rtasbuilder Functions +------------------------------------------------------------------------------ + + +.. _zeRTASBuilderCreateExp: + +zeRTASBuilderCreateExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeRTASBuilderCreateExp + :project: LevelZero + + +.. _zeRTASBuilderGetBuildPropertiesExp: + +zeRTASBuilderGetBuildPropertiesExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeRTASBuilderGetBuildPropertiesExp + :project: LevelZero + + +.. _zeDriverRTASFormatCompatibilityCheckExp: + +zeDriverRTASFormatCompatibilityCheckExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeDriverRTASFormatCompatibilityCheckExp + :project: LevelZero + + +.. _zeRTASBuilderBuildExp: + +zeRTASBuilderBuildExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeRTASBuilderBuildExp + :project: LevelZero + + +.. _zeRTASBuilderDestroyExp: + +zeRTASBuilderDestroyExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeRTASBuilderDestroyExp + :project: LevelZero + + +.. _zeRTASParallelOperationCreateExp: + +zeRTASParallelOperationCreateExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeRTASParallelOperationCreateExp + :project: LevelZero + + +.. _zeRTASParallelOperationGetPropertiesExp: + +zeRTASParallelOperationGetPropertiesExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeRTASParallelOperationGetPropertiesExp + :project: LevelZero + + +.. _zeRTASParallelOperationJoinExp: + +zeRTASParallelOperationJoinExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeRTASParallelOperationJoinExp + :project: LevelZero + + +.. _zeRTASParallelOperationDestroyExp: + +zeRTASParallelOperationDestroyExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeRTASParallelOperationDestroyExp + :project: LevelZero + + + +Rtasbuilder Enums +------------------------------------------------------------------------------ + + +.. _ze-rtas-builder-exp-version-t: + +ze_rtas_builder_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_rtas_builder_exp_version_t + :project: LevelZero + + +.. _ze-rtas-device-exp-flags-t: + +ze_rtas_device_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_rtas_device_exp_flag_t + :project: LevelZero + + +.. _ze-rtas-format-exp-t: + +ze_rtas_format_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_rtas_format_exp_t + :project: LevelZero + + +.. _ze-rtas-builder-exp-flags-t: + +ze_rtas_builder_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_rtas_builder_exp_flag_t + :project: LevelZero + + +.. _ze-rtas-parallel-operation-exp-flags-t: + +ze_rtas_parallel_operation_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_rtas_parallel_operation_exp_flag_t + :project: LevelZero + + +.. _ze-rtas-builder-geometry-exp-flags-t: + +ze_rtas_builder_geometry_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_rtas_builder_geometry_exp_flag_t + :project: LevelZero + + +.. _ze-rtas-builder-instance-exp-flags-t: + +ze_rtas_builder_instance_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_rtas_builder_instance_exp_flag_t + :project: LevelZero + + +.. _ze-rtas-builder-build-op-exp-flags-t: + +ze_rtas_builder_build_op_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_rtas_builder_build_op_exp_flag_t + :project: LevelZero + + +.. _ze-rtas-builder-build-quality-hint-exp-t: + +ze_rtas_builder_build_quality_hint_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_rtas_builder_build_quality_hint_exp_t + :project: LevelZero + + +.. _ze-rtas-builder-geometry-type-exp-t: + +ze_rtas_builder_geometry_type_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_rtas_builder_geometry_type_exp_t + :project: LevelZero + + +.. _ze-rtas-builder-input-data-format-exp-t: + +ze_rtas_builder_input_data_format_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_rtas_builder_input_data_format_exp_t + :project: LevelZero + + +Rtasbuilder Structures +------------------------------------------------------------------------------ + +.. _ze-rtas-builder-exp-desc-t: + +ze_rtas_builder_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_builder_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-builder-exp-properties-t: + +ze_rtas_builder_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_builder_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-parallel-operation-exp-properties-t: + +ze_rtas_parallel_operation_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_parallel_operation_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-device-exp-properties-t: + +ze_rtas_device_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_device_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-float3-exp-t: + +ze_rtas_float3_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_float3_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-transform-float3x4-column-major-exp-t: + +ze_rtas_transform_float3x4_column_major_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_transform_float3x4_column_major_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-transform-float3x4-aligned-column-major-exp-t: + +ze_rtas_transform_float3x4_aligned_column_major_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_transform_float3x4_aligned_column_major_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-transform-float3x4-row-major-exp-t: + +ze_rtas_transform_float3x4_row_major_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_transform_float3x4_row_major_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-aabb-exp-t: + +ze_rtas_aabb_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_aabb_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-triangle-indices-uint32-exp-t: + +ze_rtas_triangle_indices_uint32_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_triangle_indices_uint32_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-quad-indices-uint32-exp-t: + +ze_rtas_quad_indices_uint32_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_quad_indices_uint32_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-builder-geometry-info-exp-t: + +ze_rtas_builder_geometry_info_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_builder_geometry_info_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-builder-triangles-geometry-info-exp-t: + +ze_rtas_builder_triangles_geometry_info_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_builder_triangles_geometry_info_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-builder-quads-geometry-info-exp-t: + +ze_rtas_builder_quads_geometry_info_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_builder_quads_geometry_info_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-geometry-aabbs-exp-cb-params-t: + +ze_rtas_geometry_aabbs_exp_cb_params_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_geometry_aabbs_exp_cb_params_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-builder-procedural-geometry-info-exp-t: + +ze_rtas_builder_procedural_geometry_info_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_builder_procedural_geometry_info_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-builder-instance-geometry-info-exp-t: + +ze_rtas_builder_instance_geometry_info_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_builder_instance_geometry_info_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-rtas-builder-build-op-exp-desc-t: + +ze_rtas_builder_build_op_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_rtas_builder_build_op_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Counterbasedeventpool +============================================================ +* Enumerations + + + * :ref:`ze-event-pool-counter-based-exp-version-t` + * :ref:`ze-event-pool-counter-based-exp-flags-t` + + +* Structures + + + * :ref:`ze-event-pool-counter-based-exp-desc-t` + + + + +Counterbasedeventpool Enums +------------------------------------------------------------------------------ + + +.. _ze-event-pool-counter-based-exp-version-t: + +ze_event_pool_counter_based_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_event_pool_counter_based_exp_version_t + :project: LevelZero + + +.. _ze-event-pool-counter-based-exp-flags-t: + +ze_event_pool_counter_based_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_event_pool_counter_based_exp_flag_t + :project: LevelZero + + +Counterbasedeventpool Structures +------------------------------------------------------------------------------ + +.. _ze-event-pool-counter-based-exp-desc-t: + +ze_event_pool_counter_based_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_event_pool_counter_based_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Bindlessimages +============================================================ +* Functions + + + * :ref:`zeMemGetPitchFor2dImage` + * :ref:`zeImageGetDeviceOffsetExp` + + +* Enumerations + + + * :ref:`ze-bindless-image-exp-version-t` + * :ref:`ze-image-bindless-exp-flags-t` + + +* Structures + + + * :ref:`ze-image-bindless-exp-desc-t` + * :ref:`ze-image-pitched-exp-desc-t` + * :ref:`ze-device-pitched-alloc-exp-properties-t` + + +Bindlessimages Functions +------------------------------------------------------------------------------ + + +.. _zeMemGetPitchFor2dImage: + +zeMemGetPitchFor2dImage +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeMemGetPitchFor2dImage + :project: LevelZero + + +.. _zeImageGetDeviceOffsetExp: + +zeImageGetDeviceOffsetExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeImageGetDeviceOffsetExp + :project: LevelZero + + + +Bindlessimages Enums +------------------------------------------------------------------------------ + + +.. _ze-bindless-image-exp-version-t: + +ze_bindless_image_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_bindless_image_exp_version_t + :project: LevelZero + + +.. _ze-image-bindless-exp-flags-t: + +ze_image_bindless_exp_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_image_bindless_exp_flag_t + :project: LevelZero + + +Bindlessimages Structures +------------------------------------------------------------------------------ + +.. _ze-image-bindless-exp-desc-t: + +ze_image_bindless_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_image_bindless_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-image-pitched-exp-desc-t: + +ze_image_pitched_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_image_pitched_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _ze-device-pitched-alloc-exp-properties-t: + +ze_device_pitched_alloc_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: ze_device_pitched_alloc_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Commandlistclone +============================================================ +* Functions + + + * :ref:`zeCommandListCreateCloneExp` + + +* Enumerations + + + * :ref:`ze-command-list-clone-exp-version-t` + + + + +Commandlistclone Functions +------------------------------------------------------------------------------ + + +.. _zeCommandListCreateCloneExp: + +zeCommandListCreateCloneExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListCreateCloneExp + :project: LevelZero + + + +Commandlistclone Enums +------------------------------------------------------------------------------ + + +.. _ze-command-list-clone-exp-version-t: + +ze_command_list_clone_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_command_list_clone_exp_version_t + :project: LevelZero + + + + + +Immediatecommandlistappend +============================================================ +* Functions + + + * :ref:`zeCommandListImmediateAppendCommandListsExp` + + +* Enumerations + + + * :ref:`ze-immediate-command-list-append-exp-version-t` + + + + +Immediatecommandlistappend Functions +------------------------------------------------------------------------------ + + +.. _zeCommandListImmediateAppendCommandListsExp: + +zeCommandListImmediateAppendCommandListsExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zeCommandListImmediateAppendCommandListsExp + :project: LevelZero + + + +Immediatecommandlistappend Enums +------------------------------------------------------------------------------ + + +.. _ze-immediate-command-list-append-exp-version-t: + +ze_immediate_command_list_append_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_immediate_command_list_append_exp_version_t + :project: LevelZero + + + diff --git a/level-zero/1.10/_sources/index.rst b/level-zero/1.10/_sources/index.rst new file mode 100644 index 0000000..a6071d7 --- /dev/null +++ b/level-zero/1.10/_sources/index.rst @@ -0,0 +1,21 @@ +.. + Copyright 2020 Intel Corporation + +.. oneAPI Level Zero Specification v1.10 + +.. _l0-section: + +=================================== + |l0_full_name|: |l0_spec_version| +=================================== + +.. toctree:: + + core/INTRO.rst + core/PROG.rst + tools/PROG.rst + sysman/PROG.rst + core/SPIRV.rst + core/EXT.rst + api.rst + versions.rst diff --git a/level-zero/1.10/_sources/sysman/EXT_EngineActivity.rst b/level-zero/1.10/_sources/sysman/EXT_EngineActivity.rst new file mode 100644 index 0000000..d7f87c0 --- /dev/null +++ b/level-zero/1.10/_sources/sysman/EXT_EngineActivity.rst @@ -0,0 +1,69 @@ + +:orphan: + +.. _ZES_extension_engine_activity: + +========================== + Engine Activity Extension +========================== + +API +---- + +* Functions + + * :ref:`zesEngineGetActivityExt` + +* Structures + + * :ref:`zes-engine-ext-properties-t` + +Engine Activity +~~~~~~~~~~~~~~~~~~ + +This extension provides capability to user to gather the activity stats for each Virtual Function (VF) associated with engine group. +Intended use case of the feature is to query utilization stats from Physical Function (PF) interface. However, the extension +may return error code :ref:`ZE_RESULT_ERROR_UNSUPPORTED_FEATURE ` if an environment does not support it. +If VF has no activity value to report, then implementation shall reflect that appropriately in :ref:`zes-engine-stats-t` struct so that percentage +calculation results in value of 0. +If PF has no activity value to report, then implementation shall reflect that appropriately in :ref:`zes-engine-stats-t` struct which is +at index 0 of the output vector such that utilization calculation results in value of 0. + +The following pseudo-code demonstrates a sequence for obtaining the engine activity for all Virtual Functions from Physical Function environment: + +.. parsed-literal:: + + // Query for engine properties and gather number of virtual function instances by passing extension structure. + // Number of VFs is per engine handle and equates to number of VFs actively using + // the resource represented by the engine handle. + // Together with pCount from GetActivityExt, user can gather the full view of engine + // utilization for all VFs and PF as shown below + + :ref:`zes-engine-properties-t` engineProps; + :ref:`zes-engine-ext-properties-t` engineExtProps; + engineProps.stype = ZES_STRUCTURE_TYPE_ENGINE_PROPERTIES; + engineProps.pNext = &engineExtProps; + engineExtProps.stype = ZES_STRUCTURE_TYPE_ENGINE_EXT_PROPERTIES; + + :ref:`zesEngineGetProperties`\(hEngine, &engineProps); + + // Query count of engine stats to gather + // this count is inclusive of PF and N number of VFs + // i.e. if engineStatCount = 4, then this implies, one PF engine stat at index 0 + // of output vector followed by engine stats for 3 VFs + uint32_t engineStatCount = 0; + {s}EngineGetActivityExt(hEngine, &engineStatCount, nullptr); + + // Gather engine stats for all VFs and PF. + // Gather two snapshots of engine activity and calculate percentage + // utilization per formula in :ref:`zes-engine-stats-t` + :ref:`zes-engine-stats-t`\* engineStats0 = (:ref:`zes-engine-stats-t`\*) allocate(engineStatCount * sizeof(:ref:`zes-engine-stats-t`\)); + {s}EngineGetActivityExt(hEngine, &engineStatCount, engineStats0); + sleep(1); + :ref:`zes-engine-stats-t`\* engineStats1 = (:ref:`zes-engine-stats-t`\*) allocate(engineStatCount * sizeof(:ref:`zes-engine-stats-t`\)); + {s}EngineGetActivityExt(hEngine, &engineStatCount, engineStats1); + + for (uint32_t idx = 0; idx < engineStatCount; ++idx) { + double utilization = (engineStats1[idx].activeTime - engineStats0[idx].activeTime)/(engineStats1[idx].timestamp - engineStats0[idx].timestamp); + output("%s Utilization of engine type pertaining to this handle = %.2f\n", (idx == 0) ? "PF" : "VF", utilization); + } diff --git a/level-zero/1.10/_sources/sysman/EXT_Exp_FirmwareSecurityVersion.rst b/level-zero/1.10/_sources/sysman/EXT_Exp_FirmwareSecurityVersion.rst new file mode 100644 index 0000000..c12902f --- /dev/null +++ b/level-zero/1.10/_sources/sysman/EXT_Exp_FirmwareSecurityVersion.rst @@ -0,0 +1,36 @@ + +:orphan: + +.. _ZES_experimental_firmware_security_version: + +=========================== + Firmware Security Version +=========================== + +API +---- + +* Functions + + * :ref:`zesFirmwareGetSecurityVersionExp` + * :ref:`zesFirmwareSetSecurityVersionExp` + +* Enumerations + + * :ref:`zes-firmware-security-exp-version-t` + +Security Version +~~~~~~~~~~~~~~~~ + +This feature helps to prevent flashing of older firmware that have certain security vulnerabilities by using an hardware enforced anti-rollback scheme. +User can flash a firmware image and sets its version as the security version number (SVN). Images with lower SVN cannot be applied to device with +higher SVN for security considerations. + +.. parsed-literal:: + + // Fetch current security version from the fuses + char* version = allocate(version_size); + :ref:`zesFirmwareGetSecurityVersionExp`\(hFirmware, version); + + // Set security version + :ref:`zesFirmwareSetSecurityVersionExp`\(hFirmware); diff --git a/level-zero/1.10/_sources/sysman/EXT_Exp_MemPageOfflineState.rst b/level-zero/1.10/_sources/sysman/EXT_Exp_MemPageOfflineState.rst new file mode 100644 index 0000000..50b6103 --- /dev/null +++ b/level-zero/1.10/_sources/sysman/EXT_Exp_MemPageOfflineState.rst @@ -0,0 +1,23 @@ + +:orphan: + +.. _ZES_extension_mem_state: + +======================== + Memory State Extension +======================== + +API +---- +* Enumerations + + * :ref:`zes-mem-page-offline-state-exp-version-t` + +* Structures + + * :ref:`zes-mem-page-offline-state-exp-t` + +Memory State +~~~~~~~~~~~~~~~~~~ + +This extension extends the functionality provided by the :ref:`zesMemoryGetState` in the Sysman API. Additional MemoryOffline metrics are added to this extension. \ No newline at end of file diff --git a/level-zero/1.10/_sources/sysman/EXT_Exp_RasState.rst b/level-zero/1.10/_sources/sysman/EXT_Exp_RasState.rst new file mode 100644 index 0000000..3608da8 --- /dev/null +++ b/level-zero/1.10/_sources/sysman/EXT_Exp_RasState.rst @@ -0,0 +1,76 @@ + +:orphan: + +.. _ZES_extension_ras_state: + +======================== + RAS Get State Extension +======================== + +API +---- + +* Functions + + * :ref:`zesRasGetStateExp` + * :ref:`zesRasClearStateExp` + +* Enumerations + + * :ref:`zes-ras-state-exp-version-t` + * :ref:`zes-ras-error-category-exp-t` + +* Structures + + * :ref:`zes-ras-state-exp-t` + + +RAS State +~~~~~~~~~~~ + +Reliability, Availability, Serviceability (RAS) is a standard mechanism to report HW errors. +In L0 Sysman, we report these errors via RAS API and organized into Correctable or Uncorrectable +errors. Furthermore, the errors can be grouped by category so that source of the error +is easily identifiable. + +This extension is defined with intent to provide an extensible interface to the user for discovering +these errors. A separate function is provided to allow users to clear the error counters. +This functionality extends and is intended to eventually replace existing mechanism via :ref:`zesRasGetState`\. + +To that end, this extension also adds new enumerator for RAS error categories. The list of error categories +include existing ones (refer to the Sysman Programming guide) and also additional ones which are defined here. +The additional error categories are listed below: + +================================================================================== ============================================================= ======================================= +Error category :ref:`ZES_RAS_ERROR_TYPE_CORRECTABLE ` :ref:`ZES_RAS_ERROR_TYPE_UNCORRECTABLE ` +================================================================================== ============================================================= ======================================= + :ref:`ZES_RAS_ERROR_CATEGORY_EXP_MEMORY_ERRORS ` Number of ECC correctable errors Number of ECC uncorrectable errors + that have occurred in memory - that have occurred in memory - + GDDR/HBM. GDDR/HBM. + :ref:`ZES_RAS_ERROR_CATEGORY_EXP_SCALE_ERRORS ` Number of correctable errors Number of ECC uncorrectable errors + that have occurred in scale IP that have occurred in scale IP + :ref:`ZES_RAS_ERROR_CATEGORY_EXP_L3FABRIC_ERRORS ` Number of ECC correctable errors Number of ECC uncorrectable errors + that have occurred in L3 fabric that have occurred in L3 fabric +================================================================================== ============================================================= ======================================= + +The following pseudo-code demonstrates a sequence for querying the number of error categories +supported by a platform and for obtaining the error counters for these categories. + +.. parsed-literal:: + + // Query for number of error categories supported by platform + uint32_t rasCategoryCount = 0; + {s}RasGetStateExp(rasHandle, &rasCategoryCount, nullptr); + + :ref:`zes-ras-state-exp-t`\* rasStates = (:ref:`zes-ras-state-exp-t`\*) allocate(rasCategoryCount * sizeof(:ref:`zes-ras-state-exp-t`\)); + + //Gather error states + {s}RasGetStateExp(rasHandle, &rasCategoryCount, rasStates); + + // Print error details + for(uint32_t i = 0; i < rasCategoryCount; i++) { + output(" Error category: %d, Error count: %llun \n", rasStates[i]->category, rasStates[i]->errorCounter); + } + + // Clear error counter for specific category, for example PROGRAMMING_ERRORS + {s}RasClearStateExp(rasHandle, ZES_RAS_ERROR_CAT_PROGRAMMING_ERRORS); diff --git a/level-zero/1.10/_sources/sysman/EXT_Exp_VirtualFunctionManagement.rst b/level-zero/1.10/_sources/sysman/EXT_Exp_VirtualFunctionManagement.rst new file mode 100644 index 0000000..da2fcaa --- /dev/null +++ b/level-zero/1.10/_sources/sysman/EXT_Exp_VirtualFunctionManagement.rst @@ -0,0 +1,68 @@ + +:orphan: + +.. _ZES_experimental_virtual_function_management: + +======================================== + Virtual Function Management Extension +======================================== + +API +---- + +* Functions + + * :ref:`zesDeviceEnumEnabledVFExp` + * :ref:`zesVFManagementGetVFCapabilitiesExp` + * :ref:`zesVFManagementGetVFMemoryUtilizationExp` + * :ref:`zesVFManagementGetVFEngineUtilizationExp` + +* Enumerations + + * :ref:`zes-vf-management-exp-version-t` + +* Structures + + * :ref:`zes-vf-exp-capabilities-t` + * :ref:`zes-vf-util-mem-exp-t` + * :ref:`zes-vf-util-engine-exp-t` + +Virtual Function Management +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +This feature adds the ability to retrieve telemetry from PF domain for monitoring per VF memory and engine utilization. +This telemetry is used to determine if a VM has oversubscribed GPU memory or observe engine business for a targeted workload. +If VF has no activity value to report, then implementation shall reflect that appropriately in :ref:`zes-vf-util-engine-exp-t` struct so that percentage +calculation results in value of 0. + +The following pseudo-code demonstrates a sequence for obtaining the engine activity for all Virtual Functions from Physical Function environment: + +.. parsed-literal:: + + // Gather count of VF handles + uint32_t numVf = 0; + :ref:`zes-vf-exp-capabilities-t` vfProps {}; + :ref:`zesDeviceEnumEnabledVFExp`\(hDevice, &numVf, nullptr); + + // Allocate memory for vf handles and call back in to gather handles + std::vector vfs(numVf, nullptr); + :ref:`zesDeviceEnumEnabledVFExp`\(hDevice, &numVf, vfs.data()); + + // Gather VF properties + std::vector <:ref:`zes-vf-exp-capabilities-t`\> vfProps(numVf); + for (uint32_t i = 0; i < numVf; i++) { + :ref:`zesVFManagementGetVFCapabilitiesExp`\(vfs[i], &vfProps[i]); + } + + // Detect the info types a particular VF supports + + // Using VF# 0 to demonstrate how to detect engine info type and query engine util info + zes_vf_handle_t activeVf = vfs[0]; + uint32_t engineStatCount = 0; + + :ref:`zesVFManagementGetVFEngineUtilizationExp`\(activeVf, &engineStatCount, nullptr); + // Allocate memory for vf engine stats + :ref:`zes-vf-util-engine-exp-t`\* engineStats0 = (:ref:`zes-vf-util-engine-exp-t`\*) allocate(engineStatCount * sizeof(:ref:`zes-vf-util-engine-exp-t`\)); + :ref:`zesVFManagementGetVFEngineUtilizationExp`\(activeVf, &engineStatCount, engineStats0); + sleep(1) + :ref:`zes-vf-util-engine-exp-t`\* engineStats1 = (:ref:`zes-vf-util-engine-exp-t`\*) allocate(engineStatCount * sizeof(:ref:`zes-vf-util-engine-exp-t`\)); + :ref:`zesVFManagementGetVFEngineUtilizationExp`\(activeVf, &engineStatCount, &engineStats1); \ No newline at end of file diff --git a/level-zero/1.10/_sources/sysman/EXT_Exp_power_domain.rst b/level-zero/1.10/_sources/sysman/EXT_Exp_power_domain.rst new file mode 100644 index 0000000..b11e215 --- /dev/null +++ b/level-zero/1.10/_sources/sysman/EXT_Exp_power_domain.rst @@ -0,0 +1,19 @@ + +:orphan: + +.. _ZES_extension_power_domain_properties: + +================================== + Power Domain Properties Extension +================================== + +API +---- + +* Enumerations + + * :ref:`zes-power-domain-properties-exp-version-t` + +* Structures + + * :ref:`zes-power-domain-exp-properties-t` diff --git a/level-zero/1.10/_sources/sysman/EXT_MemoryBwCounterValidBits.rst b/level-zero/1.10/_sources/sysman/EXT_MemoryBwCounterValidBits.rst new file mode 100644 index 0000000..40c317f --- /dev/null +++ b/level-zero/1.10/_sources/sysman/EXT_MemoryBwCounterValidBits.rst @@ -0,0 +1,19 @@ + +:orphan: + +.. _ZES_extension_mem_bandwidth_counter_bits_properties: + +============================================== + Memory Bandwidth Counter Valid Bits Extension +============================================== + +API +---- + +* Enumerations + + * :ref:`zes-mem-bandwidth-counter-bits-exp-version-t` + +* Structures + + * :ref:`zes-mem-bandwidth-counter-bits-exp-properties-t` diff --git a/level-zero/1.10/_sources/sysman/EXT_PowerLimits.rst b/level-zero/1.10/_sources/sysman/EXT_PowerLimits.rst new file mode 100644 index 0000000..cbfb460 --- /dev/null +++ b/level-zero/1.10/_sources/sysman/EXT_PowerLimits.rst @@ -0,0 +1,27 @@ + +:orphan: + +.. _ZES_extension_power_limits: + +======================== + Power Limits Extension +======================== + +API +---- + +* Functions + + * :ref:`zesPowerGetLimitsExt` + * :ref:`zesPowerSetLimitsExt` + +* Structures + + * :ref:`zes-power-limit-ext-desc-t` + * :ref:`zes-power-ext-properties-t` + +Power Limits +~~~~~~~~~~~~~~~~~~ + +This extension replaces the functionality provided by the :ref:`zesPowerGetLimits` & :ref:`zesPowerSetLimits` calls in the Sysman API. The correct usage of the new API +is shown in the Sysman Programming Guide. diff --git a/level-zero/1.10/_sources/sysman/EXT_SysmanDeviceMapping.rst b/level-zero/1.10/_sources/sysman/EXT_SysmanDeviceMapping.rst new file mode 100644 index 0000000..e58e525 --- /dev/null +++ b/level-zero/1.10/_sources/sysman/EXT_SysmanDeviceMapping.rst @@ -0,0 +1,67 @@ + +:orphan: + +.. _ZES_experimental_sysman_device_mapping: + +===================================== + Sysman Device mapping Extension +===================================== + +API +---- + +* Functions + + * :ref:`zesDriverGetDeviceByUuidExp` + * :ref:`zesDeviceGetSubDevicePropertiesExp` + +* Enumerations + + * :ref:`zes-sysman-device-mapping-exp-version-t` + +* Structures + + * :ref:`zes-subdevice-exp-properties-t` + + +Sysman Device Mapping +~~~~~~~~~~~~~~~~~~~~~ + +Three types of device hierarchy models FLAT, COMPOSITE and COMBINED are exposed by Level Zero driver implementation. +Core could use any model it needs for better performance, while SYSMAN keeps a uniform view of the system. + +This extension is defined with intent to provide an interface to the user for mapping core device +handle to sysman device or vice versa using UUID. + + +The following pseudo-code demonstrates a sequence for querying the sub device properties +and also how to query sysman device handle from the UUID. + +.. parsed-literal:: + + // Query Sysman device handle corresponding to given UUID + uint32_t subDeviceId = 0; + bool onSubDevice = false; + :ref:`zes-uuid-t` coreDeviceUuid; + zes_device_handle_t* phDevice = (zes_device_handle_t*)allocate(sizeof(zes_device_handle_t)); + :ref:`zesDriverGetDeviceByUuidExp`\(pSysmanDriverHandle, coreDeviceUuid, phDevice, &subDeviceId, &onSubDevice); + + // Query for number of sub devices of the sysman device + uint32_t subDeviceCount = 0; + :ref:`zesDeviceGetSubDevicePropertiesExp`\(pSysmanDeviceHandle, &subDeviceCount, nullptr); + + :ref:`zes-subdevice-exp-properties-t`\* subDeviceProperties = (:ref:`zes-subdevice-exp-properties-t`\*) allocate(subDeviceCount * sizeof(:ref:`zes-subdevice-exp-properties-t`\)); + + //Query sub device properties + :ref:`zesDeviceGetSubDevicePropertiesExp`\(pSysmanDeviceHandle, &subDeviceCount, subDeviceProperties); + + // Print sub device property details + for(uint32_t i = 0; i < subDeviceCount; i++) { + output(" Sub Device Id : %lu \\n", subDeviceProperties[i]->subdeviceId); + output("UUID : \\n"); + for (uint32_t j = 0; j < ZE_MAX_UUID_SIZE; j++) { + output("%x ",subDeviceProperties[i]->uuid.id[j]); + } + output("\\n"); + } + diff --git a/level-zero/1.10/_sources/sysman/PROG.rst b/level-zero/1.10/_sources/sysman/PROG.rst new file mode 100644 index 0000000..17f23c3 --- /dev/null +++ b/level-zero/1.10/_sources/sysman/PROG.rst @@ -0,0 +1,2426 @@ + + + + +.. _sysman-programming-guide: + +========================== + Sysman Programming Guide +========================== + +Introduction +============ + +Sysman is the System Resource Management library used to monitor and +control the power and performance of accelerator devices. + +High-level overview +=================== + +Environment Variables +--------------------- + +The System Resource Management library may now be initialized without using environment variables by calling :ref:`zesInit`\. + +For compatibility, the following environment variables may also be enabled during initialization for the respective feature. +It is recommended to initialize sysman either by calling :ref:`zesInit` or using the following environment variables but not both. + ++-----------------+-------------------------------------+------------+-----------------------------------------------------------------------------------+ +| Category | Name | Values | Description | ++=================+=====================================+============+===================================================================================+ +| Sysman | ZES_ENABLE_SYSMAN | {**0**, 1} | Enables driver initialization and dependencies for system management | ++-----------------+-------------------------------------+------------+-----------------------------------------------------------------------------------+ +| Sysman | ZES_ENABLE_SYSMAN_LOW_POWER | {**0**, 1} | Driver initialize the device in low power mode | ++-----------------+-------------------------------------+------------+-----------------------------------------------------------------------------------+ + +Initialization +-------------- + +An application wishing to manage power and performance for devices may +use the System Resource Management library to enumerate system management +driver and device handles. + +The following pseudo-code demonstrates a basic initialization and device discovery sequence: + +.. parsed-literal:: + + function main( ... ) + if (:ref:`zesInit`\(0) != :ref:`ZE_RESULT_SUCCESS `\) + output("Can't initialize the API") + else + # Discover all the drivers + uint32_t driversCount = 0 + :ref:`zesDriverGet`\(&driversCount, nullptr) + zes_driver_handle_t* allDrivers = allocate(driversCount * sizeof(zes_driver_handle_t)) + :ref:`zesDriverGet`\(&driversCount, allDrivers) + + zes_driver_handle_t hDriver = nullptr + for(i = 0 .. driversCount-1) + # Discover devices in a driver + uint32_t deviceCount = 0 + :ref:`zesDeviceGet`\(allDrivers[i], &deviceCount, nullptr) + + zes_device_handle_t* hSysmanHandles = + allocate_memory(deviceCount * sizeof(zes_device_handle_t)) + :ref:`zesDeviceGet`\(allDrivers[i], &deviceCount, hSysmanHandles) + + # Use the hSymanHandles to manage the devices + + free_memory(...) + +For compatibility, an application may also use the Level0 Core API to +enumerate through available accelerator devices in the system. For +each device handle, an application can cast it to a sysman device handle +to manage the system resources of the device. + +There is a unique handle for each device. Multiple threads can use the +handle. If concurrent accesses are made to the same device property +through the handle, the last request wins. + +The pseudo code below shows how to enumerate the GPU devices in the +system and create Sysman handles for them: + +.. parsed-literal:: + + function main( ... ) + if (:ref:`zeInit`\(0) != :ref:`ZE_RESULT_SUCCESS `\) + output("Can't initialize the API") + else + # Discover all the drivers + uint32_t driversCount = 0 + :ref:`zeDriverGet`\(&driversCount, nullptr) + ze_driver_handle_t* allDrivers = allocate(driversCount * sizeof(ze_driver_handle_t)) + :ref:`zeDriverGet`\(&driversCount, allDrivers) + + ze_driver_handle_t hDriver = nullptr + for(i = 0 .. driversCount-1) + # Discover devices in a driver + uint32_t deviceCount = 0 + :ref:`zeDeviceGet`\(allDrivers[i], &deviceCount, nullptr) + + ze_device_handle_t* allDevices = + allocate_memory(deviceCount * sizeof(ze_device_handle_t)) + :ref:`zeDeviceGet`\(allDrivers[i], &deviceCount, allDevices) + + for(devIndex = 0 .. deviceCount-1) + :ref:`ze-device-properties-t` device_properties {} + device_properties.stype = :ref:`ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES ` + :ref:`zeDeviceGetProperties`\(allDevices[devIndex], &device_properties) + if(:ref:`ZE_DEVICE_TYPE_GPU ` != device_properties.type) + next + # Get the Sysman device handle + zes_device_handle_t hSysmanDevice = (zes_device_handle_t)allDevices[devIndex] + # Start using hSysmanDevice to manage the device + + free_memory(...) + +Global device management +------------------------ + +The following operations are provided to access overall device +information and control aspects of the entire device: + +- Get device UUID, deviceID, number of sub-devices +- Get Brand/model/vendor name +- Query the information about processes using this device +- Reset device +- Query if the device has been repaired +- Query if the device needs to be reset and for what reasons (wedged, initiate repair) +- PCI information: + + - Get configured bars + - Get maximum supported bandwidth + - Query current speed (GEN/no. of lanes) + - Query current throughput + - Query packet retry counters + +The full list of available functions is described below. + +Device component management +--------------------------- + +Aside from management of the global properties of a device, there are +many device components that can be managed to change the performance +and/or power configuration of the device. Similar components are broken +into **classes** and each class has a set of operations that can be +performed on them. + +For example, devices typically have one or more frequency domains. The +Sysman API exposes a class for frequency and an enumeration of all +frequency domains that can be managed. + +The table below summarizes the classes that provide device queries and +an example list of components that would be enumerated for a device with +two sub-devices. The table shows the operations (queries) that will be +provided for all components in each class. + ++-----------------------+---------------------------------+-------------------------------------------+ +| Class | Components | Operations | ++=======================+=================================+===========================================+ +| Power_ | Card: | Get energy consumption | +| | power | | +| | | | +| | Package: | | +| | power | | +| | | | +| | Sub-device 0: total | | +| | power | | +| | | | +| | Sub-device 1: total | | +| | power | | ++-----------------------+---------------------------------+-------------------------------------------+ +| Frequency_ | Sub-device 0: GPU frequency | List available frequencies | +| | | | +| | Sub-device 0: Memory frequency | Set frequency range | +| | | | +| | Sub-device 1: GPU frequency | Get frequencies | +| | | | +| | Sub-device 1: Memory frequency | Get throttle reasons | +| | | | +| | | Get throttle time | ++-----------------------+---------------------------------+-------------------------------------------+ +| Engines_ | Sub-device 0: All engines | Get busy time | +| | | | +| | Sub-device 0: Compute engines | | +| | | | +| | Sub-device 0: Media engines | | +| | | | +| | Sub-device 0: Copy engines | | +| | | | +| | Sub-device 1: All engines | | +| | | | +| | Sub-device 1: Compute engines | | +| | | | +| | Sub-device 1: Media engines | | +| | | | +| | Sub-device 1: Copy engines | | ++-----------------------+---------------------------------+-------------------------------------------+ +| Scheduler_ | Sub-device 0: All engines | Get scheduler mode and properties | +| | | | +| | Sub-device 1: All engines | Get scheduler mode and properties | ++-----------------------+---------------------------------+-------------------------------------------+ +| Firmware_ | Sub-device 0: Enumerates each | Get firmware name and version | +| | firmware | | +| | | | +| | Sub-device 1: Enumerates each | | +| | firmware | | ++-----------------------+---------------------------------+-------------------------------------------+ +| Memory_ | Sub-device 0: Memory module | Get maximum supported bandwidth | +| | | | +| | Sub-device 1: Memory module | Get free memory | +| | | | +| | | Get current bandwidth | ++-----------------------+---------------------------------+-------------------------------------------+ +| Fabric-Port_ | Sub-device 0: Enumerates each | Get port configuration (UP/DOWN) | +| | port | | +| | | Get physical link details | +| | Sub-device 1: Enumerates each | | +| | port | Get port health | +| | | (healthy/degraded/failed/disabled) | +| | | | +| | | Get remote port | +| | | | +| | | Get port rx/tx speed | +| | | | +| | | Get port rx/tx bandwidth | ++-----------------------+---------------------------------+-------------------------------------------+ +| Temperature_ | Package: temperature (min, max) | Get current temperature sensor reading | +| | | | +| | Sub-device 0: GPU temperature | | +| | (min, max) | | +| | | | +| | Sub-device 0: Memory | | +| | temperature (min, max) | | +| | | | +| | Sub-device 1: GPU temperature | | +| | (min, max) | | +| | | | +| | Sub-device 1: Memory | | +| | temperature (min, max) | | ++-----------------------+---------------------------------+-------------------------------------------+ +| PSU_ | Package: Power supplies | Get details about the power supply | +| | | | +| | | Query current state (temperature, | +| | | current, fan) | ++-----------------------+---------------------------------+-------------------------------------------+ +| Fan_ | Package: Fans | Get details (max fan speed) | +| | | | +| | | Get config (fixed fan speed, | +| | | temperature-speed table) | +| | | | +| | | Query current fan speed | ++-----------------------+---------------------------------+-------------------------------------------+ +| LED_ | Package: LEDs | Get details (RGB capable) | +| | | | +| | | Query current state (on, color) | ++-----------------------+---------------------------------+-------------------------------------------+ +| RAS_ | Sub-device 0: One set of RAS | Read RAS total correctable and | +| | error counters | uncorrectable error counters | +| | | | +| | Sub-device 1: One set of RAS | Read breakdown of errors by category | +| | error counters | (no. resets, no. programming errors, | +| | | no. programming errors, no. driver | +| | | errors, no. compute errors, no. cache | +| | | errors, no. memory errors, no. PCI | +| | | errors, no. display errors, no. | +| | | non-compute errors) | ++-----------------------+---------------------------------+-------------------------------------------+ +| Diagnostics_ | Package: SCAN test suite | Get list of all diagnostics tests | +| | | | +| | Package: ARRAY test suite | | ++-----------------------+---------------------------------+-------------------------------------------+ + +The table below summarizes the classes that provide device controls and +an example list of components that would be enumerated for a device with +two sub-devices. The table shows the operations (controls) that will be +provided for all components in each class. + ++------------------------+---------------------------------+-------------------------------------------+ +| Class | Components | Operations | ++========================+=================================+===========================================+ +| Power_ | Card: power | Set sustained power limit | +| | | | +| | Package: power | Set burst power limit | +| | | | +| | | Set peak power limit | ++------------------------+---------------------------------+-------------------------------------------+ +| Frequency_ | Sub-device 0: GPU frequency | Set frequency range | +| | | | +| | Sub-device 0: Memory frequency | | +| | | | +| | Sub-device 1: GPU frequency | | +| | | | +| | Sub-device 1: Memory frequency | | ++------------------------+---------------------------------+-------------------------------------------+ +| Scheduler_ | Sub-device 0: All engines | Set scheduler mode | +| | | | +| | Sub-device 1: All engines | Set scheduler mode | ++------------------------+---------------------------------+-------------------------------------------+ +| Performance-Factor_ | Sub-device 0: Compute | Tune workload performance | +| | | | +| | Sub-device 0: Media | | +| | | | +| | Sub-device 1: Compute | | +| | | | +| | Sub-device 1: Media | | ++------------------------+---------------------------------+-------------------------------------------+ +| Standby_ | Sub-device 0: Control | Disable opportunistic standby | +| | entire sub-device | standby | +| | | | +| | Sub-device 1: Control entire | | +| | sub-device | | ++------------------------+---------------------------------+-------------------------------------------+ +| Firmware_ | Sub-device 0: Enumerates each | Flash new firmware | +| | firmware | | +| | | | +| | Sub-device 1: Enumerates each | | +| | firmware | | ++------------------------+---------------------------------+-------------------------------------------+ +| Fabric-Port_ | Sub-device 0: Control each port | Configure port UP/DOWN | +| | | | +| | Sub-device 1: Control each port | Turn beaconing ON/OFF | ++------------------------+---------------------------------+-------------------------------------------+ +| Fan_ | Package: Fans | Set config (fixed speed, temperature- | +| | | speed table) | ++------------------------+---------------------------------+-------------------------------------------+ +| LED_ | Package: LEDs | Turn LED on/off and set color | ++------------------------+---------------------------------+-------------------------------------------+ +| Diagnostics_ | SCAN test suite | Run all or a subset | +| | | of diagnostic tests | +| | ARRAY test suite | in the test suite | ++------------------------+---------------------------------+-------------------------------------------+ + +Device component enumeration +---------------------------- + +The Sysman API provides functions to enumerate all components in a class +that can be managed. + +For example, there is a frequency class which is used to control the +frequency of different parts of the device. On most devices, the +enumerator will provide two handles, one to control the GPU frequency +and one to enumerate the device memory frequency. This is illustrated in +the figure below: + +.. image:: ../images/tools_sysman_freq_flow.png + +In the C API, each class is associated with a unique handle type +(e.g. zes_freq_handle_t refers to a frequency component). In +the C++ API, each class is a C++ class (e.g. An instance of the class zes::SysmanFrequency +refers to a frequency component). + +The pseudo code below shows how to use the Sysman API to enumerate all +GPU frequency components and fix each to a specific frequency if this is +supported: + +.. parsed-literal:: + + function FixGpuFrequency(zes_device_handle_t hSysmanDevice, double FreqMHz) + uint32_t numFreqDomains + if ((:ref:`zesDeviceEnumFrequencyDomains`\(hSysmanDevice, &numFreqDomains, NULL) == :ref:`ZE_RESULT_SUCCESS `\)) + zes_freq_handle_t* pFreqHandles = + allocate_memory(numFreqDomains * sizeof(zes_freq_handle_t)) + if (:ref:`zesDeviceEnumFrequencyDomains`\(hSysmanDevice, &numFreqDomains, pFreqHandles) == :ref:`ZE_RESULT_SUCCESS `\) + for (index = 0 .. numFreqDomains-1) + :ref:`zes-freq-properties-t` props {}; + props.stype = :ref:`ZES_STRUCTURE_TYPE_FREQ_PROPERTIES `\; + if (:ref:`zesFrequencyGetProperties`\(pFreqHandles[index], &props) == :ref:`ZE_RESULT_SUCCESS `\) + # Only change the frequency of the domain if: + # 1. The domain controls a GPU accelerator + # 2. The domain frequency can be changed + if (props.type == :ref:`ZES_FREQ_DOMAIN_GPU ` + and props.canControl) + # Fix the frequency + :ref:`zes-freq-range-t` range + range.min = FreqMHz + range.max = FreqMHz + :ref:`zesFrequencySetRange`\(pFreqHandles[index], &range) + free_memory(...) + +Sub-device management +--------------------- + +A Sysman device handle operates at the device level. If a sub-device device handle is passed to +any of the Sysman functions, the result will be as if the device handle was used. + +The enumerator for device components will return a list of components that are located in each +sub-device. Properties for each component will indicate in which sub-device it is located. If software +wishing to manage components in only one sub-device should filter the enumerated components using the +sub-device ID (see :ref:`ze-device-properties-t`\.subdeviceId). + +The figure below shows the frequency components that will be enumerated on a device with two sub-devices where each sub-device has a GPU and +device memory frequency control: + +.. image:: ../images/tools_sysman_freq_subdevices.png + +The pseudo code below shows how to fix the GPU frequency on a specific +sub-device (notice the additional sub-device check): + +.. parsed-literal:: + + function FixSubdeviceGpuFrequency(zes_device_handle_t hSysmanDevice, uint32_t subdeviceId, double FreqMHz) + uint32_t numFreqDomains + if ((:ref:`zesDeviceEnumFrequencyDomains`\(hSysmanDevice, &numFreqDomains, NULL) == :ref:`ZE_RESULT_SUCCESS `\)) + zes_freq_handle_t* pFreqHandles = + allocate_memory(numFreqDomains * sizeof(zes_freq_handle_t)) + if (:ref:`zesDeviceEnumFrequencyDomains`\(hSysmanDevice, &numFreqDomains, pFreqHandles) == :ref:`ZE_RESULT_SUCCESS `\) + for (index = 0 .. numFreqDomains-1) + :ref:`zes-freq-properties-t` props {}; + props.stype = :ref:`ZES_STRUCTURE_TYPE_FREQ_PROPERTIES `\; + if (:ref:`zesFrequencyGetProperties`\(pFreqHandles[index], &props) == :ref:`ZE_RESULT_SUCCESS `\) + # Only change the frequency of the domain if: + # 1. The domain controls a GPU accelerator + # 2. The domain frequency can be changed + # 3. The domain is located in the specified sub-device + if (props.type == :ref:`ZES_FREQ_DOMAIN_GPU ` + and props.canControl + and props.subdeviceId == subdeviceId) + # Fix the frequency + :ref:`zes-freq-range-t` range + range.min = FreqMHz + range.max = FreqMHz + :ref:`zesFrequencySetRange`\(pFreqHandles[index], &range) + free_memory(...) + +Events +------ + +Events are a way to determine if changes have occurred on a device +e.g. new RAS errors without polling the Sysman API. An application +registers the events that it wishes to receive notification about and +then it listens for notifications. The application can choose to block +when listening - this will put the calling application thread to sleep +until new notifications are received. + +The API enables registering for events from multiple devices and +listening for any events coming from any devices by using one function +call. + +Once notifications have occurred, the application can use the query +Sysman interface functions to get more details. + +The following events are provided: + +- Any RAS errors have occurred + +The full list of available functions for handling events is described below. + +Telemetry and timestamps +------------------------ + +Many of the API calls return underlying hardware telemetry (counters). +These counters are typically monotonic and wrap around at the their +bit width boundaires. An application will typically want to take the +delta between two samples. Many times, the rate of change of a counter +is required. For example, sampling a counter for bytes transmitted through +a link and dividing by the delta time between the samples will yield +average bandwidth. + +When returning telemetry, the API will include a timestamp when the +underlying hardware counter was sampled. Each timestamp is only relevant +to the telemetry that it accompanies. Each timestamp associated with +a piece of telemetry can have it's own absolute base that can be +different from timestamps return with other telemetry. As a result, +no calculation should be made based on timestamps returned from +different telemetry. + +The timestamps are not guaranteed to have the same base between +applications. They should only be used within the execution of a single +application. + +Interface details +================= + +Global operations +----------------- + +Device Properties +~~~~~~~~~~~~~~~~~ + +The following operations permit getting properties about the entire +device: + ++-----------------------------------+-----------------------------------+ +| Function | Description | ++===================================+===================================+ +| :ref:`zesDeviceGetProperties`\() | Get static device properties - | +| | device UUID, sub-device ID, | +| | device brand/model/vendor strings | ++-----------------------------------+-----------------------------------+ +| :ref:`zesDeviceGetState`\() | Determine device state: was the | +| | device repaired, does the device | +| | need to be reset and for what | +| | reasons (wedged, initiate repair) | ++-----------------------------------+-----------------------------------+ + +The pseudo code below shows how to display general information about a +device: + +.. parsed-literal:: + + function ShowDeviceInfo(zes_device_handle_t hSysmanDevice) + :ref:`zes-device-properties-t` devProps {} + devProps.stype = :ref:`ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES ` + :ref:`zes-device-state-t` devState + if (:ref:`zesDeviceGetProperties`\(hSysmanDevice, &devProps) == :ref:`ZE_RESULT_SUCCESS `\) + output(" UUID: %s", devProps.core.uuid.id) + output(" #subdevices: %u", devProps.numSubdevices) + output(" brand: %s", devProps.brandName) + output(" model: %s", devProps.modelName) + if (:ref:`zesDeviceGetState`\(hSysmanDevice, &devState) == :ref:`ZE_RESULT_SUCCESS `\) + output(" Was repaired: %s", (devState.repaired == :ref:`ZES_REPAIR_STATUS_PERFORMED `\) ? "yes" : "no") + if (devState.reset != 0) + { + output("DEVICE RESET REQUIRED:") + if (devState.reset & :ref:`ZES_RESET_REASON_FLAG_WEDGED `\) + output("- Hardware is wedged") + if (devState.reset & :ref:`ZES_RESET_REASON_FLAG_REPAIR `\) + output("- Hardware needs to complete repairs") + } + } + +Host Processes +~~~~~~~~~~~~~~ + +The following functions provide information about host processes that +are using the device: + ++--------------------------------------+-----------------------------------+ +| Function | Description | ++======================================+===================================+ +| :ref:`zesDeviceProcessesGetState`\() | Get information about all | +| | processes that are using this | +| | device - process ID, device | +| | memory allocation size, | +| | accelerators being used. | ++--------------------------------------+-----------------------------------+ + +Using the process ID, an application can determine the owner and the +path to the executable - this information is not returned by the API. + +Device reset +~~~~~~~~~~~~ + +The device can be reset using the following function: + ++-----------------------------------+-----------------------------------+ +| Function | Description | ++===================================+===================================+ +| :ref:`zesDeviceReset`\() | Requests that the driver | +| | perform a PCI bus reset of the | +| | device. | ++-----------------------------------+-----------------------------------+ + +PCI link operations +~~~~~~~~~~~~~~~~~~~ + +The following functions permit getting data about the PCI endpoint for the device: + ++-------------------------------------+-----------------------------------+ +| Function | Description | ++=====================================+===================================+ +| :ref:`zesDevicePciGetProperties`\() | Get static properties for the PCI | +| | port - BDF address, number of | +| | bars, maximum supported speed | ++-------------------------------------+-----------------------------------+ +| :ref:`zesDevicePciGetState`\() | Get current PCI port speed | +| | (number of lanes, generation) | ++-------------------------------------+-----------------------------------+ +| :ref:`zesDevicePciGetBars`\() | Get information about each | +| | configured PCI bar | ++-------------------------------------+-----------------------------------+ +| :ref:`zesDevicePciGetStats`\() | Get PCI statistics - throughput, | +| | total packets, number of packet | +| | replays | ++-------------------------------------+-----------------------------------+ + +The pseudo code below shows how to output the PCI BDF address: + +.. parsed-literal:: + + function ShowPciInfo(zes_device_handle_t hSysmanDevice) + :ref:`zes-pci-properties-t` pciProps {}; + pciProps.stype = :ref:`ZES_STRUCTURE_TYPE_PCI_PROPERTIES `\; + if (:ref:`zesDevicePciGetProperties`\(hSysmanDevice, &pciProps) == :ref:`ZE_RESULT_SUCCESS `\) + output(" PCI address: %04u:%02u:%02u.%u", + pciProps.address.domain, + pciProps.address.bus, + pciProps.address.device, + pciProps.address.function); + +.. _Power: + +Operations on power domains +--------------------------- + +The PSU (Power Supply Unit) provides power to a device. The amount of power +drawn by a device is a function of the voltage and frequency, both of which are +controlled by the Punit, a micro-controller on the device. If the voltage and +frequency are too high, two conditions can occur: + +1. Over-current - This is where the current drawn by the device exceeds + the maximum current that the PSU can supply. The PSU asserts a signal + when this occurs, and it is processed by the Punit. +2. Over-temperature - The device is generating too much heat that cannot + be dissipated fast enough. The Punit monitors temperatures and reacts + when the sensors show the maximum temperature exceeds the threshold + TjMax (typically 100 degrees Celsius). + +When either of these conditions occurs, the Punit throttles the +frequencies/voltages of the device down to their minimum values, +severely impacting performance. The Punit avoids such severe throttling +by imposing power limits. There are two types of power limits: + +1. Reactive - In this case, the Punit will measure the moving average over + some interval of the actual power (hardware measurement). If the average + power exceeds the limit, Punit will start slowly decreasing the + maximum frequency limits that can be requested for each frequency domain. + Conversely, if the average power is below the limit, Punit will slowly + increase the maximum frequency limits that can be requested up to the + hardware frequency limit for each domain. When user/driver frequency + requests are above the maximum frequency limits, throttling occurs and + this should normally reduce the power. +2. Proactive - In this case, the Punit can perform a calculation based on + the current configuration of the chip and frequency requests to predict + the worst case power that could be generated. If this calculation exceeds + the proactive limit, a search is done to find the maximum frequency that will + fit within the limit. + +Limits need not be applied at the hardware scope level of a device. Devices are +subdivided into one or more power domains. A power domain is a hardware scope +over which power consumption can be monitored and controlled. Power domains can +exist at different hardware scopes such as: + +1. Card-level - Power domains defined at this level monitor & control power + consumption over a whole card. +2. Package-level - Power domains defined at this level monitor & control power + consumption over a single physical package on a card. +3. Stack-level - Power domains defined at this level monitor & control power + consumption over a single stack within a package. + +At any given point in time, a platform can be running on either mains power or, +in the case of platforms such as laptops, can be running on battery power. This +is referred to as the power source. Limits can be configured to take effect only +when a device is drawing power from a specified source, i.e., separate limits +can be imposed when a device is running off battery power as opposed to mains +power. + +Depending on the platform and power domain, power limits can be expressed in +terms of either amperage or wattage. The API can be queried to determine in which +units a given power limit should be specified. + +A power limit can correspond one of the following power levels. + ++---------------------+-----------------+-----------------------+ +| Limit | Window | Description | ++=====================+=================+=======================+ +| Instantaneous | NA | Punit predicts the | +| | | worst case power for | +| | | the current frequency | +| | | requests and if it | +| | | exceeds the limit, | +| | | the actual | +| | | frequencies | +| | | will be lowered. | ++---------------------+-----------------+-----------------------+ +| Peak | e.g. 100usec | Punit tracks a moving | +| | | average of power over | +| | | a short window. When | +| | | this exceeds a | +| | | programmable | +| | | threshold, the Punit | +| | | starts throttling | +| | | frequencies/voltages. | ++---------------------+-----------------+-----------------------+ +| Burst | e.g. 2ms | Punit tracks a moving | +| | | average of power over | +| | | a medium window. When | +| | | this exceeds a | +| | | programmable | +| | | threshold, the Punit | +| | | starts throttling | +| | | frequencies/voltages. | ++---------------------+-----------------+-----------------------+ +| Sustained | e.g. 28s | Punit tracks a moving | +| | | average of power over | +| | | a long window. When | +| | | this exceeds a | +| | | programmable | +| | | threshold, the Punit | +| | | throttles | +| | | frequencies/voltages. | ++---------------------+-----------------+-----------------------+ + +Note that the sustained, burst, and peak power limits are only reactive, whereas +the instantaneous power limit is only proactive. + +The default factory values are tuned assuming the device is operating at +normal temperatures running significant workloads: + +- The peak power limit is tuned to avoid tripping the PSU over-current + signal for all but the most intensive compute workloads. Most + workloads should be able to run at maximum frequencies without + hitting this condition. +- The burst power limit permits most workloads to run at maximum + frequencies for short periods. +- The sustained power limit will be triggered if high frequencies are + requested for lengthy periods (configurable, default is 28sec) and + the frequencies will be throttled if the high requests and + utilization of the device continues. + +Some power domains support requesting the event +:ref:`ZES_EVENT_TYPE_FLAG_ENERGY_THRESHOLD_CROSSED ` be generated when the +energy consumption exceeds some value. This can be a useful technique to +suspend an application until the GPU becomes busy. The technique +involves calling :ref:`zesPowerSetEnergyThreshold`\() with some delta +energy threshold, registering to receive the event using the function +:ref:`zesDeviceEventRegister`\() and then calling :ref:`zesDriverEventListen`\() to +block until the event is triggered. When the energy consumed by the +power domain from the time the call is made exceeds the specified delta, +the event is triggered, and the application is woken up. + +A device can have multiple power domains: + +- One card level power domain that handles the power consumed by the entire + PCIe card. +- One package level power domain that handles the power consumed by the + entire accelerator chip. This includes the power of all sub-devices on + the chip. +- One or more power domains for each sub-device if the product has + sub-devices. + +The following functions are provided to manage the power of the device: + ++--------------------------------------+-------------------------------------------------------------------------------------+ +| Function | Description | ++======================================+=====================================================================================+ +| :ref:`zesDeviceEnumPowerDomains`\() | Enumerate the power domains. | ++--------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`zesPowerGetProperties`\() | Get the minimum/maximum power limit that can be | +| | specified when changing the power limits of a | +| | specific power domain. Also read the factory | +| | default sustained power limit of the part. | ++--------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`zesPowerGetEnergyCounter`\() | Read the energy consumption of | +| | the specific domain. | ++--------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`zesPowerGetLimitsExt`\() | Get all the | +| | power limits for the specific | +| | power domain. | ++--------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`zesPowerSetLimitsExt`\() | Set all the | +| | power limits for the specific | +| | power domain. | ++--------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`zesPowerGetEnergyThreshold`\() | Get the current energy threshold. | ++--------------------------------------+-------------------------------------------------------------------------------------+ +| :ref:`zesPowerSetEnergyThreshold`\() | Set the energy threshold. Event | +| | :ref:`ZES_EVENT_TYPE_FLAG_ENERGY_THRESHOLD_CROSSED ` | +| | | +| | will be generated when the energy | +| | consumed since calling this | +| | function exceeds the specified | +| | threshold. | ++--------------------------------------+-------------------------------------------------------------------------------------+ + +The pseudo code below shows how to output information about each power +domain on a device: + +.. parsed-literal:: + + function ShowPowerDomains(zes_device_handle_t hSysmanDevice) + uint32_t numPowerDomains + if (:ref:`zesDeviceEnumPowerDomains`\(hSysmanDevice, &numPowerDomains, NULL) == :ref:`ZE_RESULT_SUCCESS `\) + zes_pwr_handle_t* phPower = + allocate_memory(numPowerDomains * sizeof(zes_pwr_handle_t)) + if (:ref:`zesDeviceEnumPowerDomains`\(hSysmanDevice, &numPowerDomains, phPower) == :ref:`ZE_RESULT_SUCCESS `\) + for (pwrIndex = 0 .. numPowerDomains-1) + :ref:`zes-power-properties-t` props {}; + props.stype = :ref:`ZES_STRUCTURE_TYPE_POWER_PROPERTIES `\; + if (:ref:`zesPowerGetProperties`\(phPower[pwrIndex], &props) == :ref:`ZE_RESULT_SUCCESS `\) + if (props.onSubdevice) + output("Sub-device %u power:\n", props.subdeviceId) + output(" Can control: %s", props.canControl ? "yes" : "no") + call_function ShowPowerLimits(phPower[pwrIndex]) + else + output("Total package power:\n") + output(" Can control: %s", props.canControl ? "yes" : "no") + call_function ShowPowerLimits(phPower[pwrIndex]) + free_memory(...) + } + + function ShowPowerLimits(zes_pwr_handle_t hPower) + uint32_t limitCount = 0 + if (:ref:`zesPowerGetLimitsExt`\(hPower, &limitCount, nullptr) == :ref:`ZE_RESULT_SUCCESS `\) + :ref:`zes-power-limit-ext-desc-t` * allLimits = allocate(limitCount * sizeof(:ref:`zes-power-limit-ext-desc-t`\)); + if (:ref:`zesPowerGetLimitsExt`\(hPower, &numLimits, allLimits) == :ref:`ZE_RESULT_SUCCESS `\) + + for (i = 0; i < limitCount; ++i) + output("Limit is enabled: %s", enabled) + output("Power averaging window: %d", interval) + +The pseudo code below shows how to modify the sustained power limit for the first power +domain found on a device: + +.. parsed-literal:: + + function SetPowerDomainLimit(zes_device_handle_t hSysmanDevice) + uint32_t numPowerDomains + if (:ref:`zesDeviceEnumPowerDomains`\(hSysmanDevice, &numPowerDomains, NULL) == :ref:`ZE_RESULT_SUCCESS `\) + zes_pwr_handle_t* phPower = + allocate_memory(numPowerDomains * sizeof(zes_pwr_handle_t)) + if (:ref:`zesDeviceEnumPowerDomains`\(hSysmanDevice, &numPowerDomains, phPower) == :ref:`ZE_RESULT_SUCCESS `\) + for (pwrIndex = 0 .. numPowerDomains-1) + :ref:`zes-power-properties-t` props {}; + props.stype = :ref:`ZES_STRUCTURE_TYPE_POWER_PROPERTIES `\; + if (:ref:`zesPowerGetProperties`\(phPower[pwrIndex], &props) == :ref:`ZE_RESULT_SUCCESS `\) + uint32_t limitCount = 0 + if (:ref:`zesPowerGetLimitsExt`\(hPower, &limitCount, nullptr) == :ref:`ZE_RESULT_SUCCESS `\) + :ref:`zes-power-limit-ext-desc-t` * allLimits = allocate(limitCount * sizeof(:ref:`zes-power-limit-ext-desc-t`\)); + if (:ref:`zesPowerGetLimitsExt`\(hPower, &numLimits, allLimits) == :ref:`ZE_RESULT_SUCCESS `\) + for (i = 0; i < limitCount; ++i) + if (allLimits[i].level == :ref:`ZES_POWER_LEVEL_SUSTAINED `\) + if (allLimits[i].limitValueLocked == False) + allLimits[i].limit = newLimit + :ref:`zesPowerSetLimitsExt`\(hPower, &numLimits, allLimits) + + +The pseudo code shows how to output the average power. It assumes that +the function is called regularly (say every 100ms). + +.. parsed-literal:: + + function ShowAveragePower(zes_pwr_handle_t hPower, :ref:`zes-power-energy-counter-t`\* pPrevEnergyCounter) + :ref:`zes-power-energy-counter-t` newEnergyCounter; + if (:ref:`zesPowerGetEnergyCounter`\(hPower, &newEnergyCounter) == :ref:`ZE_RESULT_SUCCESS `\) + uint64_t deltaTime = newEnergyCounter.timestamp - pPrevEnergyCounter->timestamp; + if (deltaTime) + output(" Average power: %.3f W", (newEnergyCounter.energy - pPrevEnergyCounter->energy) / deltaTime); + \*pPrevEnergyCounter = newEnergyCounter; + +.. _Frequency: + +Operations on frequency domains +------------------------------- + +The hardware manages frequencies to achieve a balance between best +performance and power consumption. Most devices have one or more +frequency domains. + +The following functions are provided to manage the frequency domains on +the device: + ++------------------------------------------+----------------------------------------+ +| Function | Description | ++==========================================+========================================+ +| :ref:`zesDeviceEnumFrequencyDomains`\() | Enumerate all the frequency | +| | domains on the device and | +| | sub-devices. | ++------------------------------------------+----------------------------------------+ +| :ref:`zesFrequencyGetProperties`\() | Find out which domain | +| | :ref:`zes-freq-domain-t` is controlled | +| | by this frequency and min/max | +| | hardware frequencies. | ++------------------------------------------+----------------------------------------+ +| :ref:`zesFrequencyGetAvailableClocks`\() | Get an array of all available | +| | frequencies that can be requested | +| | on this domain. | ++------------------------------------------+----------------------------------------+ +| :ref:`zesFrequencyGetRange`\() | Get the current min/max frequency | +| | between which the hardware can | +| | operate for a frequency domain. | ++------------------------------------------+----------------------------------------+ +| :ref:`zesFrequencySetRange`\() | Set the min/max frequency between | +| | which the hardware can operate | +| | for a frequency domain. | ++------------------------------------------+----------------------------------------+ +| :ref:`zesFrequencyGetState`\() | Get the current frequency | +| | request, actual frequency, TDP | +| | frequency and throttle reasons | +| | for a frequency domain. | ++------------------------------------------+----------------------------------------+ +| :ref:`zesFrequencyGetThrottleTime`\() | Gets the amount of time a | +| | frequency domain has been | +| | throttled. | ++------------------------------------------+----------------------------------------+ + +It is only permitted to set the frequency range if the device property +:ref:`zes-freq-properties-t`\.canControl is true for the specific frequency +domain. + +By setting the min/max frequency range to the same value, software is +effectively disabling the hardware-controlled frequency and getting a +fixed stable frequency providing the Punit does not need to throttle due +to excess power/heat. + +Based on the power/thermal conditions, the frequency requested by +software or the hardware may not be respected. This situation can be +determined using the function :ref:`zesFrequencyGetState`\() which will +indicate the current frequency request, the actual (resolved) frequency +and other frequency information that depends on the current conditions. +If the actual frequency is below the requested frequency, +:ref:`zes-freq-state-t`\.throttleReasons will provide the reasons why the +frequency is being limited by the Punit. + +When a frequency domain starts being throttled, the event +:ref:`ZES_EVENT_TYPE_FLAG_FREQ_THROTTLED ` is triggered if this is supported +(check :ref:`zes-freq-properties-t`\.isThrottleEventSupported). + +Frequency/Voltage overclocking +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Overclocking involves modifying the voltage-frequency (V-F) curve to +either achieve better performance by permitting the hardware to reach +higher frequencies or better efficiency by lowering the voltage for the +same frequency. + +By default, the hardware imposes a factory-fused maximum frequency and a +voltage-frequency curve. The voltage-frequency curve specifies how much +voltage is needed to safely reach a given frequency without hitting +overcurrent conditions. If the hardware detects overcurrent (IccMax), it +will severely throttle frequencies in order to protect itself. Also, if +the hardware detects that any part of the chip exceeds a maximum +temperature limit (TjMax) it will also severely throttle frequencies. + +To improve maximum performance, the following modifications can be made: + +- Increase the maximum frequency. +- Increase the voltage to ensure stability at the higher frequency. +- Increase the maximum current (IccMax). +- Increase the maximum temperature (TjMax). + +All these changes come with the risk of damage the device. + +To improve efficiency for a given workload that is not excercising the +full circuitry of the device, the following modifications can be made: + +- Decrease the voltage + +Frequency overclocking is accomplished by calling :ref:`zesFrequencyOcSetFrequencyTarget`\() with the desired Frequency +Target and the Voltage setting by calling :ref:`zesFrequencyOcSetVoltageTarget`\() with the new voltage and the voltrage offset. +There are three modes that control the way voltage and frequency are handled when overclocking: + ++--------------------------------------------------------+------------------------------------------------+ +| Overclock mode | Description | ++========================================================+================================================+ +| :ref:`ZES_OC_MODE_OVERRIDE ` | In this mode, a fixed | +| | user-supplied voltage | +| | VoltageTarget plus | +| | VoltageOffset | +| | is applied at all times, | +| | independent of the frequency | +| | request. This is not efficient but | +| | can improve stability by avoiding | +| | power-supply voltage changes as the | +| | frequency changes. | ++--------------------------------------------------------+------------------------------------------------+ +| :ref:`ZES_OC_MODE_INTERPOLATIVE ` | In this mode, In this mode, the | +| | voltage/frequency curve can be extended | +| | with a new voltage/frequency point that will | +| | be interpolated. The existing | +| | voltage/frequency points can also be offset | +| | (up or down) by a fixed voltage. This mode | +| | disables FIXED and OVERRIDE modes. | ++--------------------------------------------------------+------------------------------------------------+ +| :ref:`ZES_OC_MODE_FIXED ` | In this mode, In this mode, hardware will | +| | disable most frequency throttling and lock | +| | the frequency and voltage at the specified | +| | overclock values. This mode disables | +| | OVERRIDE and INTERPOLATIVE modes. This mode | +| | can damage the part, most of the protections | +| | are disabled on this mode. | ++--------------------------------------------------------+------------------------------------------------+ + +The following functions are provided to handle overclocking: + ++-------------------------------------------------+-----------------------------------+ +| Function | Description | ++=================================================+===================================+ +| :ref:`zesFrequencyOcGetCapabilities`\() | Determine the overclock | +| | capabilities of the device. | ++-------------------------------------------------+-----------------------------------+ +| :ref:`zesFrequencyOcGetFrequencyTarget`\() | Get current overclock target | +| | frequency set. | ++-------------------------------------------------+-----------------------------------+ +| :ref:`zesFrequencyOcSetFrequencyTarget`\() | Set the new overclock target | +| | frequency | ++-------------------------------------------------+-----------------------------------+ +| :ref:`zesFrequencyOcGetVoltageTarget`\() | Get current overclock target | +| | voltage set. | ++-------------------------------------------------+-----------------------------------+ +| :ref:`zesFrequencyOcSetVoltageTarget`\() | Set the new overclock target | +| | voltage and offset. | ++-------------------------------------------------+-----------------------------------+ +| :ref:`zesFrequencyOcSetMode`\() | Sets the desired overclock mode. | ++-------------------------------------------------+-----------------------------------+ +| :ref:`zesFrequencyOcGetMode`\() | Gets the current overclock mode. | ++-------------------------------------------------+-----------------------------------+ +| :ref:`zesFrequencyOcGetIccMax`\() | Get the maximum current limit in | +| | effect. | ++-------------------------------------------------+-----------------------------------+ +| :ref:`zesFrequencyOcSetIccMax`\() | Set a new maximum current limit. | ++-------------------------------------------------+-----------------------------------+ +| :ref:`zesFrequencyOcGetTjMax`\() | Get the maximum temperature limit | +| | in effect. | ++-------------------------------------------------+-----------------------------------+ +| :ref:`zesFrequencyOcSetTjMax`\() | Set a new maximum temperature | +| | limit. | ++-------------------------------------------------+-----------------------------------+ + +Overclocking can be turned off by calling +:ref:`zesFrequencyOcSetMode`\() with mode :ref:`ZES_OC_MODE_OFF ` and by +calling :ref:`zesFrequencyOcGetIccMax`\() and :ref:`zesFrequencyOcSetTjMax`\() with values of 0.0. + +.. _Scheduler: + +Scheduler operations +~~~~~~~~~~~~~~~~~~~~ + +Scheduler components control how workloads are executed on accelerator +engines and how to share the hardware resources when multiple workloads are +submitted concurrently. This policy is referred to as a scheduler mode. + +The available scheduler operating modes are given by the enum +:ref:`zes-sched-mode-t` and summarized in the table below: + ++-------------------------------------------------------------+-------------------------------------------+ +| Scheduler mode | Description | ++=============================================================+===========================================+ +| :ref:`ZES_SCHED_MODE_TIMEOUT ` | This mode is optimized for | +| | multiple applications or contexts | +| | submitting work to the hardware. | +| | When higher priority work | +| | arrives, the scheduler attempts | +| | to pause the current executing | +| | work within some timeout | +| | interval, then submits the other | +| | work. It is possible to configure | +| | (:ref:`zes-sched-timeout-properties-t`\) | +| | the watchdog timeout which | +| | controls the maximum time the | +| | scheduler will wait for a | +| | workload to complete a batch of | +| | work or yield to other | +| | applications before it is | +| | terminated. If the watchdog | +| | timeout is set to | +| | ZES_SCHED_WATCHDOG_DISABLE, the | +| | scheduler enforces no fairness. | +| | This means that if there is other | +| | work to execute, the scheduler | +| | will try to submit it but will | +| | not terminate an executing | +| | process that does not complete | +| | quickly. | ++-------------------------------------------------------------+-------------------------------------------+ +| :ref:`ZES_SCHED_MODE_TIMESLICE ` | This mode is optimized to provide | +| | fair sharing of hardware | +| | execution time between multiple | +| | contexts submitting work to the | +| | hardware concurrently. It is | +| | possible to configure | +| | (:ref:`zes-sched-timeslice-properties-t`\)| +| | | +| | the timeslice interval and the | +| | amount of time the scheduler will | +| | wait for work to yield to another | +| | application before it is | +| | terminated. | ++-------------------------------------------------------------+-------------------------------------------+ +| :ref:`ZES_SCHED_MODE_EXCLUSIVE ` | This mode is optimized for single | +| | application/context use-cases. It | +| | permits a context to run | +| | indefinitely on the hardware | +| | without being preempted or | +| | terminated. All pending work for | +| | other contexts must wait until | +| | the running context completes | +| | with no further submitted work. | ++-------------------------------------------------------------+-------------------------------------------+ +| :ref:`ZES_SCHED_MODE_COMPUTE_UNIT_DEBUG ` | This mode is optimized for | +| | application debug. It ensures | +| | that only one command queue can | +| | execute work on the hardware at a | +| | given time. Work is permitted to | +| | run as long as needed without | +| | enforcing any scheduler fairness | +| | policies. | ++-------------------------------------------------------------+-------------------------------------------+ + +A device can have multiple scheduler components. Each scheduler component controls +the workload execution behavior on one or more accelerator engines +(:ref:`zes-engine-type-flags-t`\). The following functions are available for changing +the scheduler mode for each scheduler component: + ++--------------------------------------------------+-----------------------------------+ +| Function | Description | ++==================================================+===================================+ +| :ref:`zesDeviceEnumSchedulers`\() | Get handles to each scheduler | +| | component. | ++--------------------------------------------------+-----------------------------------+ +| :ref:`zesSchedulerGetProperties`\() | Get properties of a scheduler | +| | component (sub-device, engines | +| | linked to this scheduler, | +| | supported scheduler modes. | ++--------------------------------------------------+-----------------------------------+ +| :ref:`zesSchedulerGetCurrentMode`\() | Get the current scheduler mode | +| | (timeout, timeslice, exclusive, | +| | single command queue) | ++--------------------------------------------------+-----------------------------------+ +| :ref:`zesSchedulerGetTimeoutModeProperties`\() | Get the settings for the timeout | +| | scheduler mode | ++--------------------------------------------------+-----------------------------------+ +| :ref:`zesSchedulerGetTimesliceModeProperties`\() | Get the settings for the | +| | timeslice scheduler mode | ++--------------------------------------------------+-----------------------------------+ +| :ref:`zesSchedulerSetTimeoutMode`\() | Change to timeout scheduler mode | +| | and/or change properties | ++--------------------------------------------------+-----------------------------------+ +| :ref:`zesSchedulerSetTimesliceMode`\() | Change to timeslice scheduler | +| | mode and/or change properties | ++--------------------------------------------------+-----------------------------------+ +| :ref:`zesSchedulerSetExclusiveMode`\() | Change to exclusive scheduler | +| | mode and/or change properties | ++--------------------------------------------------+-----------------------------------+ +| :ref:`zesSchedulerSetComputeUnitDebugMode`\() | Change to compute unit debug | +| | scheduler mode and/or change | +| | properties | ++--------------------------------------------------+-----------------------------------+ + +The pseudo code below shows how to stop the scheduler enforcing fairness +while permitting other work to attempt to run: + +.. parsed-literal:: + + function DisableSchedulerWatchdog(zes_device_handle_t hSysmanDevice) + uint32_t numSched + if ((:ref:`zesDeviceEnumSchedulers`\(hSysmanDevice, &numSched, NULL) == :ref:`ZE_RESULT_SUCCESS `\)) + zes_sched_handle_t* pSchedHandles = + allocate_memory(numSched * sizeof(zes_sched_handle_t)) + if (:ref:`zesDeviceEnumSchedulers`\(hSysmanDevice, &numSched, pSchedHandles) == :ref:`ZE_RESULT_SUCCESS `\) + for (index = 0 .. numSched-1) + :ref:`ze-result-t` res + :ref:`zes-sched-mode-t` currentMode + res = :ref:`zesSchedulerGetCurrentMode`\(pSchedHandles[index], ¤tMode) + if (res == :ref:`ZE_RESULT_SUCCESS `\) + ze_bool_t requireReload + :ref:`zes-sched-timeout-properties-t` props + props.watchdogTimeout = ZES_SCHED_WATCHDOG_DISABLE + res = :ref:`zesSchedulerSetTimeoutMode`\(pSchedHandles[index], &props, &requireReload) + if (res == :ref:`ZE_RESULT_SUCCESS `\) + if (requireReload) + output("WARNING: Reload the driver to complete desired configuration.") + else + output("Schedule mode changed successfully.") + else if(res == :ref:`ZE_RESULT_ERROR_UNSUPPORTED_FEATURE `\) + output("ERROR: The timeout scheduler mode is not supported on this device.") + else if(res == :ref:`ZE_RESULT_ERROR_INSUFFICIENT_PERMISSIONS `\) + output("ERROR: Don't have permissions to change the scheduler mode.") + else + output("ERROR: Problem calling the API to change the scheduler mode.") + else if(res == :ref:`ZE_RESULT_ERROR_UNSUPPORTED_FEATURE `\) + output("ERROR: Scheduler modes are not supported on this device.") + else + output("ERROR: Problem calling the API.") + +.. _ECC: + +Enabling/disabling ECC Config Dynamically +----------------------------------------- + +Memory corruption occurs when random bits in data flip due to natural processes +such as background radiation, cosmic rays, etc... A single bit flip in one of the +high-bits of a single data-value may drastically change the behavior of some +applications. Workloads from the financial, industrial control, critical +infrastructure, and critical database sectors are typically not tolerant to memory +corruption---memory corruption can cause highly undesirable behavior. Error correction +codes (ECC) are a memory controller technology that reduce memory corruption at +the cost of reduced memory performance and capacity. + +The loss of memory performance and capacity makes ECC undesirable for some workloads. +Application domains may be insensitive to low-level memory corruption. Algorithms +may be designed for numerical stability or may be inherently stochastic, making them +insensitive to memory corruption. + +Products may support ECC capabilities and may additionally make ECC dynamically +configurable, i.e. if ECC is supported, then it may be turned on or off on demand. +A device reset, either in the form of a warm reset or a cold reboot, may be +required to switch between ECC enabled and disabled states. + +Support for ECC can be checked using the function :ref:`zesDeviceEccAvailable`\(). If ECC +is supported, then support for dynamic ECC control can be checked using the +function :ref:`zesDeviceEccConfigurable`\(). The current ECC state, pending ECC state, +and action required to affect the pending ECC state can be determined using the +struct :ref:`zes-device-ecc-properties-t` returned by the function :ref:`zesDeviceGetEccState`\(). +The ECC state can be changed by calling the :ref:`zesDeviceSetEccState`\() which takes the +desired ECC state as input and returns the struct :ref:`zes-device-ecc-properties-t` which +lists the current ECC state, pending ECC state, and action required to affect the +pending ECC state + +The following pseudo code demonstrates how the ECC state can be queried and changed +from disabled to enabled: + +.. parsed-literal:: + + function EnableECC(zes_device_handle_t hSysmanDevice) + ze_bool_t EccAvailable = False; + :ref:`zesDeviceEccAvailable`\(hSysmanDevice, &EccAvailable) + if (EccAvailable == True) { + ze_bool_t EccConfigurable = False; + :ref:`zesDeviceEccConfigurable`\(hSysmanDevice, &EccConfigurable) + if (EccConfigurable == True) { + :ref:`zes-device-ecc-properties-t` props = {:ref:`ZES_DEVICE_ECC_STATE_UNAVAILABLE `\, :ref:`ZES_DEVICE_ECC_STATE_UNAVAILABLE `\, :ref:`ZES_DEVICE_ACTION_NONE `\} + :ref:`zesDeviceGetEccState`\(hSysmanDevice, &props) + if (props.currentState == :ref:`ZES_DEVICE_ECC_STATE_DISABLED `\) { + :ref:`zes-device-ecc-desc-t` newState = :ref:`ZES_DEVICE_ECC_STATE_ENABLED ` + :ref:`zesDeviceSetEccState`\(hSysmanDevice, newState, &props) + } + } + } + +.. _Performance-Factor: + +Tuning workload performance +--------------------------- + +While hardware attempts to balance system resources effectively, there are +workloads that can benefit from external performance hints. For hardware +where this is possible, the API exposes *Performance Factors* domains that +can be used to provide these hints. + +A Performance Factor is defined as a number between 0 and 100 that expresses +a trade-off between the energy provided to the accelerator units and the +energy provided to the supporting units. As an example, a compute heavy +workload benefits from a higher distribution of energy at the computational +units rather than for the memory controller. Alternatively, a memory bounded +workload can benefit by trading off performance of the computational units +for higher throughput in the memory controller. Generally the hardware +will get this balance right, but the Performance Factor can be used to +make the balance more aggressive. In the examples given, a Performance +Factor of 100 would indicate that the workload is completely compute +bounded and requires very little support from the memory controller. +Alternatively, a Performance Factor of 0 would indicate that the workload +is completely memory bounded and the performance of the memory +controller needs to be increased. + +Tuning for a workload can involve running the application repeatedly with +different values of the Performance Factor from 0 to 100 and choosing +the value that gives the best performance. The default value is 50. +Alternatively, a more dynamic approach would involve monitoring the +various utilization metrics of the accelerator to determine memory +and compute bounded and moving the Performance Factor up and down +in order to remove the bottleneck. + +The API provides a way to enumerate the domains that can be controlled +by a Performance Factor. A domain contains one or more accelerators +whose performance will be affected by this setting. The API provides +functions to change the Performance Factor for a domain. + +Here is a summary of the available functions: + ++-------------------------------------------------+--------------------------------------------------------------------+ +| Function | Description | ++=================================================+====================================================================+ +| :ref:`zesDeviceEnumPerformanceFactorDomains`\() | Enumerate the Performance Factor domains available on the | +| | hardware. | ++-------------------------------------------------+--------------------------------------------------------------------+ +| :ref:`zesPerformanceFactorGetProperties`\() | Find out if the Performance Factor domain is located on a | +| | sub-device and which accelerators are affected by it. | ++-------------------------------------------------+--------------------------------------------------------------------+ +| :ref:`zesPerformanceFactorGetConfig`\() | Read the current performance factor being used by the hardware | +| | for a domain. | ++-------------------------------------------------+--------------------------------------------------------------------+ +| :ref:`zesPerformanceFactorSetConfig`\() | Change the Performance Factor of the hardware for a domain. | ++-------------------------------------------------+--------------------------------------------------------------------+ + + +.. _Engines: + +Operations on engine groups +--------------------------- + +Accelerator resources (e.g. arrays of compute units or media decoders) are +fed work by what are called engines. The API provides the ability to measuring +the execution time (activity) of these engines. The type of engines is +defined in the enum :ref:`zes-engine-group-t`\. + +Generally there is a one to one relationship between an engine and an underlying +accelerator resource. For example, a single media decode engine submits work to a +single media decoder hardware and no other engine can do so. Measuring the execution +time (activity) of a single engine is equivalent to measuring the execution time +of the underlying accelerator hardware. + +There are also products where multiple engines submit work to the same underlying +accelerator hardware. The hardware will execute the work from each engine +concurrently. In these cases, the execution time of each individual engine +will add up to more than the execution time of the underlying accelerator +hardware since each engine is only receiving a portion of the accelerator +hardware. In this case, the API also provides engine groups which will +measure the total execution time at the level of the hardware accelerator +rather than at the level of the individual engines. For example, the API +may enumerate multiple engine groups of type :ref:`ZES_ENGINE_GROUP_COMPUTE_SINGLE ` +which will permit measuring the activity of each individual engine. However, +to measure the overall activity of the shared compute resources, the API +will enumerate an engine group of type :ref:`ZES_ENGINE_GROUP_COMPUTE_ALL `\. In this case, +the activity report is for when any of the compute engines are active between two snapshots. + +By taking two snapshots of the activity counters, it is possible to +calculate the average utilization of different parts of the device. + +The following functions are provided: + ++-------------------------------------+-----------------------------------------+ +| Function | Description | ++=====================================+=========================================+ +| :ref:`zesDeviceEnumEngineGroups`\() | Enumerate the engine groups that | +| | can be queried. | ++-------------------------------------+-----------------------------------------+ +| :ref:`zesEngineGetProperties`\() | Get the properties of an engine | +| | group. This will return the type | +| | of engine group (one of | +| | :ref:`zes-engine-group-t`\) and on | +| | which sub-device the group is | +| | making measurements. | ++-------------------------------------+-----------------------------------------+ +| :ref:`zesEngineGetActivity`\() | Returns the activity counters for | +| | an engine group. | ++-------------------------------------+-----------------------------------------+ + +.. _Standby: + +Operations on standby domains +----------------------------- + +When a device is idle, it will enter a low-power state. Since exit from +low-power states have associated latency, it can hurt performance. The +hardware attempts to stike a balance between saving power when there are +large idle times between workload submissions to the device and keeping +the device awake when it determines that the idle time between submissions +is short. + +A device consists of one or more blocks that can autonomously power-gate into a +standby state. The list of domains is given by :ref:`zes-standby-type-t`\. + +The following functions can be used to control how the hardware promotes +to standby states: + ++---------------------------------------+-----------------------------------------+ +| Function | Description | ++=======================================+=========================================+ +| :ref:`zesDeviceEnumStandbyDomains`\() | Enumerate the standby domains. | ++---------------------------------------+-----------------------------------------+ +| :ref:`zesStandbyGetProperties`\() | Get the properties of a standby | +| | domain. This will return the | +| | parts of the device that are | +| | affected by this domain (one of | +| | :ref:`zes-engine-group-t`\) and on | +| | which sub-device the domain is | +| | located. | ++---------------------------------------+-----------------------------------------+ +| :ref:`zesStandbyGetMode`\() | Get the current promotion mode | +| | (one of | +| | :ref:`zes-standby-promo-mode-t`\) for a | +| | standby domain. | ++---------------------------------------+-----------------------------------------+ +| :ref:`zesStandbySetMode`\() | Set the promotion mode (one of | +| | :ref:`zes-standby-promo-mode-t`\) for a | +| | standby domain. | ++---------------------------------------+-----------------------------------------+ + +.. _Firmware: + +Operations on firmwares +----------------------- + +The following functions are provided to manage firmwares on the device: + ++------------------------------------+-----------------------------------+ +| Function | Description | ++====================================+===================================+ +| :ref:`zesDeviceEnumFirmwares`\() | Enumerate all firmwares that can | +| | be managed on the device. | ++------------------------------------+-----------------------------------+ +| :ref:`zesFirmwareGetProperties`\() | Find out the name and version of | +| | a firmware. | ++------------------------------------+-----------------------------------+ +| :ref:`zesFirmwareFlash`\() | Flash a new firmware image. | ++------------------------------------+-----------------------------------+ + +.. _Memory: + +Querying Memory Modules +----------------------- + +The API provides an enumeration of all device memory modules. For each +memory module, the current and maximum bandwidth can be queried. The API +also provides a health metric which can take one of the following values +(:ref:`zes-mem-health-t`\): + ++-------------------------------------------------------------+-----------------------------------------------------------+ +| Memory health | Description | ++=============================================================+===========================================================+ +| :ref:`ZES_MEM_HEALTH_OK ` | All memory channels are healthy. | ++-------------------------------------------------------------+-----------------------------------------------------------+ +| :ref:`ZES_MEM_HEALTH_DEGRADED ` | Excessive correctable errors have | +| | been detected on one or more | +| | channels. Device should be reset. | ++-------------------------------------------------------------+-----------------------------------------------------------+ +| :ref:`ZES_MEM_HEALTH_CRITICAL ` | Operating with reduced memory to | +| | cover banks with too many | +| | uncorrectable errors. | ++-------------------------------------------------------------+-----------------------------------------------------------+ +| :ref:`ZES_MEM_HEALTH_REPLACE ` | Device should be replaced due to | +| | excessive uncorrectable errors. | ++-------------------------------------------------------------+-----------------------------------------------------------+ + +When the health state of a memory module changes, the event +:ref:`ZES_EVENT_TYPE_FLAG_MEM_HEALTH ` is triggered. + +The following functions provide access to information about the device +memory modules: + ++--------------------------------------+-----------------------------------+ +| Function | Description | ++======================================+===================================+ +| :ref:`zesDeviceEnumMemoryModules`\() | Enumerate the memory modules. | ++--------------------------------------+-----------------------------------+ +| :ref:`zesMemoryGetProperties`\() | Find out the type of memory and | +| | maximum physical memory of a | +| | module. | ++--------------------------------------+-----------------------------------+ +| :ref:`zesMemoryGetBandwidth`\() | Returns memory bandwidth counters | +| | for a module. | ++--------------------------------------+-----------------------------------+ +| :ref:`zesMemoryGetState`\() | Returns the currently health free | +| | memory and total physical memory | +| | for a memory module. | ++--------------------------------------+-----------------------------------+ + +.. _Fabric-Port: + +Operations on Fabric ports +-------------------------- + +**Fabric** is the term given to describe high-speed interconnections +between accelerator devices, primarily used to provide low latency fast +access to remote device memory. Devices have one or more **fabric +ports** that transmit and receive data over physical links. Links +connect fabric ports, thus permitting data to travel between devices. +Routing rules determine the flow of traffic through the fabric. + +The figure below shows four devices, each with two fabric ports. Each +port has a link that connects it to a port on another device. In this +example, the devices are connected in a ring. Device A and D can access +each other's memory through either device B or device C depending on how +the fabric routing rules are configured. If the connection between +device B and D goes down, the routing rules can be modified such that +device B and D can still access each other's memory by going through two +hops in the fabric (device A and C). + +.. image:: ../images/tools_sysman_fabric.png + +The API permits enumerating all the ports available on a device. Each +port is uniquely identified within a system by the following information: + +- Fabric ID: Unique identifier for the fabric end-point +- Attach ID: Unique identifier for the device attachment point +- Port Number: The logical port number (this is typically marked somewhere on the physical device) + +The API provides this information in the struct {t}_fabric_port_id_t. +The identifiers are not universal - uniqueness is only guaranteed +within a given system and provided the system configuration does not change. + +When a fabric port is connected, the API provides the unique identifier +for the remote fabric port. By enumerating all ports in a system and +matching up the remote port identifies, an application can build up +a topology map of connectivity. + +For each port, the API permits querying its configuration (UP/DOWN) and +its health which can take one of the following values: + ++-------------------------------------------------------------------+-------------------------------------------------------------------+ +| Fabric port health | Description | ++===================================================================+===================================================================+ +| :ref:`ZES_FABRIC_PORT_STATUS_HEALTHY ` | The port is up and operating as | +| | expected. | ++-------------------------------------------------------------------+-------------------------------------------------------------------+ +| :ref:`ZES_FABRIC_PORT_STATUS_DEGRADED ` | The port is up but has quality | +| | and/or bandwidth degradation. | ++-------------------------------------------------------------------+-------------------------------------------------------------------+ +| :ref:`ZES_FABRIC_PORT_STATUS_FAILED ` | Port connection instabilities are | +| | preventing workloads making | +| | forward progress. | ++-------------------------------------------------------------------+-------------------------------------------------------------------+ +| :ref:`ZES_FABRIC_PORT_STATUS_DISABLED ` | The port is configured down. | ++-------------------------------------------------------------------+-------------------------------------------------------------------+ + +If the port is in a degraded state, the API provides additional +information about the types of quality degradation that are being +observed. If the port is in a red state, the API provides additional +information about the causes of the instability. + +When a port's health state changes, the event +:ref:`ZES_EVENT_TYPE_FLAG_FABRIC_PORT_HEALTH ` is triggered. + +The API provides the current transmit and receive bitrate of each port. +It also permits measuring the receive and transmit bandwidth flowing +through each port - these metrics include the protocol overhead in addition +to traffic generated by the devices. + +Since ports can pass data directly through to another port, the measured +bandwidth at a port can be higher than the actual bandwidth generated by +the accelerators directly connected by two ports. As such, bandwidth +metrics at each port are more relevant for determining points of +congestion in the fabric and less relevant for measuring the total +bandwidth passing between two accelerators. + +The following functions can be used to manage Fabric ports: + ++--------------------------------------+-----------------------------------+ +| Function | Description | ++======================================+===================================+ +| :ref:`zesDeviceEnumFabricPorts`\() | Enumerate all fabric ports on the | +| | device. | ++--------------------------------------+-----------------------------------+ +| :ref:`zesFabricPortGetProperties`\() | Get static properties about the | +| | port (model, pord Id, max | +| | receive/transmit speed). | ++--------------------------------------+-----------------------------------+ +| :ref:`zesFabricPortGetLinkType`\() | Get details about the physical | +| | link connected to the port. | ++--------------------------------------+-----------------------------------+ +| :ref:`zesFabricPortGetConfig`\() | Determine if the port is | +| | configured UP and if beaconing is | +| | on or off. | ++--------------------------------------+-----------------------------------+ +| :ref:`zesFabricPortSetConfig`\() | Configure the port UP or DOWN and | +| | turn beaconing on or off. | ++--------------------------------------+-----------------------------------+ +| :ref:`zesFabricPortGetState`\() | Determine the health of the port | +| | connection, reasons for link | +| | degradation or connection issues, | +| | current receive/transmit and port | +| | Id of the remote end-point. | ++--------------------------------------+-----------------------------------+ +| :ref:`zesFabricPortGetThroughput`\() | Get port receive/transmit | +| | counters along with current | +| | receive/transmit port speed. | ++--------------------------------------+-----------------------------------+ + +For devices with sub-devices, the fabric ports are usually located in +the sub-device. Given a device handle, :ref:`zesDeviceEnumFabricPorts`\() will +include the ports on each sub-device. In this case, +:ref:`zes-fabric-port-properties-t`\.onSubdevice will be set to true and +:ref:`zes-fabric-port-properties-t`\.subdeviceId will give the subdevice ID +where that port is located. + +The pseudo-code below shows how to get the state of all fabric ports in +the device and sub-devices: + +.. parsed-literal:: + + void ShowFabricPorts(zes_device_handle_t hSysmanDevice) + uint32_t numPorts + if ((:ref:`zesDeviceEnumFabricPorts`\(hSysmanDevice, &numPorts, NULL) == :ref:`ZE_RESULT_SUCCESS `\)) + zes_fabric_port_handle_t* phPorts = + allocate_memory(numPorts * sizeof(zes_fabric_port_handle_t)) + if (:ref:`zesDeviceEnumFabricPorts`\(hSysmanDevice, &numPorts, phPorts) == :ref:`ZE_RESULT_SUCCESS `\) + for (index = 0 .. numPorts-1) + # Show information about a particular port + output(" Port %u:\n", index) + call_function ShowFabricPortInfo(phPorts[index]) + free_memory(...) + + function ShowFabricPortInfo(zes_fabric_port_handle_t hPort) + :ref:`zes-fabric-port-properties-t` props {}; + props.stype = :ref:`ZES_STRUCTURE_TYPE_FABRIC_PORT_PROPERTIES `\; + if (:ref:`zesFabricPortGetProperties`\(hPort, &props) == :ref:`ZE_RESULT_SUCCESS `\) + :ref:`zes-fabric-port-state-t` state + if (:ref:`zesFabricPortGetState`\(hPort, &state) == :ref:`ZE_RESULT_SUCCESS `\) + :ref:`zes-fabric-link-type-t` link + if (:ref:`zesFabricPortGetLinkType`\(hPort, &link) == :ref:`ZE_RESULT_SUCCESS `\) + :ref:`zes-fabric-port-config-t` config + if (:ref:`zesFabricPortGetConfig`\(hPort, &config) == :ref:`ZE_RESULT_SUCCESS `\) + output(" Model: %s", props.model) + if (props.onSubdevice) + output(" On sub-device: %u", props.subdeviceId) + if (config.enabled) + { + var status + output(" Config: UP") + switch (state.status) + case :ref:`ZES_FABRIC_PORT_STATUS_HEALTHY `\: + status = "HEALTHY - The port is up and operating as expected" + case :ref:`ZES_FABRIC_PORT_STATUS_DEGRADED `\: + status = "DEGRADED - The port is up but has quality and/or bandwidth degradation" + case :ref:`ZES_FABRIC_PORT_STATUS_FAILED `\: + status = "FAILED - Port connection instabilities" + case :ref:`ZES_FABRIC_PORT_STATUS_DISABLED `\: + status = "DISABLED - The port is configured down" + default: + status = "UNKNOWN" + output(" Status: %s", status) + output(" Link type: %s", link.desc) + output( + " Max speed (rx/tx): %llu/%llu bytes/sec", + props.maxRxSpeed.bitRate * props.maxRxSpeed.width / 8, + props.maxTxSpeed.bitRate * props.maxTxSpeed.width / 8) + output( + " Current speed (rx/tx): %llu/%llu bytes/sec", + state.rxSpeed.bitRate * state.rxSpeed.width / 8, + state.txSpeed.bitRate * state.txSpeed.width / 8) + else + output(" Config: DOWN") + +The function :ref:`zesFabricPortGetMultiPortThroughput` provides a mechanism for the user to gather throughput values for multiple ports together in a single call. + +The following pseudo-code describes how API is used to gather throughput: + +.. parsed-literal:: + // Enumerate fabric ports + uint32_t numPorts = 0; + :ref:`zesDeviceEnumFabricPorts`\(hSysmanDevice, &numPorts, NULL); + zes_fabric_port_handle_t* phPorts = + allocate_memory(numPorts * sizeof(zes_fabric_port_handle_t)); + :ref:`zesDeviceEnumFabricPorts`\(hSysmanDevice, &numPorts, phPorts); + + // Gather throughput for all fabric ports together + :ref:`zes-fabric-port-throughput-t`\* pThroughput = + allocate_memory(numPorts * sizeof(:ref:`zes-fabric-port-throughput-t`\)); + :ref:`zesFabricPortGetMultiPortThroughput`\(hSysmanDevice, numPorts, phPorts, &pThroughput); + + +.. _Temperature: + +Querying temperature +-------------------- + +A device has multiple temperature sensors embedded at different +locations. The following locations are supported: + ++-------------------------------------------------------------+-------------------------------------------------------------+ +| Temperature sensor location | Description | ++=============================================================+=============================================================+ +| :ref:`ZES_TEMP_SENSORS_GLOBAL ` | Returns the maximum measured temperature | +| | across all sensors in the device. | ++-------------------------------------------------------------+-------------------------------------------------------------+ +| :ref:`ZES_TEMP_SENSORS_GPU ` | Returns the maximum measured temperature | +| | across all sensors in the GPU | +| | accelerator. | ++-------------------------------------------------------------+-------------------------------------------------------------+ +| :ref:`ZES_TEMP_SENSORS_MEMORY ` | Returns the maximum measured temperature | +| | across all sensors in the device | +| | memory. | ++-------------------------------------------------------------+-------------------------------------------------------------+ +| :ref:`ZES_TEMP_SENSORS_GLOBAL_MIN ` | Returns the minimum measured temperature | +| | across all sensors in the device. | ++-------------------------------------------------------------+-------------------------------------------------------------+ +| :ref:`ZES_TEMP_SENSORS_GPU_MIN ` | Returns the minimum measured temperature | +| | across all sensors in the GPU | +| | accelerator. | ++-------------------------------------------------------------+-------------------------------------------------------------+ +| :ref:`ZES_TEMP_SENSORS_MEMORY_MIN ` | Returns the minimum measured temperature | +| | across all sensors in the device | +| | memory. | ++-------------------------------------------------------------+-------------------------------------------------------------+ + +For some sensors, it is possible to request that events be triggered +when temperatures cross thresholds. This is accomplished using the +function :ref:`zesTemperatureGetConfig`\() and +:ref:`zesTemperatureSetConfig`\(). Support for specific events is +accomplished by calling :ref:`zesTemperatureGetProperties`\(). In +general, temperature events are only supported on the temperature sensor +of type :ref:`ZES_TEMP_SENSORS_GLOBAL `\. The list below describes the list of +temperature events: + ++-------------------------------------------------------------------------+---------------------------------+-----------------------+ +| Event | Check support | Description | ++=========================================================================+=================================+=======================+ +| :ref:`ZES_EVENT_TYPE_FLAG_TEMP_CRITICAL ` | :ref:`zes-temp-properties-t` | The event is | +| | .isCriticalTempSupported | triggered when the | +| | | temperature crosses | +| | | into the critical | +| | | zone where severe | +| | | frequency throttling | +| | | will be taking place. | ++-------------------------------------------------------------------------+---------------------------------+-----------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_TEMP_THRESHOLD1 ` | :ref:`zes-temp-properties-t` | The event is | +| | .isThreshold1Supported | triggered when the | +| | | temperature crosses | +| | | the custom threshold | +| | | 1. Flags can be set | +| | | to limit the trigger | +| | | to when crossing from | +| | | high to low or low to | +| | | high. | ++-------------------------------------------------------------------------+---------------------------------+-----------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_TEMP_THRESHOLD2 ` | :ref:`zes-temp-properties-t` | The event is | +| | .isThreshold2Supported | triggered when the | +| | | temperature crosses | +| | | the custom threshold | +| | | 2. Flags can be set | +| | | to limit the trigger | +| | | to when crossing from | +| | | high to low or low to | +| | | high. | ++-------------------------------------------------------------------------+---------------------------------+-----------------------+ + +The following function can be used to manage temperature sensors: + ++-------------------------------------------+-----------------------------------------+ +| Function | Description | ++===========================================+=========================================+ +| :ref:`zesDeviceEnumTemperatureSensors`\() | Enumerate the temperature sensors | +| | on the device. | ++-------------------------------------------+-----------------------------------------+ +| :ref:`zesTemperatureGetProperties`\() | Get static properties for a | +| | temperature sensor. In | +| | particular, this will indicate | +| | which parts of the device the | +| | sensor measures (one of | +| | :ref:`zes-temp-sensors-t`\). | ++-------------------------------------------+-----------------------------------------+ +| :ref:`zesTemperatureGetConfig`\() | Get information about the current | +| | temperature thresholds - | +| | enabled/threshold/processID. | ++-------------------------------------------+-----------------------------------------+ +| :ref:`zesTemperatureSetConfig`\() | Set new temperature thresholds. | +| | Events will be triggered when the | +| | temperature crosses these | +| | thresholds. | ++-------------------------------------------+-----------------------------------------+ +| :ref:`zesTemperatureGetState`\() | Read the temperature of a sensor. | ++-------------------------------------------+-----------------------------------------+ + +.. _PSU: + +Operations on power supplies +---------------------------- + +The following functions can be used to access information about each +power-supply on a device: + ++-----------------------------------+-----------------------------------+ +| Function | Description | ++===================================+===================================+ +| :ref:`zesDeviceEnumPsus`\() | Enumerate the power supplies on | +| | the device that can be managed. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesPsuGetProperties`\() | Get static details about the | +| | power supply. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesPsuGetState`\() | Get information about the health | +| | (temperature, current, fan) of | +| | the power supply. | ++-----------------------------------+-----------------------------------+ + +.. _Fan: + +Operations on fans +------------------ + +If :ref:`zesDeviceEnumFans`\() returns one or more fan handles, it is possible to +manage their speed. The hardware can be instructed to run the fan at a fixed +speed (or 0 for silent operations) or to provide a table of temperature-speed +points in which case the hardware will dynamically change the fan speed based +on the current temperature of the chip. This configuration information is +described in the structure :ref:`zes-fan-config-t`\. When specifying speed, one +can provide the value in revolutions per minute (:ref:`ZES_FAN_SPEED_UNITS_RPM `\) +or as a percentage of the maximum RPM (:ref:`ZES_FAN_SPEED_UNITS_PERCENT `\). + +The following functions are available: + ++-----------------------------------+-----------------------------------+ +| Function | Description | ++===================================+===================================+ +| :ref:`zesDeviceEnumFans`\() | Enumerate the fans on the device. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesFanGetProperties`\() | Get the maximum RPM of the fan | +| | and the maximum number of points | +| | that can be specified in the | +| | temperature-speed table for a | +| | fan. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesFanGetConfig`\() | Get the current configuration | +| | (speed) of a fan. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesFanSetDefaultMode`\() | Return fan control to factory | +| | default. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesFanSetFixedSpeedMode`\() | Configure the fan to rotate | +| | at a fixed speed. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesFanSetSpeedTableMode`\() | Configure fan speed to depend | +| | on temperature. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesFanGetState`\() | Get the current speed of a fan. | ++-----------------------------------+-----------------------------------+ + +The pseudo code below shows how to output the fan speed of all fans: + +.. parsed-literal:: + + function ShowFans(zes_device_handle_t hSysmanDevice) + uint32_t numFans + if (:ref:`zesDeviceEnumFans`\(hSysmanDevice, &numFans, NULL) == :ref:`ZE_RESULT_SUCCESS `\) + zes_fan_handle_t* phFans = + allocate_memory(numFans * sizeof(zes_fan_handle_t)) + if (:ref:`zesDeviceEnumFans`\(hSysmanDevice, &numFans, phFans) == :ref:`ZE_RESULT_SUCCESS `\) + output(" Fans") + for (fanIndex = 0 .. numFans-1) + int32_t speed + if (:ref:`zesFanGetState`\(phFans[fanIndex], :ref:`ZES_FAN_SPEED_UNITS_RPM `\, &speed) + == :ref:`ZE_RESULT_SUCCESS `\) + output(" Fan %u: %d RPM", fanIndex, speed) + free_memory(...) + } + +The next example shows how to set the fan speed for all fans to a fixed +value in RPM, but only if control is permitted: + +.. parsed-literal:: + + function SetFanSpeed(zes_device_handle_t hSysmanDevice, uint32_t SpeedRpm) + { + uint32_t numFans + if (:ref:`zesDeviceEnumFans`\(hSysmanDevice, &numFans, NULL) == :ref:`ZE_RESULT_SUCCESS `\) + zes_fan_handle_t* phFans = + allocate_memory(numFans * sizeof(zes_fan_handle_t)) + if (:ref:`zesDeviceEnumFans`\(hSysmanDevice, &numFans, phFans) == :ref:`ZE_RESULT_SUCCESS `\) + :ref:`zes-fan-speed-t` speedRequest + speedRequest.speed = SpeedRpm + speedRequest.speedUnits = :ref:`ZES_FAN_SPEED_UNITS_RPM ` + for (fanIndex = 0 .. numFans-1) + :ref:`zes-fan-properties-t` fanprops {}; + fanprops.stype = :ref:`ZES_STRUCTURE_TYPE_FAN_PROPERTIES `\; + if (:ref:`zesFanGetProperties`\(phFans[fanIndex], &fanprops) == :ref:`ZE_RESULT_SUCCESS `\) + if (fanprops.canControl) + :ref:`zesFanSetFixedSpeedMode`\(phFans[fanIndex], &speedRequest) + else + output("ERROR: Can't control fan %u.\n", fanIndex) + free_memory(...) + } + +.. _LED: + +Operations on LEDs +------------------ + +If :ref:`zesDeviceEnumLeds`\() returns one or more LED handles, it is possible +to manage LEDs on the device. This includes turning them off/on and +where the capability exists, changing their color in real-time. + +The following functions are available: + ++-----------------------------------+-----------------------------------+ +| Function | Description | ++===================================+===================================+ +| :ref:`zesDeviceEnumLeds`\() | Enumerate the LEDs on the device | +| | that can be managed. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesLedGetProperties`\() | Find out if a LED supports color | +| | changes. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesLedGetState`\() | Find out if a LED is currently | +| | off/on and the color where the | +| | capability is available. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesLedSetState`\() | Turn a LED off/on and set the | +| | color where the capability is | +| | available. | ++-----------------------------------+-----------------------------------+ + +.. _RAS: + +Querying RAS errors +------------------- + +RAS stands for Reliability, Availability, and Serviceability. It is a +feature of certain devices that attempts to correct random bit errors +and provide redundancy where permanent damage has occurred. + +If a device supports RAS, it maintains counters for hardware and software +errors. There are two types of errors and they are defined in :ref:`zes-ras-error-type-t`\: + ++------------------------------------------------------------------+---------------------------------------------------------------+ +| Error Type | Description | ++==================================================================+===============================================================+ +| :ref:`ZES_RAS_ERROR_TYPE_UNCORRECTABLE ` | Hardware errors occurred which | +| | most likely resulted in loss of | +| | data or even a device hang. If an | +| | error results in device lockup, a | +| | warm boot is required before | +| | those errors will be reported. | ++------------------------------------------------------------------+---------------------------------------------------------------+ +| :ref:`ZES_RAS_ERROR_TYPE_CORRECTABLE ` | These are errors that were | +| | corrected by the hardware and did | +| | not cause data corruption. | ++------------------------------------------------------------------+---------------------------------------------------------------+ + +Software can use the function :ref:`zesRasGetProperties`\() to find out +if the device supports RAS and if it is enabled. This information is +returned in the structure :ref:`zes-ras-properties-t`\. + +The function :ref:`zesDeviceEnumRasErrorSets`\() enumerates the available sets of RAS +errors. If no handles are returned, the device does not support RAS. A +device without sub-devices will return one handle if RAS is supported. A +device with sub-devices will return a handle for each sub-device. + +To determine if errors have occurred, software uses the function +:ref:`zesRasGetState`\(). This will return the total number of errors of +a given type (correctable/uncorrectable) that have occurred. + +When calling :ref:`zesRasGetState`\(), software can request that the +error counters be cleared. When this is done, all counters of the +specified type (correctable/uncorrectable) will be set to zero and any +subsequent calls to this function will only show new errors that have +occurred. If software intends to clear errors, it should be the only +application doing so and it should store the counters in an appropriate +database for historical analysis. + +:ref:`zesRasGetState`\() returns a breakdown of errors by category +in the structure :ref:`zes-ras-state-t`\. The table below describes the categories: + ++-------------------------------------------------------------------+--------------------------------------------------------------+----------------------------------------------------------------+ +| Error category | :ref:`ZES_RAS_ERROR_TYPE_CORRECTABLE ` | :ref:`ZES_RAS_ERROR_TYPE_UNCORRECTABLE ` | ++===================================================================+==============================================================+================================================================+ +| :ref:`ZES_RAS_ERROR_CAT_RESET ` | Always zero. | Number of accelerator engine resets | +| | | attempted by the driver. | ++-------------------------------------------------------------------+--------------------------------------------------------------+----------------------------------------------------------------+ +| :ref:`ZES_RAS_ERROR_CAT_PROGRAMMING_ERRORS ` | Always zero. | Number of hardware | +| | | exceptions generated | +| | | by the way workloads | +| | | have programmed the | +| | | hardware. | ++-------------------------------------------------------------------+--------------------------------------------------------------+----------------------------------------------------------------+ +| :ref:`ZES_RAS_ERROR_CAT_DRIVER_ERRORS ` | Always zero. | Number of low level | +| | | driver communication | +| | | errors have occurred. | ++-------------------------------------------------------------------+--------------------------------------------------------------+----------------------------------------------------------------+ +| :ref:`ZES_RAS_ERROR_CAT_COMPUTE_ERRORS ` | Number of errors that | Number of errors that | +| | have occurred in the | have occurred in the | +| | accelerator hardware | accelerator hardware | +| | that were corrected. | that were not | +| | | corrected. These | +| | | would have caused the | +| | | hardware to hang and | +| | | the driver to reset. | ++-------------------------------------------------------------------+--------------------------------------------------------------+----------------------------------------------------------------+ +| :ref:`ZES_RAS_ERROR_CAT_NON_COMPUTE_ERRORS ` | Number of errors | Number of errors | +| | occurring in | occurring in the | +| | fixed-function | fixed-function | +| | accelerator hardware | accelerator hardware | +| | that were corrected. | there could not be | +| | | corrected. Typically | +| | | these will result in | +| | | a PCI bus reset and | +| | | driver reset. | ++-------------------------------------------------------------------+--------------------------------------------------------------+----------------------------------------------------------------+ +| :ref:`ZES_RAS_ERROR_CAT_CACHE_ERRORS ` | Number of ECC | Number of ECC | +| | correctable errors | uncorrectable errors | +| | that have occurred in | that have occurred in | +| | the on-chip caches | the on-chip caches | +| | (caches/register | (caches/register | +| | file/shared local | file/shared local | +| | memory). | memory). These would | +| | | have caused the | +| | | hardware to hang and | +| | | the driver to reset. | ++-------------------------------------------------------------------+--------------------------------------------------------------+----------------------------------------------------------------+ +| :ref:`ZES_RAS_ERROR_CAT_DISPLAY_ERRORS ` | Number of ECC | Number of ECC | +| | correctable errors | uncorrectable errors | +| | that have occurred in | that have occurred in | +| | the display. | the display. | ++-------------------------------------------------------------------+--------------------------------------------------------------+----------------------------------------------------------------+ + +Each RAS error type can trigger events when the error counters exceed +thresholds. The events are listed in the table below. Software can use +the functions :ref:`zesRasGetConfig`\() and :ref:`zesRasSetConfig`\() to +get and set the thresholds for each error type. The default is for all +thresholds to be 0 which means that no events are generated. Thresholds +can be set on the total RAS error counter or on each of the detailed +error counters. + ++------------------------------------------------------------------+--------------------------------------------------------------------------------+ +| RAS error Type | Event | ++==================================================================+================================================================================+ +| :ref:`ZES_RAS_ERROR_TYPE_UNCORRECTABLE ` | :ref:`ZES_EVENT_TYPE_FLAG_RAS_UNCORRECTABLE_ERRORS ` | ++------------------------------------------------------------------+--------------------------------------------------------------------------------+ +| :ref:`ZES_RAS_ERROR_TYPE_CORRECTABLE ` | :ref:`ZES_EVENT_TYPE_FLAG_RAS_CORRECTABLE_ERRORS ` | ++------------------------------------------------------------------+--------------------------------------------------------------------------------+ + +The table below summaries all the RAS management functions: + ++-------------------------------------+-----------------------------------+ +| Function | Description | ++=====================================+===================================+ +| :ref:`zesDeviceEnumRasErrorSets`\() | Get handles to the available RAS | +| | error groups. | ++-------------------------------------+-----------------------------------+ +| :ref:`zesRasGetProperties`\() | Get properties about a RAS error | +| | group - type of RAS errors and if | +| | they are enabled. | ++-------------------------------------+-----------------------------------+ +| :ref:`zesRasGetConfig`\() | Get the current list of | +| | thresholds for each counter in | +| | the RAS group. RAS error events | +| | will be generated when the | +| | thresholds are exceeded. | ++-------------------------------------+-----------------------------------+ +| :ref:`zesRasSetConfig`\() | Set current list of thresholds | +| | for each counter in the RAS | +| | group. RAS error events will be | +| | generated when the thresholds are | +| | exceeded. | ++-------------------------------------+-----------------------------------+ +| :ref:`zesRasGetState`\() | Get the current state of the RAS | +| | error counters. The counters can | +| | also be cleared. | ++-------------------------------------+-----------------------------------+ + +The pseudo code below shows how to determine if RAS is supported and the +current state of RAS errors: + +.. parsed-literal:: + + void ShowRasErrors(zes_device_handle_t hSysmanDevice) + uint32_t numRasErrorSets + if ((:ref:`zesDeviceEnumRasErrorSets`\(hSysmanDevice, &numRasErrorSets, NULL) == :ref:`ZE_RESULT_SUCCESS `\)) + zes_ras_handle_t* phRasErrorSets = + allocate_memory(numRasErrorSets * sizeof(zes_ras_handle_t)) + if (:ref:`zesDeviceEnumRasErrorSets`\(hSysmanDevice, &numRasErrorSets, phRasErrorSets) == :ref:`ZE_RESULT_SUCCESS `\) + for (rasIndex = 0 .. numRasErrorSets) + :ref:`zes-ras-properties-t` props {}; + props.stype = :ref:`ZES_STRUCTURE_TYPE_RAS_PROPERTIES `\; + if (:ref:`zesRasGetProperties`\(phRasErrorSets[rasIndex], &props) == :ref:`ZE_RESULT_SUCCESS `\) + var pErrorType + switch (props.type) + case :ref:`ZES_RAS_ERROR_TYPE_CORRECTABLE `\: + pErrorType = "Correctable" + case :ref:`ZES_RAS_ERROR_TYPE_UNCORRECTABLE `\: + pErrorType = "Uncorrectable" + default: + pErrorType = "Unknown" + output("RAS %s errors", pErrorType) + if (props.onSubdevice) + output(" On sub-device: %u", props.subdeviceId) + output(" RAS supported: %s", props.supported ? "yes" : "no") + output(" RAS enabled: %s", props.enabled ? "yes" : "no") + if (props.supported and props.enabled) + :ref:`zes-ras-state-t` errorDetails + if (:ref:`zesRasGetState`\(phRasErrorSets[rasIndex], 1, &errorDetails) + == :ref:`ZE_RESULT_SUCCESS `\) + uint64_t numErrors = 0 + for (int i = 0; i < ZES_RAS_ERROR_CAT_MAX; i++) + numErrors += errorDetails.category[i]; + output(" Number new errors: %llu\n", (long long unsigned int)numErrors); + if (numErrors) + call_function OutputRasDetails(&errorDetails) + free_memory(...) + + function OutputRasDetails(:ref:`zes-ras-state-t`\* pDetails) + output(" Number new resets: %llu", pDetails->category[ZES_RAS_ERROR_CAT_RESET]) + output(" Number new programming errors: %llu", pDetails->category[ZES_RAS_ERROR_CAT_PROGRAMMING_ERRORS]) + output(" Number new driver errors: %llu", pDetails->category[ZES_RAS_ERROR_CAT_DRIVER_ERRORS]) + output(" Number new compute errors: %llu", pDetails->category[ZES_RAS_ERROR_CAT_COMPUTE_ERRORS]) + output(" Number new non-compute errors: %llu", pDetails->category[ZES_RAS_ERROR_CAT_NON_COMPUTE_ERRORS]) + output(" Number new cache errors: %llu", pDetails->category[ZES_RAS_ERROR_CAT_CACHE_ERRORS]) + output(" Number new display errors: %llu", pDetails->category[ZES_RAS_ERROR_CAT_DISPLAY_ERRORS]) + +.. _Diagnostics: + +Performing Diagnostics +---------------------- + +Diagnostics is the process of requesting that the hardware run self-checks +and repairs. + +**WARNING:** Performing diagnostics can destroy current device state. +It is important that all workloads are stopped before initiating. + +This is achieved using +the function :ref:`zesDiagnosticsRunTests`\(). On return from the +function, software can use the diagnostics return code +(:ref:`zes-diag-result-t`\) to determine the new course of action: + +1. :ref:`ZES_DIAG_RESULT_NO_ERRORS ` - No errors found and workloads can + resume submission to the hardware. +2. :ref:`ZES_DIAG_RESULT_ABORT ` - Hardware had problems running diagnostic + tests. +3. :ref:`ZES_DIAG_RESULT_FAIL_CANT_REPAIR ` - Hardware had problems setting up + repair. Card should be removed from the system. +4. :ref:`ZES_DIAG_RESULT_REBOOT_FOR_REPAIR ` - Hardware has prepared for + repair and requires a reboot after which time workloads can resume + submission. + +The function :ref:`zesDeviceGetState`\() can be used to determine if +the device has been repaired. + +There are multiple diagnostic test suites that can be run. +The function +:ref:`zesDeviceEnumDiagnosticTestSuites`\() will enumerate each available test suite and +the function :ref:`zesDiagnosticsGetProperties`\() can be used to +determine the name of each test suite +(:ref:`zes-diag-properties-t`\.name). + +Each test suite contains one or more diagnostic tests. On some systems, +it is possible to run only a subset of the tests. Use the function +:ref:`zesDiagnosticsGetProperties`\() and check that +:ref:`zes-diag-properties-t`\.haveTests is true to determine if this feature +is available. If it is, the function :ref:`zesDiagnosticsGetTests`\() +can be called to get the list of individual tests that can be run. + +When running diagnostics for a test suite using +:ref:`zesDiagnosticsRunTests`\(), it is possible to specify the start +and index of tests in the suite. Setting to ZES_DIAG_FIRST_TEST_INDEX +and ZES_DIAG_LAST_TEST_INDEX will run all tests in the suite. If it is +possible to run a subset of tests, specify the index of the start test +and the end test - all tests that have an index in this range will be +run. + +The table below summaries all the diagnostic management functions: + ++---------------------------------------------+-----------------------------------+ +| Function | Description | ++=============================================+===================================+ +| :ref:`zesDeviceEnumDiagnosticTestSuites`\() | Get handles to the available | +| | diagnostic test suites that can | +| | be run. | ++---------------------------------------------+-----------------------------------+ +| :ref:`zesDiagnosticsGetProperties`\() | Get information about a test | +| | suite - type, name, location and | +| | if individual tests can be run. | ++---------------------------------------------+-----------------------------------+ +| :ref:`zesDiagnosticsGetTests`\() | Get list of individual diagnostic | +| | tests that can be run. | ++---------------------------------------------+-----------------------------------+ +| :ref:`zesDiagnosticsRunTests`\() | Run either all or individual | +| | diagnostic tests. | ++---------------------------------------------+-----------------------------------+ + +The pseudo code below shows how to discover all test suites and the +tests in each: + +.. parsed-literal:: + + function ListDiagnosticTests(zes_device_handle_t hSysmanDevice) + { + uint32_t numTestSuites + if ((:ref:`zesDeviceEnumDiagnosticTestSuites`\(hSysmanDevice, &numTestSuites, NULL) == :ref:`ZE_RESULT_SUCCESS `\)) + zes_diag_handle_t* phTestSuites = + allocate_memory(numTestSuites * sizeof(zes_diag_handle_t)) + if (:ref:`zesDeviceEnumDiagnosticTestSuites`\(hSysmanDevice, &numTestSuites, phTestSuites) == :ref:`ZE_RESULT_SUCCESS `\) + for (suiteIndex = 0 .. numTestSuites-1) + uint32_t numTests = 0 + :ref:`zes-diag-test-t`\* pTests + :ref:`zes-diag-properties-t` suiteProps {}; + suiteProps.stype = :ref:`ZES_STRUCTURE_TYPE_DIAG_PROPERTIES `\; + if (:ref:`zesDiagnosticsGetProperties`\(phTestSuites[suiteIndex], &suiteProps) != :ref:`ZE_RESULT_SUCCESS `\) + next_loop(suiteIndex) + output("Diagnostic test suite %s:", suiteProps.name) + if (!suiteProps.haveTests) + output(" There are no individual tests that can be selected.") + next_loop(suiteIndex) + if (:ref:`zesDiagnosticsGetTests`\(phTestSuites[suiteIndex], &numTests, NULL) != :ref:`ZE_RESULT_SUCCESS `\) + output(" Problem getting list of individual tests.") + next_loop(suiteIndex) + pTests = allocate_memory(numTests * sizeof(:ref:`zes-diag-test-t`\*)) + if (:ref:`zesDiagnosticsGetTests`\(phTestSuites[suiteIndex], &numTests, pTests) != :ref:`ZE_RESULT_SUCCESS `\) + output(" Problem getting list of individual tests.") + next_loop(suiteIndex) + for (i = 0 .. numTests-1) + output(" Test %u: %s", pTests[i].index, pTests[i].name) + free_memory(...) + +.. _events-2: + +Events +------ + +Events are a way to determine if changes have occurred on a device +e.g. new RAS errors. An application registers the events that it wishes +to receive notification about and then it queries to receive +notifications. The query can request a blocking wait - this will put the +calling application thread to sleep until new notifications are +received. + +For every device on which the application wants to receive events, it +should perform the following actions: + +1. Use :ref:`zesDeviceEventRegister`\() to indicate which events it wants to + listen to. +2. For each event, where appropriate, call the device component functions + to set conditions that will trigger the event. + +Finally, the application calls :ref:`zesDriverEventListen`\() with a list of +device handles that it wishes to listen for events on. A wait timeout is +used to request non-blocking operations (timeout = 0) +or blocking operations (timeout = UINT32_MAX) +or to return after a specified amount of time +even if no events have been received. + +Note that calling zesDeviceEventRegister with no events (set argument events to "0") +will unregister all events that are being listened too. If the application +has a thread blocked in the function zesDriverEventListen() and there are +no more events to listen to, the function will unblock and return control +to the application thread with an event count of 0. + +When events are received, they are returned when the call to function +:ref:`zesDriverEventListen`\() completes. This will indicate which devices has +generated events and the list of event types for each device. It is then +up to the application to use the relevant device component functions to +determine the state that has changed. For example, if the RAS error +event has triggered for a device, then use the function :ref:`zesRasGetState`\() +to get the list of RAS error counters. + +The list of events is given in the table below. For each event, the +corresponding configuration and state functions are shown. Where a +configuration function is not shown, the event is generated +automatically; where a configuration function is shown, it must be +called to enable the event and/or provide threshold conditions. + ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| Event | Trigger | Configuration function | State function | ++===================================================================================+=============================+===============================================+===================================+ +| :ref:`ZES_EVENT_TYPE_FLAG_DEVICE_DETACH ` | Device is about to be reset | | | +| | by the driver | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_DEVICE_ATTACH ` | Device completed the reset | | | +| | by the driver | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_DEVICE_SLEEP_STATE_ENTER ` | Device is about to enter a | | | +| | deep sleep state | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_DEVICE_SLEEP_STATE_EXIT ` | Device is exiting a deep | | | +| | sleep state | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_FREQ_THROTTLED ` | Frequency starts being | | :ref:`zesFrequencyGetState`\() | +| | throttled | | | ++------------------------------------------------------------------------------- ---+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_ENERGY_THRESHOLD_CROSSED ` | Energy consumption | :ref:`zesPowerSetEnergyThreshold`\() | | +| | threshold is reached | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_TEMP_CRITICAL ` | Critical temperature is | :ref:`zesTemperatureSetConfig`\() | :ref:`zesTemperatureGetState`\() | +| | reached | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_TEMP_THRESHOLD1 ` | Temperature crosses | :ref:`zesTemperatureSetConfig`\() | :ref:`zesTemperatureGetState`\() | +| | threshold 1 | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_TEMP_THRESHOLD2 ` | Temperature crosses | :ref:`zesTemperatureSetConfig`\() | :ref:`zesTemperatureGetState`\() | +| | threshold 2 | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_MEM_HEALTH ` | Health of device memory | | :ref:`zesMemoryGetState`\() | +| | changes | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_FABRIC_PORT_HEALTH ` | Health of fabric ports | | :ref:`zesFabricPortGetState`\() | +| | change | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_RAS_CORRECTABLE_ERRORS ` | RAS correctable errors | :ref:`zesRasSetConfig`\() | :ref:`zesRasGetState`\() | +| | cross thresholds | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_RAS_UNCORRECTABLE_ERRORS ` | RAS uncorrectable errors | :ref:`zesRasSetConfig`\() | :ref:`zesRasGetState`\() | +| | cross thresholds | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ +| :ref:`ZES_EVENT_TYPE_FLAG_DEVICE_RESET_REQUIRED ` | Driver has determined that | | :ref:`zesDeviceGetState`\() | +| | an immediate reset is | | | +| | required | | | ++-----------------------------------------------------------------------------------+-----------------------------+-----------------------------------------------+-----------------------------------+ + +The call to :ref:`zesDriverEventListen`\() requires the driver handle and a list +of device handles. THe device handles must have been enumerated from that +driver, otherwise an error will be returned. If the +application is managing devices from multiple drivers, it will need to +call this function separately for each driver. + +The table below summarizes all the event management functions: + ++-----------------------------------+-----------------------------------+ +| Function | Description | ++===================================+===================================+ +| :ref:`zesDeviceEventRegister`\() | Set the events that should be | +| | registered on a given event | +| | handle. | ++-----------------------------------+-----------------------------------+ +| :ref:`zesDriverEventListen`\() | Wait for events to arrive for a | +| | given list of devices. | ++-----------------------------------+-----------------------------------+ + +The pseudo code below shows how to configure all temperature sensors to +trigger an event when the temperature exceeds a specified threshold or +when the critical temperature is reached. + +.. parsed-literal:: + + function WaitForExcessTemperatureEvent(zes_driver_handle_t hDriver, double tempLimit) + { + # This will contain the number of devices that we will listen for events from + var numListenDevices = 0 + + # Get list of all devices under this driver + uint32_t deviceCount = 0 + :ref:`zeDeviceGet`\(hDriver, &deviceCount, nullptr) + # Allocate memory for all device handles + ze_device_handle_t* phDevices = + allocate_memory(deviceCount * sizeof(ze_device_handle_t)) + + # Allocate memory for the devices from which we will listen to temperature events + zes_device_handle_t* phListenDevices = + allocate_memory(deviceCount * sizeof(zes_device_handle_t)) + # Allocate memory for the events that have been received from each device in phListenDevices + :ref:`zes-event-type-flags-t`\* pDeviceEvents = + allocate_memory(deviceCount * sizeof(:ref:`zes-event-type-flags-t`\)) + # Allocate memory so that we can map device handle in phListenDevices to the device index + uint32_t* pListenDeviceIndex = allocate_memory(deviceCount * sizeof(uint32_t)) + + # Get all device handles + :ref:`zeDeviceGet`\(hDriver, &deviceCount, phDevices) + for(devIndex = 0 .. deviceCount-1) + # Get Sysman handle for the device + zes_device_handle_t hSysmanDevice = (zes_device_handle_t)phDevices[devIndex] + + # Get handles to all temperature sensors + uint32_t numTempSensors = 0 + if (:ref:`zesDeviceEnumTemperatureSensors`\(hSysmanDevice, &numTempSensors, NULL) != :ref:`ZE_RESULT_SUCCESS `\) + next_loop(devIndex) + zes_temp_handle_t* allTempSensors + allocate_memory(deviceCount * sizeof(zes_temp_handle_t)) + if (:ref:`zesDeviceEnumTemperatureSensors`\(hSysmanDevice, &numTempSensors, allTempSensors) == :ref:`ZE_RESULT_SUCCESS `\) + # Configure each temperature sensor to trigger a critical event and a threshold1 event + var numConfiguredTempSensors = 0 + for (tempIndex = 0 .. numTempSensors-1) + if (:ref:`zesTemperatureGetConfig`\(allTempSensors[tempIndex], &config) != :ref:`ZE_RESULT_SUCCESS `\) + next_loop(tempIndex) + :ref:`zes-temp-config-t` config + config.enableCritical = true + config.threshold1.enableHighToLow = false + config.threshold1.enableLowToHigh = true + config.threshold1.threshold = tempLimit + config.threshold2.enableHighToLow = false + config.threshold2.enableLowToHigh = false + if (:ref:`zesTemperatureSetConfig`\(allTempSensors[tempIndex], &config) == :ref:`ZE_RESULT_SUCCESS `\) + numConfiguredTempSensors++ + + # If we configured any sensors to generate events, we can now register to receive on this device + if (numConfiguredTempSensors) + if (:ref:`zesDeviceEventRegister`\(phDevices[devIndex], + :ref:`ZES_EVENT_TYPE_FLAG_TEMP_CRITICAL ` | :ref:`ZES_EVENT_TYPE_FLAG_TEMP_THRESHOLD1 `\) + == :ref:`ZE_RESULT_SUCCESS `\) + phListenDevices[numListenDevices] = hSysmanDevice + pListenDeviceIndex[numListenDevices] = devIndex + numListenDevices++ + + # If we registered to receive events on any devices, start listening now + if (numListenDevices) + # Block until we receive events + uint32_t numEvents + if (:ref:`zesDriverEventListen`\(hDriver, UINT32_MAX, numListenDevices, phListenDevices, &numEvents, pDeviceEvents) + == :ref:`ZE_RESULT_SUCCESS `\) + if (numEvents) + for (evtIndex .. numListenDevices) + if (pDeviceEvents[evtIndex] & :ref:`ZES_EVENT_TYPE_FLAG_TEMP_CRITICAL `\) + output("Device %u: Went above the critical temperature.", + pListenDeviceIndex[evtIndex]) + else if (pDeviceEvents[evtIndex] & :ref:`ZES_EVENT_TYPE_FLAG_TEMP_THRESHOLD1 `\) + output("Device %u: Went above the temperature threshold %f.", + pListenDeviceIndex[evtIndex], tempLimit) + + free_memory(...) + +Security +======== + +Linux +----- + +The default security provided by the accelerator driver is to permit +querying and controlling of system resources to the UNIX user **root**, +querying only for users that are members of the UNIX group **root** and +no access to any other user. Some queries are permitted from any user +(e.g. requesting current frequency, checking standby state). + +It is the responsibility of the Linux distribution or the systems +administrator to relax or tighten these permissions. This is typically +done by adding udev daemon rules. For example, many distributions of +Linux have the following rule: + +.. parsed-literal:: + + root video /dev/dri/card0 + +This will permit all users in the UNIX group **video** to query +information about system resources. In order to open up control access +to users of the video group, udev rules need to be added for each +relevant control. For example, to permit someone in the video group to +disable standby, the following udev daemon rule would be needed: + +.. parsed-literal:: + + chmod g+w /sys/class/drm/card0/rc6_enable + +The full list of sysfs files used by the API are described in the table +below. For each file, the list of affected API functions is given. + ++-----------------------+-----------------------+------------------------------------------+ +| sysfs file | Description | Functions | ++=======================+=======================+==========================================+ +| /sys/class/drm/card0/ | Used to | :ref:`zesDeviceEnumStandbyDomains`\() | +| rc6_enable | enable/disable | :ref:`zesStandbyGetProperties`\() | +| | standby. | :ref:`zesStandbyGetMode`\() | +| | | :ref:`zesStandbySetMode`\() | ++-----------------------+-----------------------+------------------------------------------+ +| TBD | In development | TBD | ++-----------------------+-----------------------+------------------------------------------+ + +Windows +------- + +The Windows driver will only permit telemetry requests coming from users with administrator +permissions. It will only permit controls for system services with LocalServiceSid permissions. + + +Virtualization +-------------- + +In virtualization environments, only the host is permitted to access any +features of the API. Attempts to use the API in virtual machines will +fail. diff --git a/level-zero/1.10/_sources/sysman/api.rst b/level-zero/1.10/_sources/sysman/api.rst new file mode 100644 index 0000000..0df55fe --- /dev/null +++ b/level-zero/1.10/_sources/sysman/api.rst @@ -0,0 +1,3827 @@ + + +============================== +Sysman API +============================== +oneAPI Level Zero Specification - Version 1.10 + + + + + +Common +============================================================ +* Enumerations + + + * :ref:`zes-structure-type-t` + + +* Structures + + + * :ref:`zes-base-properties-t` + * :ref:`zes-base-desc-t` + * :ref:`zes-base-state-t` + * :ref:`zes-base-config-t` + * :ref:`zes-base-capability-t` + + + + +Common Enums +------------------------------------------------------------------------------ + + +.. _zes-structure-type-t: + +zes_structure_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_structure_type_t + :project: LevelZero + + +Common Structures +------------------------------------------------------------------------------ + +.. _zes-base-properties-t: + +zes_base_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_base_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-base-desc-t: + +zes_base_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_base_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-base-state-t: + +zes_base_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_base_state_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-base-config-t: + +zes_base_config_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_base_config_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-base-capability-t: + +zes_base_capability_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_base_capability_t + :project: LevelZero + :members: + :undoc-members: + + + + +Driver +============================================================ +* Functions + + + * :ref:`zesInit` + * :ref:`zesDriverGet` + * :ref:`zesDriverGetExtensionProperties` + * :ref:`zesDriverGetExtensionFunctionAddress` + + +* Enumerations + + + * :ref:`zes-init-flags-t` + + +* Structures + + + * :ref:`zes-driver-extension-properties-t` + + +Driver Functions +------------------------------------------------------------------------------ + + +.. _zesInit: + +zesInit +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesInit + :project: LevelZero + + +.. _zesDriverGet: + +zesDriverGet +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDriverGet + :project: LevelZero + + +.. _zesDriverGetExtensionProperties: + +zesDriverGetExtensionProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDriverGetExtensionProperties + :project: LevelZero + + +.. _zesDriverGetExtensionFunctionAddress: + +zesDriverGetExtensionFunctionAddress +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDriverGetExtensionFunctionAddress + :project: LevelZero + + + +Driver Enums +------------------------------------------------------------------------------ + + +.. _zes-init-flags-t: + +zes_init_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_init_flag_t + :project: LevelZero + + +Driver Structures +------------------------------------------------------------------------------ + +.. _zes-driver-extension-properties-t: + +zes_driver_extension_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_driver_extension_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Device +============================================================ +* Functions + + + * :ref:`zesDeviceGet` + * :ref:`zesDeviceGetProperties` + * :ref:`zesDeviceGetState` + * :ref:`zesDeviceReset` + * :ref:`zesDeviceResetExt` + * :ref:`zesDeviceProcessesGetState` + * :ref:`zesDevicePciGetProperties` + * :ref:`zesDevicePciGetState` + * :ref:`zesDevicePciGetBars` + * :ref:`zesDevicePciGetStats` + + +* Enumerations + + + * :ref:`zes-engine-type-flags-t` + * :ref:`zes-repair-status-t` + * :ref:`zes-reset-reason-flags-t` + * :ref:`zes-reset-type-t` + * :ref:`zes-device-type-t` + * :ref:`zes-device-property-flags-t` + * :ref:`zes-pci-link-status-t` + * :ref:`zes-pci-link-qual-issue-flags-t` + * :ref:`zes-pci-link-stab-issue-flags-t` + * :ref:`zes-pci-bar-type-t` + + +* Structures + + + * :ref:`zes-device-state-t` + * :ref:`zes-reset-properties-t` + * :ref:`zes-uuid-t` + * :ref:`zes-device-properties-t` + * :ref:`zes-device-ext-properties-t` + * :ref:`zes-process-state-t` + * :ref:`zes-pci-address-t` + * :ref:`zes-pci-speed-t` + * :ref:`zes-pci-properties-t` + * :ref:`zes-pci-state-t` + * :ref:`zes-pci-bar-properties-t` + * :ref:`zes-pci-bar-properties-1-2-t` + * :ref:`zes-pci-stats-t` + + +Device Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceGet: + +zesDeviceGet +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceGet + :project: LevelZero + + +.. _zesDeviceGetProperties: + +zesDeviceGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceGetProperties + :project: LevelZero + + +.. _zesDeviceGetState: + +zesDeviceGetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceGetState + :project: LevelZero + + +.. _zesDeviceReset: + +zesDeviceReset +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceReset + :project: LevelZero + + +.. _zesDeviceResetExt: + +zesDeviceResetExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceResetExt + :project: LevelZero + + +.. _zesDeviceProcessesGetState: + +zesDeviceProcessesGetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceProcessesGetState + :project: LevelZero + + +.. _zesDevicePciGetProperties: + +zesDevicePciGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDevicePciGetProperties + :project: LevelZero + + +.. _zesDevicePciGetState: + +zesDevicePciGetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDevicePciGetState + :project: LevelZero + + +.. _zesDevicePciGetBars: + +zesDevicePciGetBars +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDevicePciGetBars + :project: LevelZero + + +.. _zesDevicePciGetStats: + +zesDevicePciGetStats +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDevicePciGetStats + :project: LevelZero + + + +Device Enums +------------------------------------------------------------------------------ + + +.. _zes-engine-type-flags-t: + +zes_engine_type_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_engine_type_flag_t + :project: LevelZero + + +.. _zes-repair-status-t: + +zes_repair_status_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_repair_status_t + :project: LevelZero + + +.. _zes-reset-reason-flags-t: + +zes_reset_reason_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_reset_reason_flag_t + :project: LevelZero + + +.. _zes-reset-type-t: + +zes_reset_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_reset_type_t + :project: LevelZero + + +.. _zes-device-type-t: + +zes_device_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_device_type_t + :project: LevelZero + + +.. _zes-device-property-flags-t: + +zes_device_property_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_device_property_flag_t + :project: LevelZero + + +.. _zes-pci-link-status-t: + +zes_pci_link_status_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_pci_link_status_t + :project: LevelZero + + +.. _zes-pci-link-qual-issue-flags-t: + +zes_pci_link_qual_issue_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_pci_link_qual_issue_flag_t + :project: LevelZero + + +.. _zes-pci-link-stab-issue-flags-t: + +zes_pci_link_stab_issue_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_pci_link_stab_issue_flag_t + :project: LevelZero + + +.. _zes-pci-bar-type-t: + +zes_pci_bar_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_pci_bar_type_t + :project: LevelZero + + +Device Structures +------------------------------------------------------------------------------ + +.. _zes-device-state-t: + +zes_device_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_device_state_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-reset-properties-t: + +zes_reset_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_reset_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-uuid-t: + +zes_uuid_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_uuid_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-device-properties-t: + +zes_device_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_device_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-device-ext-properties-t: + +zes_device_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_device_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-process-state-t: + +zes_process_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_process_state_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-pci-address-t: + +zes_pci_address_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_pci_address_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-pci-speed-t: + +zes_pci_speed_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_pci_speed_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-pci-properties-t: + +zes_pci_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_pci_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-pci-state-t: + +zes_pci_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_pci_state_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-pci-bar-properties-t: + +zes_pci_bar_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_pci_bar_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-pci-bar-properties-1-2-t: + +zes_pci_bar_properties_1_2_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_pci_bar_properties_1_2_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-pci-stats-t: + +zes_pci_stats_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_pci_stats_t + :project: LevelZero + :members: + :undoc-members: + + + + +Overclock +============================================================ +* Functions + + + * :ref:`zesDeviceSetOverclockWaiver` + * :ref:`zesDeviceGetOverclockDomains` + * :ref:`zesDeviceGetOverclockControls` + * :ref:`zesDeviceResetOverclockSettings` + * :ref:`zesDeviceReadOverclockState` + * :ref:`zesDeviceEnumOverclockDomains` + * :ref:`zesOverclockGetDomainProperties` + * :ref:`zesOverclockGetDomainVFProperties` + * :ref:`zesOverclockGetDomainControlProperties` + * :ref:`zesOverclockGetControlCurrentValue` + * :ref:`zesOverclockGetControlPendingValue` + * :ref:`zesOverclockSetControlUserValue` + * :ref:`zesOverclockGetControlState` + * :ref:`zesOverclockGetVFPointValues` + * :ref:`zesOverclockSetVFPointValues` + + +* Enumerations + + + * :ref:`zes-overclock-domain-t` + * :ref:`zes-overclock-control-t` + * :ref:`zes-overclock-mode-t` + * :ref:`zes-control-state-t` + * :ref:`zes-pending-action-t` + * :ref:`zes-vf-program-type-t` + * :ref:`zes-vf-type-t` + * :ref:`zes-vf-array-type-t` + + +* Structures + + + * :ref:`zes-overclock-properties-t` + * :ref:`zes-control-property-t` + * :ref:`zes-vf-property-t` + + +Overclock Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceSetOverclockWaiver: + +zesDeviceSetOverclockWaiver +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceSetOverclockWaiver + :project: LevelZero + + +.. _zesDeviceGetOverclockDomains: + +zesDeviceGetOverclockDomains +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceGetOverclockDomains + :project: LevelZero + + +.. _zesDeviceGetOverclockControls: + +zesDeviceGetOverclockControls +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceGetOverclockControls + :project: LevelZero + + +.. _zesDeviceResetOverclockSettings: + +zesDeviceResetOverclockSettings +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceResetOverclockSettings + :project: LevelZero + + +.. _zesDeviceReadOverclockState: + +zesDeviceReadOverclockState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceReadOverclockState + :project: LevelZero + + +.. _zesDeviceEnumOverclockDomains: + +zesDeviceEnumOverclockDomains +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumOverclockDomains + :project: LevelZero + + +.. _zesOverclockGetDomainProperties: + +zesOverclockGetDomainProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesOverclockGetDomainProperties + :project: LevelZero + + +.. _zesOverclockGetDomainVFProperties: + +zesOverclockGetDomainVFProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesOverclockGetDomainVFProperties + :project: LevelZero + + +.. _zesOverclockGetDomainControlProperties: + +zesOverclockGetDomainControlProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesOverclockGetDomainControlProperties + :project: LevelZero + + +.. _zesOverclockGetControlCurrentValue: + +zesOverclockGetControlCurrentValue +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesOverclockGetControlCurrentValue + :project: LevelZero + + +.. _zesOverclockGetControlPendingValue: + +zesOverclockGetControlPendingValue +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesOverclockGetControlPendingValue + :project: LevelZero + + +.. _zesOverclockSetControlUserValue: + +zesOverclockSetControlUserValue +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesOverclockSetControlUserValue + :project: LevelZero + + +.. _zesOverclockGetControlState: + +zesOverclockGetControlState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesOverclockGetControlState + :project: LevelZero + + +.. _zesOverclockGetVFPointValues: + +zesOverclockGetVFPointValues +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesOverclockGetVFPointValues + :project: LevelZero + + +.. _zesOverclockSetVFPointValues: + +zesOverclockSetVFPointValues +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesOverclockSetVFPointValues + :project: LevelZero + + + +Overclock Enums +------------------------------------------------------------------------------ + + +.. _zes-overclock-domain-t: + +zes_overclock_domain_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_overclock_domain_t + :project: LevelZero + + +.. _zes-overclock-control-t: + +zes_overclock_control_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_overclock_control_t + :project: LevelZero + + +.. _zes-overclock-mode-t: + +zes_overclock_mode_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_overclock_mode_t + :project: LevelZero + + +.. _zes-control-state-t: + +zes_control_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_control_state_t + :project: LevelZero + + +.. _zes-pending-action-t: + +zes_pending_action_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_pending_action_t + :project: LevelZero + + +.. _zes-vf-program-type-t: + +zes_vf_program_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_vf_program_type_t + :project: LevelZero + + +.. _zes-vf-type-t: + +zes_vf_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_vf_type_t + :project: LevelZero + + +.. _zes-vf-array-type-t: + +zes_vf_array_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_vf_array_type_t + :project: LevelZero + + +Overclock Structures +------------------------------------------------------------------------------ + +.. _zes-overclock-properties-t: + +zes_overclock_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_overclock_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-control-property-t: + +zes_control_property_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_control_property_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-vf-property-t: + +zes_vf_property_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_vf_property_t + :project: LevelZero + :members: + :undoc-members: + + + + +Diagnostics +============================================================ +* Functions + + + * :ref:`zesDeviceEnumDiagnosticTestSuites` + * :ref:`zesDiagnosticsGetProperties` + * :ref:`zesDiagnosticsGetTests` + * :ref:`zesDiagnosticsRunTests` + + +* Enumerations + + + * :ref:`zes-diag-result-t` + + +* Structures + + + * :ref:`zes-diag-test-t` + * :ref:`zes-diag-properties-t` + + +Diagnostics Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumDiagnosticTestSuites: + +zesDeviceEnumDiagnosticTestSuites +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumDiagnosticTestSuites + :project: LevelZero + + +.. _zesDiagnosticsGetProperties: + +zesDiagnosticsGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDiagnosticsGetProperties + :project: LevelZero + + +.. _zesDiagnosticsGetTests: + +zesDiagnosticsGetTests +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDiagnosticsGetTests + :project: LevelZero + + +.. _zesDiagnosticsRunTests: + +zesDiagnosticsRunTests +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDiagnosticsRunTests + :project: LevelZero + + + +Diagnostics Enums +------------------------------------------------------------------------------ + + +.. _zes-diag-result-t: + +zes_diag_result_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_diag_result_t + :project: LevelZero + + +Diagnostics Structures +------------------------------------------------------------------------------ + +.. _zes-diag-test-t: + +zes_diag_test_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_diag_test_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-diag-properties-t: + +zes_diag_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_diag_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Ecc +============================================================ +* Functions + + + * :ref:`zesDeviceEccAvailable` + * :ref:`zesDeviceEccConfigurable` + * :ref:`zesDeviceGetEccState` + * :ref:`zesDeviceSetEccState` + + +* Enumerations + + + * :ref:`zes-device-ecc-state-t` + * :ref:`zes-device-action-t` + + +* Structures + + + * :ref:`zes-device-ecc-desc-t` + * :ref:`zes-device-ecc-properties-t` + + +Ecc Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEccAvailable: + +zesDeviceEccAvailable +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEccAvailable + :project: LevelZero + + +.. _zesDeviceEccConfigurable: + +zesDeviceEccConfigurable +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEccConfigurable + :project: LevelZero + + +.. _zesDeviceGetEccState: + +zesDeviceGetEccState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceGetEccState + :project: LevelZero + + +.. _zesDeviceSetEccState: + +zesDeviceSetEccState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceSetEccState + :project: LevelZero + + + +Ecc Enums +------------------------------------------------------------------------------ + + +.. _zes-device-ecc-state-t: + +zes_device_ecc_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_device_ecc_state_t + :project: LevelZero + + +.. _zes-device-action-t: + +zes_device_action_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_device_action_t + :project: LevelZero + + +Ecc Structures +------------------------------------------------------------------------------ + +.. _zes-device-ecc-desc-t: + +zes_device_ecc_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_device_ecc_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-device-ecc-properties-t: + +zes_device_ecc_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_device_ecc_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Engine +============================================================ +* Functions + + + * :ref:`zesDeviceEnumEngineGroups` + * :ref:`zesEngineGetProperties` + * :ref:`zesEngineGetActivity` + + +* Enumerations + + + * :ref:`zes-engine-group-t` + + +* Structures + + + * :ref:`zes-engine-properties-t` + * :ref:`zes-engine-stats-t` + + +Engine Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumEngineGroups: + +zesDeviceEnumEngineGroups +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumEngineGroups + :project: LevelZero + + +.. _zesEngineGetProperties: + +zesEngineGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesEngineGetProperties + :project: LevelZero + + +.. _zesEngineGetActivity: + +zesEngineGetActivity +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesEngineGetActivity + :project: LevelZero + + + +Engine Enums +------------------------------------------------------------------------------ + + +.. _zes-engine-group-t: + +zes_engine_group_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_engine_group_t + :project: LevelZero + + +Engine Structures +------------------------------------------------------------------------------ + +.. _zes-engine-properties-t: + +zes_engine_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_engine_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-engine-stats-t: + +zes_engine_stats_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_engine_stats_t + :project: LevelZero + :members: + :undoc-members: + + + + +Events +============================================================ +* Functions + + + * :ref:`zesDeviceEventRegister` + * :ref:`zesDriverEventListen` + * :ref:`zesDriverEventListenEx` + + +* Enumerations + + + * :ref:`zes-event-type-flags-t` + + + + +Events Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEventRegister: + +zesDeviceEventRegister +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEventRegister + :project: LevelZero + + +.. _zesDriverEventListen: + +zesDriverEventListen +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDriverEventListen + :project: LevelZero + + +.. _zesDriverEventListenEx: + +zesDriverEventListenEx +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDriverEventListenEx + :project: LevelZero + + + +Events Enums +------------------------------------------------------------------------------ + + +.. _zes-event-type-flags-t: + +zes_event_type_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_event_type_flag_t + :project: LevelZero + + + + + +Fabric +============================================================ +* Functions + + + * :ref:`zesDeviceEnumFabricPorts` + * :ref:`zesFabricPortGetProperties` + * :ref:`zesFabricPortGetLinkType` + * :ref:`zesFabricPortGetConfig` + * :ref:`zesFabricPortSetConfig` + * :ref:`zesFabricPortGetState` + * :ref:`zesFabricPortGetThroughput` + * :ref:`zesFabricPortGetFabricErrorCounters` + * :ref:`zesFabricPortGetMultiPortThroughput` + + +* Enumerations + + + * :ref:`zes-fabric-port-status-t` + * :ref:`zes-fabric-port-qual-issue-flags-t` + * :ref:`zes-fabric-port-failure-flags-t` + + +* Structures + + + * :ref:`zes-fabric-port-id-t` + * :ref:`zes-fabric-port-speed-t` + * :ref:`zes-fabric-port-properties-t` + * :ref:`zes-fabric-link-type-t` + * :ref:`zes-fabric-port-config-t` + * :ref:`zes-fabric-port-state-t` + * :ref:`zes-fabric-port-throughput-t` + * :ref:`zes-fabric-port-error-counters-t` + + +Fabric Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumFabricPorts: + +zesDeviceEnumFabricPorts +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumFabricPorts + :project: LevelZero + + +.. _zesFabricPortGetProperties: + +zesFabricPortGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFabricPortGetProperties + :project: LevelZero + + +.. _zesFabricPortGetLinkType: + +zesFabricPortGetLinkType +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFabricPortGetLinkType + :project: LevelZero + + +.. _zesFabricPortGetConfig: + +zesFabricPortGetConfig +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFabricPortGetConfig + :project: LevelZero + + +.. _zesFabricPortSetConfig: + +zesFabricPortSetConfig +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFabricPortSetConfig + :project: LevelZero + + +.. _zesFabricPortGetState: + +zesFabricPortGetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFabricPortGetState + :project: LevelZero + + +.. _zesFabricPortGetThroughput: + +zesFabricPortGetThroughput +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFabricPortGetThroughput + :project: LevelZero + + +.. _zesFabricPortGetFabricErrorCounters: + +zesFabricPortGetFabricErrorCounters +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFabricPortGetFabricErrorCounters + :project: LevelZero + + +.. _zesFabricPortGetMultiPortThroughput: + +zesFabricPortGetMultiPortThroughput +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFabricPortGetMultiPortThroughput + :project: LevelZero + + + +Fabric Enums +------------------------------------------------------------------------------ + + +.. _zes-fabric-port-status-t: + +zes_fabric_port_status_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_fabric_port_status_t + :project: LevelZero + + +.. _zes-fabric-port-qual-issue-flags-t: + +zes_fabric_port_qual_issue_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_fabric_port_qual_issue_flag_t + :project: LevelZero + + +.. _zes-fabric-port-failure-flags-t: + +zes_fabric_port_failure_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_fabric_port_failure_flag_t + :project: LevelZero + + +Fabric Structures +------------------------------------------------------------------------------ + +.. _zes-fabric-port-id-t: + +zes_fabric_port_id_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fabric_port_id_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-fabric-port-speed-t: + +zes_fabric_port_speed_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fabric_port_speed_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-fabric-port-properties-t: + +zes_fabric_port_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fabric_port_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-fabric-link-type-t: + +zes_fabric_link_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fabric_link_type_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-fabric-port-config-t: + +zes_fabric_port_config_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fabric_port_config_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-fabric-port-state-t: + +zes_fabric_port_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fabric_port_state_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-fabric-port-throughput-t: + +zes_fabric_port_throughput_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fabric_port_throughput_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-fabric-port-error-counters-t: + +zes_fabric_port_error_counters_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fabric_port_error_counters_t + :project: LevelZero + :members: + :undoc-members: + + + + +Fan +============================================================ +* Functions + + + * :ref:`zesDeviceEnumFans` + * :ref:`zesFanGetProperties` + * :ref:`zesFanGetConfig` + * :ref:`zesFanSetDefaultMode` + * :ref:`zesFanSetFixedSpeedMode` + * :ref:`zesFanSetSpeedTableMode` + * :ref:`zesFanGetState` + + +* Enumerations + + + * :ref:`zes-fan-speed-mode-t` + * :ref:`zes-fan-speed-units-t` + + +* Structures + + + * :ref:`zes-fan-speed-t` + * :ref:`zes-fan-temp-speed-t` + * :ref:`zes-fan-speed-table-t` + * :ref:`zes-fan-properties-t` + * :ref:`zes-fan-config-t` + + +Fan Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumFans: + +zesDeviceEnumFans +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumFans + :project: LevelZero + + +.. _zesFanGetProperties: + +zesFanGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFanGetProperties + :project: LevelZero + + +.. _zesFanGetConfig: + +zesFanGetConfig +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFanGetConfig + :project: LevelZero + + +.. _zesFanSetDefaultMode: + +zesFanSetDefaultMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFanSetDefaultMode + :project: LevelZero + + +.. _zesFanSetFixedSpeedMode: + +zesFanSetFixedSpeedMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFanSetFixedSpeedMode + :project: LevelZero + + +.. _zesFanSetSpeedTableMode: + +zesFanSetSpeedTableMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFanSetSpeedTableMode + :project: LevelZero + + +.. _zesFanGetState: + +zesFanGetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFanGetState + :project: LevelZero + + + +Fan Enums +------------------------------------------------------------------------------ + + +.. _zes-fan-speed-mode-t: + +zes_fan_speed_mode_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_fan_speed_mode_t + :project: LevelZero + + +.. _zes-fan-speed-units-t: + +zes_fan_speed_units_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_fan_speed_units_t + :project: LevelZero + + +Fan Structures +------------------------------------------------------------------------------ + +.. _zes-fan-speed-t: + +zes_fan_speed_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fan_speed_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-fan-temp-speed-t: + +zes_fan_temp_speed_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fan_temp_speed_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-fan-speed-table-t: + +zes_fan_speed_table_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fan_speed_table_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-fan-properties-t: + +zes_fan_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fan_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-fan-config-t: + +zes_fan_config_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_fan_config_t + :project: LevelZero + :members: + :undoc-members: + + + + +Firmware +============================================================ +* Functions + + + * :ref:`zesDeviceEnumFirmwares` + * :ref:`zesFirmwareGetProperties` + * :ref:`zesFirmwareFlash` + * :ref:`zesFirmwareGetFlashProgress` + * :ref:`zesFirmwareGetConsoleLogs` + + + + +* Structures + + + * :ref:`zes-firmware-properties-t` + + +Firmware Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumFirmwares: + +zesDeviceEnumFirmwares +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumFirmwares + :project: LevelZero + + +.. _zesFirmwareGetProperties: + +zesFirmwareGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFirmwareGetProperties + :project: LevelZero + + +.. _zesFirmwareFlash: + +zesFirmwareFlash +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFirmwareFlash + :project: LevelZero + + +.. _zesFirmwareGetFlashProgress: + +zesFirmwareGetFlashProgress +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFirmwareGetFlashProgress + :project: LevelZero + + +.. _zesFirmwareGetConsoleLogs: + +zesFirmwareGetConsoleLogs +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFirmwareGetConsoleLogs + :project: LevelZero + + + + +Firmware Structures +------------------------------------------------------------------------------ + +.. _zes-firmware-properties-t: + +zes_firmware_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_firmware_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Frequency +============================================================ +* Functions + + + * :ref:`zesDeviceEnumFrequencyDomains` + * :ref:`zesFrequencyGetProperties` + * :ref:`zesFrequencyGetAvailableClocks` + * :ref:`zesFrequencyGetRange` + * :ref:`zesFrequencySetRange` + * :ref:`zesFrequencyGetState` + * :ref:`zesFrequencyGetThrottleTime` + * :ref:`zesFrequencyOcGetCapabilities` + * :ref:`zesFrequencyOcGetFrequencyTarget` + * :ref:`zesFrequencyOcSetFrequencyTarget` + * :ref:`zesFrequencyOcGetVoltageTarget` + * :ref:`zesFrequencyOcSetVoltageTarget` + * :ref:`zesFrequencyOcSetMode` + * :ref:`zesFrequencyOcGetMode` + * :ref:`zesFrequencyOcGetIccMax` + * :ref:`zesFrequencyOcSetIccMax` + * :ref:`zesFrequencyOcGetTjMax` + * :ref:`zesFrequencyOcSetTjMax` + + +* Enumerations + + + * :ref:`zes-freq-domain-t` + * :ref:`zes-freq-throttle-reason-flags-t` + * :ref:`zes-oc-mode-t` + + +* Structures + + + * :ref:`zes-freq-properties-t` + * :ref:`zes-freq-range-t` + * :ref:`zes-freq-state-t` + * :ref:`zes-freq-throttle-time-t` + * :ref:`zes-oc-capabilities-t` + + +Frequency Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumFrequencyDomains: + +zesDeviceEnumFrequencyDomains +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumFrequencyDomains + :project: LevelZero + + +.. _zesFrequencyGetProperties: + +zesFrequencyGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyGetProperties + :project: LevelZero + + +.. _zesFrequencyGetAvailableClocks: + +zesFrequencyGetAvailableClocks +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyGetAvailableClocks + :project: LevelZero + + +.. _zesFrequencyGetRange: + +zesFrequencyGetRange +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyGetRange + :project: LevelZero + + +.. _zesFrequencySetRange: + +zesFrequencySetRange +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencySetRange + :project: LevelZero + + +.. _zesFrequencyGetState: + +zesFrequencyGetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyGetState + :project: LevelZero + + +.. _zesFrequencyGetThrottleTime: + +zesFrequencyGetThrottleTime +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyGetThrottleTime + :project: LevelZero + + +.. _zesFrequencyOcGetCapabilities: + +zesFrequencyOcGetCapabilities +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyOcGetCapabilities + :project: LevelZero + + +.. _zesFrequencyOcGetFrequencyTarget: + +zesFrequencyOcGetFrequencyTarget +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyOcGetFrequencyTarget + :project: LevelZero + + +.. _zesFrequencyOcSetFrequencyTarget: + +zesFrequencyOcSetFrequencyTarget +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyOcSetFrequencyTarget + :project: LevelZero + + +.. _zesFrequencyOcGetVoltageTarget: + +zesFrequencyOcGetVoltageTarget +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyOcGetVoltageTarget + :project: LevelZero + + +.. _zesFrequencyOcSetVoltageTarget: + +zesFrequencyOcSetVoltageTarget +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyOcSetVoltageTarget + :project: LevelZero + + +.. _zesFrequencyOcSetMode: + +zesFrequencyOcSetMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyOcSetMode + :project: LevelZero + + +.. _zesFrequencyOcGetMode: + +zesFrequencyOcGetMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyOcGetMode + :project: LevelZero + + +.. _zesFrequencyOcGetIccMax: + +zesFrequencyOcGetIccMax +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyOcGetIccMax + :project: LevelZero + + +.. _zesFrequencyOcSetIccMax: + +zesFrequencyOcSetIccMax +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyOcSetIccMax + :project: LevelZero + + +.. _zesFrequencyOcGetTjMax: + +zesFrequencyOcGetTjMax +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyOcGetTjMax + :project: LevelZero + + +.. _zesFrequencyOcSetTjMax: + +zesFrequencyOcSetTjMax +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFrequencyOcSetTjMax + :project: LevelZero + + + +Frequency Enums +------------------------------------------------------------------------------ + + +.. _zes-freq-domain-t: + +zes_freq_domain_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_freq_domain_t + :project: LevelZero + + +.. _zes-freq-throttle-reason-flags-t: + +zes_freq_throttle_reason_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_freq_throttle_reason_flag_t + :project: LevelZero + + +.. _zes-oc-mode-t: + +zes_oc_mode_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_oc_mode_t + :project: LevelZero + + +Frequency Structures +------------------------------------------------------------------------------ + +.. _zes-freq-properties-t: + +zes_freq_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_freq_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-freq-range-t: + +zes_freq_range_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_freq_range_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-freq-state-t: + +zes_freq_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_freq_state_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-freq-throttle-time-t: + +zes_freq_throttle_time_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_freq_throttle_time_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-oc-capabilities-t: + +zes_oc_capabilities_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_oc_capabilities_t + :project: LevelZero + :members: + :undoc-members: + + + + +Led +============================================================ +* Functions + + + * :ref:`zesDeviceEnumLeds` + * :ref:`zesLedGetProperties` + * :ref:`zesLedGetState` + * :ref:`zesLedSetState` + * :ref:`zesLedSetColor` + + + + +* Structures + + + * :ref:`zes-led-properties-t` + * :ref:`zes-led-color-t` + * :ref:`zes-led-state-t` + + +Led Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumLeds: + +zesDeviceEnumLeds +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumLeds + :project: LevelZero + + +.. _zesLedGetProperties: + +zesLedGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesLedGetProperties + :project: LevelZero + + +.. _zesLedGetState: + +zesLedGetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesLedGetState + :project: LevelZero + + +.. _zesLedSetState: + +zesLedSetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesLedSetState + :project: LevelZero + + +.. _zesLedSetColor: + +zesLedSetColor +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesLedSetColor + :project: LevelZero + + + + +Led Structures +------------------------------------------------------------------------------ + +.. _zes-led-properties-t: + +zes_led_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_led_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-led-color-t: + +zes_led_color_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_led_color_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-led-state-t: + +zes_led_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_led_state_t + :project: LevelZero + :members: + :undoc-members: + + + + +Memory +============================================================ +* Functions + + + * :ref:`zesDeviceEnumMemoryModules` + * :ref:`zesMemoryGetProperties` + * :ref:`zesMemoryGetState` + * :ref:`zesMemoryGetBandwidth` + + +* Enumerations + + + * :ref:`zes-mem-type-t` + * :ref:`zes-mem-loc-t` + * :ref:`zes-mem-health-t` + + +* Structures + + + * :ref:`zes-mem-properties-t` + * :ref:`zes-mem-state-t` + * :ref:`zes-mem-bandwidth-t` + * :ref:`zes-mem-ext-bandwidth-t` + + +Memory Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumMemoryModules: + +zesDeviceEnumMemoryModules +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumMemoryModules + :project: LevelZero + + +.. _zesMemoryGetProperties: + +zesMemoryGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesMemoryGetProperties + :project: LevelZero + + +.. _zesMemoryGetState: + +zesMemoryGetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesMemoryGetState + :project: LevelZero + + +.. _zesMemoryGetBandwidth: + +zesMemoryGetBandwidth +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesMemoryGetBandwidth + :project: LevelZero + + + +Memory Enums +------------------------------------------------------------------------------ + + +.. _zes-mem-type-t: + +zes_mem_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_mem_type_t + :project: LevelZero + + +.. _zes-mem-loc-t: + +zes_mem_loc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_mem_loc_t + :project: LevelZero + + +.. _zes-mem-health-t: + +zes_mem_health_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_mem_health_t + :project: LevelZero + + +Memory Structures +------------------------------------------------------------------------------ + +.. _zes-mem-properties-t: + +zes_mem_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_mem_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-mem-state-t: + +zes_mem_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_mem_state_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-mem-bandwidth-t: + +zes_mem_bandwidth_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_mem_bandwidth_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-mem-ext-bandwidth-t: + +zes_mem_ext_bandwidth_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_mem_ext_bandwidth_t + :project: LevelZero + :members: + :undoc-members: + + + + +Performance +============================================================ +* Functions + + + * :ref:`zesDeviceEnumPerformanceFactorDomains` + * :ref:`zesPerformanceFactorGetProperties` + * :ref:`zesPerformanceFactorGetConfig` + * :ref:`zesPerformanceFactorSetConfig` + + + + +* Structures + + + * :ref:`zes-perf-properties-t` + + +Performance Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumPerformanceFactorDomains: + +zesDeviceEnumPerformanceFactorDomains +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumPerformanceFactorDomains + :project: LevelZero + + +.. _zesPerformanceFactorGetProperties: + +zesPerformanceFactorGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPerformanceFactorGetProperties + :project: LevelZero + + +.. _zesPerformanceFactorGetConfig: + +zesPerformanceFactorGetConfig +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPerformanceFactorGetConfig + :project: LevelZero + + +.. _zesPerformanceFactorSetConfig: + +zesPerformanceFactorSetConfig +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPerformanceFactorSetConfig + :project: LevelZero + + + + +Performance Structures +------------------------------------------------------------------------------ + +.. _zes-perf-properties-t: + +zes_perf_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_perf_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Power +============================================================ +* Functions + + + * :ref:`zesDeviceEnumPowerDomains` + * :ref:`zesDeviceGetCardPowerDomain` + * :ref:`zesPowerGetProperties` + * :ref:`zesPowerGetEnergyCounter` + * :ref:`zesPowerGetLimits` + * :ref:`zesPowerSetLimits` + * :ref:`zesPowerGetEnergyThreshold` + * :ref:`zesPowerSetEnergyThreshold` + + +* Enumerations + + + * :ref:`zes-power-domain-t` + * :ref:`zes-power-level-t` + * :ref:`zes-power-source-t` + * :ref:`zes-limit-unit-t` + + +* Structures + + + * :ref:`zes-power-properties-t` + * :ref:`zes-power-energy-counter-t` + * :ref:`zes-power-sustained-limit-t` + * :ref:`zes-power-burst-limit-t` + * :ref:`zes-power-peak-limit-t` + * :ref:`zes-energy-threshold-t` + + +Power Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumPowerDomains: + +zesDeviceEnumPowerDomains +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumPowerDomains + :project: LevelZero + + +.. _zesDeviceGetCardPowerDomain: + +zesDeviceGetCardPowerDomain +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceGetCardPowerDomain + :project: LevelZero + + +.. _zesPowerGetProperties: + +zesPowerGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPowerGetProperties + :project: LevelZero + + +.. _zesPowerGetEnergyCounter: + +zesPowerGetEnergyCounter +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPowerGetEnergyCounter + :project: LevelZero + + +.. _zesPowerGetLimits: + +zesPowerGetLimits +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPowerGetLimits + :project: LevelZero + + +.. _zesPowerSetLimits: + +zesPowerSetLimits +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPowerSetLimits + :project: LevelZero + + +.. _zesPowerGetEnergyThreshold: + +zesPowerGetEnergyThreshold +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPowerGetEnergyThreshold + :project: LevelZero + + +.. _zesPowerSetEnergyThreshold: + +zesPowerSetEnergyThreshold +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPowerSetEnergyThreshold + :project: LevelZero + + + +Power Enums +------------------------------------------------------------------------------ + + +.. _zes-power-domain-t: + +zes_power_domain_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_power_domain_t + :project: LevelZero + + +.. _zes-power-level-t: + +zes_power_level_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_power_level_t + :project: LevelZero + + +.. _zes-power-source-t: + +zes_power_source_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_power_source_t + :project: LevelZero + + +.. _zes-limit-unit-t: + +zes_limit_unit_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_limit_unit_t + :project: LevelZero + + +Power Structures +------------------------------------------------------------------------------ + +.. _zes-power-properties-t: + +zes_power_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_power_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-power-energy-counter-t: + +zes_power_energy_counter_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_power_energy_counter_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-power-sustained-limit-t: + +zes_power_sustained_limit_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_power_sustained_limit_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-power-burst-limit-t: + +zes_power_burst_limit_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_power_burst_limit_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-power-peak-limit-t: + +zes_power_peak_limit_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_power_peak_limit_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-energy-threshold-t: + +zes_energy_threshold_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_energy_threshold_t + :project: LevelZero + :members: + :undoc-members: + + + + +Psu +============================================================ +* Functions + + + * :ref:`zesDeviceEnumPsus` + * :ref:`zesPsuGetProperties` + * :ref:`zesPsuGetState` + + +* Enumerations + + + * :ref:`zes-psu-voltage-status-t` + + +* Structures + + + * :ref:`zes-psu-properties-t` + * :ref:`zes-psu-state-t` + + +Psu Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumPsus: + +zesDeviceEnumPsus +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumPsus + :project: LevelZero + + +.. _zesPsuGetProperties: + +zesPsuGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPsuGetProperties + :project: LevelZero + + +.. _zesPsuGetState: + +zesPsuGetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPsuGetState + :project: LevelZero + + + +Psu Enums +------------------------------------------------------------------------------ + + +.. _zes-psu-voltage-status-t: + +zes_psu_voltage_status_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_psu_voltage_status_t + :project: LevelZero + + +Psu Structures +------------------------------------------------------------------------------ + +.. _zes-psu-properties-t: + +zes_psu_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_psu_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-psu-state-t: + +zes_psu_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_psu_state_t + :project: LevelZero + :members: + :undoc-members: + + + + +Ras +============================================================ +* Functions + + + * :ref:`zesDeviceEnumRasErrorSets` + * :ref:`zesRasGetProperties` + * :ref:`zesRasGetConfig` + * :ref:`zesRasSetConfig` + * :ref:`zesRasGetState` + + +* Enumerations + + + * :ref:`zes-ras-error-type-t` + * :ref:`zes-ras-error-cat-t` + + +* Structures + + + * :ref:`zes-ras-properties-t` + * :ref:`zes-ras-state-t` + * :ref:`zes-ras-config-t` + + +Ras Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumRasErrorSets: + +zesDeviceEnumRasErrorSets +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumRasErrorSets + :project: LevelZero + + +.. _zesRasGetProperties: + +zesRasGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesRasGetProperties + :project: LevelZero + + +.. _zesRasGetConfig: + +zesRasGetConfig +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesRasGetConfig + :project: LevelZero + + +.. _zesRasSetConfig: + +zesRasSetConfig +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesRasSetConfig + :project: LevelZero + + +.. _zesRasGetState: + +zesRasGetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesRasGetState + :project: LevelZero + + + +Ras Enums +------------------------------------------------------------------------------ + + +.. _zes-ras-error-type-t: + +zes_ras_error_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_ras_error_type_t + :project: LevelZero + + +.. _zes-ras-error-cat-t: + +zes_ras_error_cat_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_ras_error_cat_t + :project: LevelZero + + +Ras Structures +------------------------------------------------------------------------------ + +.. _zes-ras-properties-t: + +zes_ras_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_ras_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-ras-state-t: + +zes_ras_state_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_ras_state_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-ras-config-t: + +zes_ras_config_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_ras_config_t + :project: LevelZero + :members: + :undoc-members: + + + + +Scheduler +============================================================ +* Functions + + + * :ref:`zesDeviceEnumSchedulers` + * :ref:`zesSchedulerGetProperties` + * :ref:`zesSchedulerGetCurrentMode` + * :ref:`zesSchedulerGetTimeoutModeProperties` + * :ref:`zesSchedulerGetTimesliceModeProperties` + * :ref:`zesSchedulerSetTimeoutMode` + * :ref:`zesSchedulerSetTimesliceMode` + * :ref:`zesSchedulerSetExclusiveMode` + * :ref:`zesSchedulerSetComputeUnitDebugMode` + + +* Enumerations + + + * :ref:`zes-sched-mode-t` + + +* Structures + + + * :ref:`zes-sched-properties-t` + * :ref:`zes-sched-timeout-properties-t` + * :ref:`zes-sched-timeslice-properties-t` + + +Scheduler Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumSchedulers: + +zesDeviceEnumSchedulers +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumSchedulers + :project: LevelZero + + +.. _zesSchedulerGetProperties: + +zesSchedulerGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesSchedulerGetProperties + :project: LevelZero + + +.. _zesSchedulerGetCurrentMode: + +zesSchedulerGetCurrentMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesSchedulerGetCurrentMode + :project: LevelZero + + +.. _zesSchedulerGetTimeoutModeProperties: + +zesSchedulerGetTimeoutModeProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesSchedulerGetTimeoutModeProperties + :project: LevelZero + + +.. _zesSchedulerGetTimesliceModeProperties: + +zesSchedulerGetTimesliceModeProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesSchedulerGetTimesliceModeProperties + :project: LevelZero + + +.. _zesSchedulerSetTimeoutMode: + +zesSchedulerSetTimeoutMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesSchedulerSetTimeoutMode + :project: LevelZero + + +.. _zesSchedulerSetTimesliceMode: + +zesSchedulerSetTimesliceMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesSchedulerSetTimesliceMode + :project: LevelZero + + +.. _zesSchedulerSetExclusiveMode: + +zesSchedulerSetExclusiveMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesSchedulerSetExclusiveMode + :project: LevelZero + + +.. _zesSchedulerSetComputeUnitDebugMode: + +zesSchedulerSetComputeUnitDebugMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesSchedulerSetComputeUnitDebugMode + :project: LevelZero + + + +Scheduler Enums +------------------------------------------------------------------------------ + + +.. _zes-sched-mode-t: + +zes_sched_mode_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_sched_mode_t + :project: LevelZero + + +Scheduler Structures +------------------------------------------------------------------------------ + +.. _zes-sched-properties-t: + +zes_sched_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_sched_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-sched-timeout-properties-t: + +zes_sched_timeout_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_sched_timeout_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-sched-timeslice-properties-t: + +zes_sched_timeslice_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_sched_timeslice_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Standby +============================================================ +* Functions + + + * :ref:`zesDeviceEnumStandbyDomains` + * :ref:`zesStandbyGetProperties` + * :ref:`zesStandbyGetMode` + * :ref:`zesStandbySetMode` + + +* Enumerations + + + * :ref:`zes-standby-type-t` + * :ref:`zes-standby-promo-mode-t` + + +* Structures + + + * :ref:`zes-standby-properties-t` + + +Standby Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumStandbyDomains: + +zesDeviceEnumStandbyDomains +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumStandbyDomains + :project: LevelZero + + +.. _zesStandbyGetProperties: + +zesStandbyGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesStandbyGetProperties + :project: LevelZero + + +.. _zesStandbyGetMode: + +zesStandbyGetMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesStandbyGetMode + :project: LevelZero + + +.. _zesStandbySetMode: + +zesStandbySetMode +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesStandbySetMode + :project: LevelZero + + + +Standby Enums +------------------------------------------------------------------------------ + + +.. _zes-standby-type-t: + +zes_standby_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_standby_type_t + :project: LevelZero + + +.. _zes-standby-promo-mode-t: + +zes_standby_promo_mode_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_standby_promo_mode_t + :project: LevelZero + + +Standby Structures +------------------------------------------------------------------------------ + +.. _zes-standby-properties-t: + +zes_standby_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_standby_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Temperature +============================================================ +* Functions + + + * :ref:`zesDeviceEnumTemperatureSensors` + * :ref:`zesTemperatureGetProperties` + * :ref:`zesTemperatureGetConfig` + * :ref:`zesTemperatureSetConfig` + * :ref:`zesTemperatureGetState` + + +* Enumerations + + + * :ref:`zes-temp-sensors-t` + + +* Structures + + + * :ref:`zes-temp-properties-t` + * :ref:`zes-temp-threshold-t` + * :ref:`zes-temp-config-t` + + +Temperature Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumTemperatureSensors: + +zesDeviceEnumTemperatureSensors +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumTemperatureSensors + :project: LevelZero + + +.. _zesTemperatureGetProperties: + +zesTemperatureGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesTemperatureGetProperties + :project: LevelZero + + +.. _zesTemperatureGetConfig: + +zesTemperatureGetConfig +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesTemperatureGetConfig + :project: LevelZero + + +.. _zesTemperatureSetConfig: + +zesTemperatureSetConfig +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesTemperatureSetConfig + :project: LevelZero + + +.. _zesTemperatureGetState: + +zesTemperatureGetState +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesTemperatureGetState + :project: LevelZero + + + +Temperature Enums +------------------------------------------------------------------------------ + + +.. _zes-temp-sensors-t: + +zes_temp_sensors_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_temp_sensors_t + :project: LevelZero + + +Temperature Structures +------------------------------------------------------------------------------ + +.. _zes-temp-properties-t: + +zes_temp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_temp_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-temp-threshold-t: + +zes_temp_threshold_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_temp_threshold_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-temp-config-t: + +zes_temp_config_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_temp_config_t + :project: LevelZero + :members: + :undoc-members: + + + + +Powerlimits +============================================================ +* Functions + + + * :ref:`zesPowerGetLimitsExt` + * :ref:`zesPowerSetLimitsExt` + + +* Enumerations + + + * :ref:`zes-power-limits-ext-version-t` + + +* Structures + + + * :ref:`zes-power-limit-ext-desc-t` + * :ref:`zes-power-ext-properties-t` + + +Powerlimits Functions +------------------------------------------------------------------------------ + + +.. _zesPowerGetLimitsExt: + +zesPowerGetLimitsExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPowerGetLimitsExt + :project: LevelZero + + +.. _zesPowerSetLimitsExt: + +zesPowerSetLimitsExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesPowerSetLimitsExt + :project: LevelZero + + + +Powerlimits Enums +------------------------------------------------------------------------------ + + +.. _zes-power-limits-ext-version-t: + +zes_power_limits_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_power_limits_ext_version_t + :project: LevelZero + + +Powerlimits Structures +------------------------------------------------------------------------------ + +.. _zes-power-limit-ext-desc-t: + +zes_power_limit_ext_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_power_limit_ext_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-power-ext-properties-t: + +zes_power_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_power_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Engineactivity +============================================================ +* Functions + + + * :ref:`zesEngineGetActivityExt` + + +* Enumerations + + + * :ref:`zes-engine-activity-ext-version-t` + + +* Structures + + + * :ref:`zes-engine-ext-properties-t` + + +Engineactivity Functions +------------------------------------------------------------------------------ + + +.. _zesEngineGetActivityExt: + +zesEngineGetActivityExt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesEngineGetActivityExt + :project: LevelZero + + + +Engineactivity Enums +------------------------------------------------------------------------------ + + +.. _zes-engine-activity-ext-version-t: + +zes_engine_activity_ext_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_engine_activity_ext_version_t + :project: LevelZero + + +Engineactivity Structures +------------------------------------------------------------------------------ + +.. _zes-engine-ext-properties-t: + +zes_engine_ext_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_engine_ext_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Rasstate +============================================================ +* Functions + + + * :ref:`zesRasGetStateExp` + * :ref:`zesRasClearStateExp` + + +* Enumerations + + + * :ref:`zes-ras-state-exp-version-t` + * :ref:`zes-ras-error-category-exp-t` + + +* Structures + + + * :ref:`zes-ras-state-exp-t` + + +Rasstate Functions +------------------------------------------------------------------------------ + + +.. _zesRasGetStateExp: + +zesRasGetStateExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesRasGetStateExp + :project: LevelZero + + +.. _zesRasClearStateExp: + +zesRasClearStateExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesRasClearStateExp + :project: LevelZero + + + +Rasstate Enums +------------------------------------------------------------------------------ + + +.. _zes-ras-state-exp-version-t: + +zes_ras_state_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_ras_state_exp_version_t + :project: LevelZero + + +.. _zes-ras-error-category-exp-t: + +zes_ras_error_category_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_ras_error_category_exp_t + :project: LevelZero + + +Rasstate Structures +------------------------------------------------------------------------------ + +.. _zes-ras-state-exp-t: + +zes_ras_state_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_ras_state_exp_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Mempageofflinestate +============================================================ +* Enumerations + + + * :ref:`zes-mem-page-offline-state-exp-version-t` + + +* Structures + + + * :ref:`zes-mem-page-offline-state-exp-t` + + + + +Mempageofflinestate Enums +------------------------------------------------------------------------------ + + +.. _zes-mem-page-offline-state-exp-version-t: + +zes_mem_page_offline_state_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_mem_page_offline_state_exp_version_t + :project: LevelZero + + +Mempageofflinestate Structures +------------------------------------------------------------------------------ + +.. _zes-mem-page-offline-state-exp-t: + +zes_mem_page_offline_state_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_mem_page_offline_state_exp_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Memorybwcountervalidbits +============================================================ +* Enumerations + + + * :ref:`zes-mem-bandwidth-counter-bits-exp-version-t` + + +* Structures + + + * :ref:`zes-mem-bandwidth-counter-bits-exp-properties-t` + + + + +Memorybwcountervalidbits Enums +------------------------------------------------------------------------------ + + +.. _zes-mem-bandwidth-counter-bits-exp-version-t: + +zes_mem_bandwidth_counter_bits_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_mem_bandwidth_counter_bits_exp_version_t + :project: LevelZero + + +Memorybwcountervalidbits Structures +------------------------------------------------------------------------------ + +.. _zes-mem-bandwidth-counter-bits-exp-properties-t: + +zes_mem_bandwidth_counter_bits_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_mem_bandwidth_counter_bits_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + + + +Powerdomainproperties +============================================================ +* Enumerations + + + * :ref:`zes-power-domain-properties-exp-version-t` + + +* Structures + + + * :ref:`zes-power-domain-exp-properties-t` + + + + +Powerdomainproperties Enums +------------------------------------------------------------------------------ + + +.. _zes-power-domain-properties-exp-version-t: + +zes_power_domain_properties_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_power_domain_properties_exp_version_t + :project: LevelZero + + +Powerdomainproperties Structures +------------------------------------------------------------------------------ + +.. _zes-power-domain-exp-properties-t: + +zes_power_domain_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_power_domain_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Firmwaresecurityversion +============================================================ +* Functions + + + * :ref:`zesFirmwareGetSecurityVersionExp` + * :ref:`zesFirmwareSetSecurityVersionExp` + + +* Enumerations + + + * :ref:`zes-firmware-security-exp-version-t` + + + + +Firmwaresecurityversion Functions +------------------------------------------------------------------------------ + + +.. _zesFirmwareGetSecurityVersionExp: + +zesFirmwareGetSecurityVersionExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFirmwareGetSecurityVersionExp + :project: LevelZero + + +.. _zesFirmwareSetSecurityVersionExp: + +zesFirmwareSetSecurityVersionExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesFirmwareSetSecurityVersionExp + :project: LevelZero + + + +Firmwaresecurityversion Enums +------------------------------------------------------------------------------ + + +.. _zes-firmware-security-exp-version-t: + +zes_firmware_security_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_firmware_security_exp_version_t + :project: LevelZero + + + + + +Sysmandevicemapping +============================================================ +* Functions + + + * :ref:`zesDeviceGetSubDevicePropertiesExp` + * :ref:`zesDriverGetDeviceByUuidExp` + + +* Enumerations + + + * :ref:`zes-sysman-device-mapping-exp-version-t` + + +* Structures + + + * :ref:`zes-subdevice-exp-properties-t` + + +Sysmandevicemapping Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceGetSubDevicePropertiesExp: + +zesDeviceGetSubDevicePropertiesExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceGetSubDevicePropertiesExp + :project: LevelZero + + +.. _zesDriverGetDeviceByUuidExp: + +zesDriverGetDeviceByUuidExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDriverGetDeviceByUuidExp + :project: LevelZero + + + +Sysmandevicemapping Enums +------------------------------------------------------------------------------ + + +.. _zes-sysman-device-mapping-exp-version-t: + +zes_sysman_device_mapping_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_sysman_device_mapping_exp_version_t + :project: LevelZero + + +Sysmandevicemapping Structures +------------------------------------------------------------------------------ + +.. _zes-subdevice-exp-properties-t: + +zes_subdevice_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_subdevice_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Virtualfunctionmanagement +============================================================ +* Functions + + + * :ref:`zesDeviceEnumEnabledVFExp` + * :ref:`zesVFManagementGetVFCapabilitiesExp` + * :ref:`zesVFManagementGetVFMemoryUtilizationExp` + * :ref:`zesVFManagementGetVFEngineUtilizationExp` + + +* Enumerations + + + * :ref:`zes-vf-management-exp-version-t` + + +* Structures + + + * :ref:`zes-vf-exp-capabilities-t` + * :ref:`zes-vf-util-mem-exp-t` + * :ref:`zes-vf-util-engine-exp-t` + + +Virtualfunctionmanagement Functions +------------------------------------------------------------------------------ + + +.. _zesDeviceEnumEnabledVFExp: + +zesDeviceEnumEnabledVFExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesDeviceEnumEnabledVFExp + :project: LevelZero + + +.. _zesVFManagementGetVFCapabilitiesExp: + +zesVFManagementGetVFCapabilitiesExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesVFManagementGetVFCapabilitiesExp + :project: LevelZero + + +.. _zesVFManagementGetVFMemoryUtilizationExp: + +zesVFManagementGetVFMemoryUtilizationExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesVFManagementGetVFMemoryUtilizationExp + :project: LevelZero + + +.. _zesVFManagementGetVFEngineUtilizationExp: + +zesVFManagementGetVFEngineUtilizationExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zesVFManagementGetVFEngineUtilizationExp + :project: LevelZero + + + +Virtualfunctionmanagement Enums +------------------------------------------------------------------------------ + + +.. _zes-vf-management-exp-version-t: + +zes_vf_management_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zes_vf_management_exp_version_t + :project: LevelZero + + +Virtualfunctionmanagement Structures +------------------------------------------------------------------------------ + +.. _zes-vf-exp-capabilities-t: + +zes_vf_exp_capabilities_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_vf_exp_capabilities_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-vf-util-mem-exp-t: + +zes_vf_util_mem_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_vf_util_mem_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _zes-vf-util-engine-exp-t: + +zes_vf_util_engine_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zes_vf_util_engine_exp_t + :project: LevelZero + :members: + :undoc-members: + + diff --git a/level-zero/1.10/_sources/tools/EXT_Exp_APITracing.rst b/level-zero/1.10/_sources/tools/EXT_Exp_APITracing.rst new file mode 100644 index 0000000..4d6a1e0 --- /dev/null +++ b/level-zero/1.10/_sources/tools/EXT_Exp_APITracing.rst @@ -0,0 +1,33 @@ + +:orphan: + +.. _ZET_experimental_api_tracing: + +========================= + API Tracing Extension +========================= + +API +---- + +* Functions + + + * :ref:`zetTracerExpCreate` + * :ref:`zetTracerExpDestroy` + * :ref:`zetTracerExpSetPrologues` + * :ref:`zetTracerExpSetEpilogues` + * :ref:`zetTracerExpSetEnabled` + + +* Enumerations + + + * :ref:`zet-api-tracing-exp-version-t` + + +* Structures + + + * :ref:`zet-tracer-exp-desc-t` + diff --git a/level-zero/1.10/_sources/tools/EXT_Exp_ConcurrentMetricGroup.rst b/level-zero/1.10/_sources/tools/EXT_Exp_ConcurrentMetricGroup.rst new file mode 100644 index 0000000..5d44b16 --- /dev/null +++ b/level-zero/1.10/_sources/tools/EXT_Exp_ConcurrentMetricGroup.rst @@ -0,0 +1,60 @@ + +:orphan: + +.. _ZET_experimental_concurrent_metric_groups: + +========================================== +Concurrent Metric Groups Experimental Extension +========================================== + +API +---- + +* Functions + + * :ref:`zetDeviceGetConcurrentMetricGroupsExp` + +Concurrent Metric Groups +~~~~~~~~~~~~~~~~~~~~~~~~ + +Metric groups enumerated or created cannot be collected or activated concurrently if the metric groups use shared HW resources. +Currently Metric "Domains" are used to determine if a metric group can be collected along with another metric group. +Since Metric "Domains" are at a metric group level, it cannot represent metric level HW dependencies. +This API replaces using "domain" property of metric group to determine independent HW usage and provides sets of metric groups which could be collected concurrently. +:ref:`zetDeviceGetConcurrentMetricGroupsExp` allows an input list of metric groups to be re-arranged to sequential sets of metric groups which could be collected concurrently. +This API also allows the application to calculate the number of replays or workload executions necessary to collect a set of overlapping metric groups. + + +Sample Code +------------ + +The following pseudo-code shows how an application could query for sets of concurrent metric groups within a list of metric groups + +.. parsed-literal:: + + // Input metric group count; + uint32_t inputMetricGroupCount; + + // Input and output list of metric groups + zet_metric_group_handle_t * phMetricGroups; + + // Output concurrent group information + uint32_t concurrentGroupCount = 0; + + // Get number of concurrent groups / number of replays necessary + :ref:`zetDeviceGetConcurrentMetricGroupsExp`\(hDevice, inputMetricGroupCount, phMetricGroups, &concurrentGroupCount, nullptr); + + // Allocate for count per concurrent group + uint32_t * pCountPerConcurrentGroup = malloc(sizeof(uint32_t) * concurrentGroupCount); + + // Retrieve the rearranged metric groups along with the count per concurrent group + :ref:`zetDeviceGetConcurrentMetricGroupsExp`\(hDevice, inputMetricGroupCount, phMetricGroups, &concurrentGroupCount, pCountPerConcurrentGroup); + + // Activate the concurrent groups and Replay the workload + for(uint32_t concurrentGroupIndex = 0; concurrentGroupIndex < concurrentGroupCount; concurrentGroupIndex ++){ + :ref:`zetContextActivateMetricGroups`\(hContext, hDevice, pCountPerConcurrentGroup[concurrentGroupIndex], phMetricGroups); + + // run workload + + phMetricGroups += pCountPerConcurrentGroup[concurrentGroupIndex]; + } \ No newline at end of file diff --git a/level-zero/1.10/_sources/tools/EXT_Exp_GlobalTimestamps.rst b/level-zero/1.10/_sources/tools/EXT_Exp_GlobalTimestamps.rst new file mode 100644 index 0000000..68157a7 --- /dev/null +++ b/level-zero/1.10/_sources/tools/EXT_Exp_GlobalTimestamps.rst @@ -0,0 +1,19 @@ + +:orphan: + +.. _ZET_experimental_global_metric_timestamps: + +========================================== +Global Metrics Timestamps Extension +========================================== + +API +---- + +* Structures + + * :ref:`zet-metric-global-timestamps-resolution-exp-t` + +* Functions + + * :ref:`zetMetricGroupGetGlobalTimestampsExp` \ No newline at end of file diff --git a/level-zero/1.10/_sources/tools/EXT_Exp_MetricExportData.rst b/level-zero/1.10/_sources/tools/EXT_Exp_MetricExportData.rst new file mode 100644 index 0000000..3779cdc --- /dev/null +++ b/level-zero/1.10/_sources/tools/EXT_Exp_MetricExportData.rst @@ -0,0 +1,54 @@ + +:orphan: + +.. _ZET_experimental_metric_export_data: + +========================================== +Metrics Export Data Experimental Extension +========================================== + +API +---- + +* Structures + + * :ref:`zet-metric-calculate-exp-desc-t` + +* Functions + + * :ref:`zetMetricGroupGetExportDataExp` + * :ref:`zetMetricGroupCalculateMetricExportDataExp` + +Sample Code +------------ + +The following code shows how to export metrics raw data for a metric group. + +.. parsed-literal:: + + // Get size for export data + size_t exportDataSize = 0; + :ref:`zetMetricGroupGetExportDataExp`\(hMetricGroup, rawData, rawDataSize, &exportDataSize, nullptr); + + // Allocate buffer for export data + uint8_t* pExportData = malloc(exportDataSize); + + // Retrieve export data + :ref:`zetMetricGroupGetExportDataExp`\(hMetricGroup, rawData, rawDataSize, &exportDataSize, pExportData); + + +The following code shows how to perform metrics calculation of collected data, which can be done in a different system than where data was collected. + +.. parsed-literal:: + + // Get data count and total metric count + :ref:`zet-metric-group-calculation-type-t` type = :ref:`ZET_METRIC_GROUP_CALCULATION_TYPE_METRIC_VALUES `\; + :ref:`zet-metric-calculate-exp-desc-t` calculateDesc; + calculateDesc.rawReportSkipCount = 0; + :ref:`zetMetricGroupCalculateMetricExportDataExp`\(hDriver, type, exportDataSize, pExportData, &calculateDesc, &dataCount, &totalMetricCount, nullptr, nullptr); + + void* pMetricCounts = malloc(dataCount * sizeof(uint32_t)); + void* pMetricValues = malloc(totalMetricCount * sizeof(zet_typed_value_t)); + + // Get metric counts and metric values + :ref:`zetMetricGroupCalculateMetricExportDataExp`\(hDriver, type, exportDataSize, pExportData, &calculateDesc, &dataCount, &totalMetricCount, pMetricCounts, pMetricValues); diff --git a/level-zero/1.10/_sources/tools/EXT_Exp_MetricProgrammable.rst b/level-zero/1.10/_sources/tools/EXT_Exp_MetricProgrammable.rst new file mode 100644 index 0000000..531df1e --- /dev/null +++ b/level-zero/1.10/_sources/tools/EXT_Exp_MetricProgrammable.rst @@ -0,0 +1,115 @@ + +:orphan: + +.. _ZET_experimental_programmable_metrics: + +========================================== +Metric Programmable Experimental Extension +========================================== + +API +---- +* Enumerations + + * :ref:`zet-metric-programmable-param-type-exp-t` + * :ref:`zet-value-info-type-exp-t` + * :ref:`zet-metric-programmable-exp-version-t` + +* Structures + + * :ref:`zet-metric-programmable-exp-properties-t` + * :ref:`zet-metric-programmable-param-info-exp-t` + * :ref:`zet-metric-programmable-param-value-exp-t` + * :ref:`zet-metric-programmable-param-value-info-exp-t` + * :ref:`zet-value-info-exp-t` + * :ref:`zet-value-uint64-range-exp-t` + +* Functions + + * :ref:`zetMetricProgrammableGetExp` + * :ref:`zetMetricProgrammableGetPropertiesExp` + * :ref:`zetMetricProgrammableGetParamInfoExp` + * :ref:`zetMetricProgrammableGetParamValueInfoExp` + * :ref:`zetMetricCreateFromProgrammableExp` + * :ref:`zetDeviceCreateMetricGroupsFromMetricsExp` + * :ref:`zetMetricGroupAddMetricExp` + * :ref:`zetMetricGroupRemoveMetricExp` + * :ref:`zetMetricGroupCloseExp` + * :ref:`zetMetricDestroyExp` + * :ref:`zetMetricGroupDestroyExp` + +Metric Programmable +~~~~~~~~~~~~~~~~~~~ + +Application can use :ref:`zetMetricGroupGet` to enumerate the list of metric groups and :ref:`zetMetricGet` for the metrics available for collection. +However Applications may also want to collect custom metrics which are not listed as part of the enumeration. +This is made possible by making a list of programmable metrics available to the application, so that it may choose different parameter values for preparing custom metrics. + +Sample Code +------------ + +The following pseudo-code demonstrates how programmable metrics could be enumerated and custom values could be set to the metric parameters. + +.. parsed-literal:: + + zet_metric_handle_t * metricHandles = null_ptr; + uint32_t metricHandleCount = 0; + + // Query and Get metric programmable handles + uint32_t programmableCount = 0; + :ref:`zetMetricProgrammableGetExp`\(device, &programmableCount, nullptr); + zet_metric_programmable_exp_handle_t * metricProgrammableHandles = allocate(sizeof(zet_metric_programmable_exp_handle_t) * programmableCount); + :ref:`zetMetricProgrammableGetExp`\(device, &programmableCount, metricProgrammableHandles); + + // Create metrics from metric programmable handles + for(uint32_t i = 0; i < programmableCount; i++){ + + zet_metric_programmable_exp_handle_t programmableHandle = metricProgrammableHandles[i]; + :ref:`zet-metric-programmable-exp-properties-t` programmableProperties{}; + :ref:`zetMetricProgrammableGetPropertiesExp`\(programmableHandle, &programmableProperties); + + // Choose programmable handle of interest + if(strcmp(programmableProperties.name, "EU_ACTIVE" ) == 0){ + + // Get Parameter info + :ref:`zet-metric-programmable-param-info-exp-t` * paramInfo = allocate (sizeof(:ref:`zet-metric-programmable-param-info-exp-t`\) * programmableProperties.parameterCount); + :ref:`zetMetricProgrammableGetParamInfoExp`\(programmableHandle, programmableProperties.parameterCount, paramInfo); + + // Get Parameter Value info for the 0th parameter + :ref:`zet-metric-programmable-param-value-info-exp-t` * paramValueInfo = allocate(sizeof(:ref:`zet-metric-programmable-param-value-info-exp-t`\) * paramInfo[0].valueInfoCount); + :ref:`zetMetricProgrammableGetParamValueInfoExp`\(programmableHandle, 0, paramInfo[0].valueInfoCount, paramValueInfo); + + // Setting value for the 0th parameter + :ref:`zet-metric-programmable-param-value-exp-t` parameterValue; + parameterValue.value = paramValueInfo[0].valueInfo.ui64; + + // Create Metric + char metricName[ZET_MAX_METRIC_NAME] = "eu_active_minimum"; + char metricDescription[ZET_MAX_METRIC_DESCRIPTION] = "eu_active_minimum_desc"; + :ref:`zetMetricCreateFromProgrammableExp`\(programmableHandle, ¶meterValue, 1, metricName, metricDescription, &metricHandleCount, nullptr); + zet_metric_handle_t * metricHandles = allocate(sizeof(zet_metric_handle_t) * metricHandleCount); + :ref:`zetMetricCreateFromProgrammableExp`\(programmableHandle, ¶meterValue, 1, metricName, metricDescription, &metricHandleCount, metricHandles); + } + } + + //Create Metric Group from metrics + char metricGroupNamePrefix[ZET_MAX_METRIC_GROUP_NAME_PREFIX_EXP] = "eu_active"; + char metricGroupDescription[ZET_MAX_METRIC_GROUP_DESCRIPTION] = "eu_active_desc"; + uint32_t metricGroupCount = 0; + :ref:`zetDeviceCreateMetricGroupsFromMetricsExp`\(device, 1, &metricHandles[0], metricGroupNamePrefix, metricGroupDescription, &metricGroupCount, nullptr); + zet_metric_group_handle_t * metricGroupHandles = allocate(sizeof(zet_metric_group_handle_t) * metricGroupCount); + :ref:`zetDeviceCreateMetricGroupsFromMetricsExp`\(device, 1, &metricHandles[0], metricGroupNamePrefix, metricGroupDescription, &metricGroupCount, metricGroupHandles); + :ref:`zetMetricGroupAddMetricExp`\(metricGroupHandles[0], &metricHandles[1], nullptr, nullptr); + :ref:`zetMetricGroupCloseExp`\(metricGroupHandles[0]); + + //Activate Metric group + //Collect Metric group using available sampling types + + //Cleanup + :ref:`zetMetricGroupDestroyExp`\(metricGroup); + + for(uint32_t j = 0; j < metricHandleCount; j++){ + :ref:`zetMetricDestroyExp`\(metricHandles[j]); + } + + diff --git a/level-zero/1.10/_sources/tools/EXT_Exp_MetricTracer.rst b/level-zero/1.10/_sources/tools/EXT_Exp_MetricTracer.rst new file mode 100644 index 0000000..ed54035 --- /dev/null +++ b/level-zero/1.10/_sources/tools/EXT_Exp_MetricTracer.rst @@ -0,0 +1,193 @@ + +:orphan: + +.. _ZET_experimental_metric_tracer: + +========================================== +Metric Tracer Experimental Extension +========================================== + +API +---- +* Enumerations + * :ref:`zet-metric-tracer-exp-version-t` + + * :ref:`zet-metric-group-sampling-type-flags-t` + + New value :ref:`ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EXP_TRACER_BASED ` + + * :ref:`zet-metric-type-t` + + New Values + :ref:`ZET_METRIC_TYPE_EVENT_EXP_TIMESTAMP ` + Metric type: have only timestamp and value has no meaning. + :ref:`ZET_METRIC_TYPE_EVENT_EXP_START ` + Metric type: the first event of a start/stop event pair. + :ref:`ZET_METRIC_TYPE_EVENT_EXP_END ` + Metric type: the second event of a start/stop event pair. + :ref:`ZET_METRIC_TYPE_EVENT_EXP_MONOTONIC_WRAPS_VALUE ` + Metric type: value of the event is a monotonic increasing value that can wrap around. + + +* Structures + + * :ref:`zet-metric-tracer-exp-desc-t` + * :ref:`zet-metric-entry-exp-t` + +* Functions + + * :ref:`zetMetricTracerCreateExp` + * :ref:`zetMetricTracerDestroyExp` + * :ref:`zetMetricTracerEnableExp` + * :ref:`zetMetricTracerDisableExp` + * :ref:`zetMetricTracerReadDataExp` + * :ref:`zetMetricDecoderCreateExp` + * :ref:`zetMetricDecoderDestroyExp` + * :ref:`zetMetricDecoderGetDecodableMetricsExp` + * :ref:`zetMetricTracerDecodeExp` + +Metric Tracer +~~~~~~~~~~~~~~~~~~~ + +Metrics collection model that allows retrieving metrics from events generated in asynchronous fashion. A Metrics Tracer is a software interface that allows +configuration for collection of such metrics. Collected raw data can be converted into parsable data with the use of a decoder object. + +Enumeration +----------- + +Application can use :ref:`zetMetricGroupGet` to enumerate the list of metric groups and :ref:`zetMetricGroupGetProperties` to get metric group sampling type +and search for :ref:`ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EXP_TRACER_BASED `\. + +Configuration +------------- + +Use the :ref:`zetContextActivateMetricGroups` API call to configure the device for data collection. + +Collection +---------- + +Metric Tracer based collection mode allows the creation of a tracer object for multiple metric groups than can be collected concurrently. Once metric groups are +activated the tracer can be created using :ref:`zetMetricTracerCreateExp`\. Tracers are created in disabled state, applications have the flexibility to to enable +(:ref:`zetMetricTracerEnableExp`\) and disable (:ref:`zetMetricTracerDisableExp`\) during workload execution to selectively decide sections on which to collect metrics. +ata can be retrieved from the tracer with :ref:`zetMetricTracerReadDataExp`\. + +Decoding +-------- +Metric Tracer collects the data in device specific, raw form that is not suitable for application processing. To convert data into a format that allows +application parsing a decoder object can be used. The decoder object is created with :ref:`zetMetricDecoderCreateExp` and data can be converted using +:ref:`zetMetricTracerDecodeExp`\. Each event in the data is associated with a decodable metric, which can be retrieved with :ref:`zetMetricDecoderGetDecodableMetricsExp`\. + + + +Sample Code +------------ + +The following pseudo-code demonstrates how to enumerate Tracer based metric groups and collect data. + +.. parsed-literal:: + + + zet_metric_group_handle_t hMetricGroup = nullptr; + ze_event_handle_t hNotificationEvent = nullptr; + ze_event_pool_handle_t hEventPool = nullptr; + :ref:`ze-event-pool-desc-t` eventPoolDesc = {:ref:`ZE_STRUCTURE_TYPE_EVENT_POOL_DESC `\, nullptr, 0, 1}; + :ref:`ze-event-desc-t` eventDesc = {:ref:`ZE_STRUCTURE_TYPE_EVENT_DESC `\}; + zet_metric_tracer_exp_handle_t hMetricTracer = nullptr; + :ref:`zet-metric-tracer-exp-desc-t` tracerDescriptor = { :ref:`ZET_STRUCTURE_TYPE_METRIC_TRACER_EXP_DESC `\, nullptr, 1024}; + zet_metric_decoder_exp_handle_t hMetricDecoder = nullptr; + + // Find the first metric group suitable for Tracer Based collection + FindMetricGroup(hDevice, :ref:`ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EXP_TRACER_BASED `\, &hMetricGroup ); + + // Configure the HW + :ref:`zetContextActivateMetricGroups`\( hContext, hDevice, /\* count= \*/ 1, &hMetricGroup ); + + // Create notification event + :ref:`zeEventPoolCreate`\( hContext, &eventPoolDesc, 1, &hDevice, &hEventPool ); + eventDesc.index = 0; + eventDesc.signal = :ref:`ZE_EVENT_SCOPE_FLAG_HOST `\; + eventDesc.wait = :ref:`ZE_EVENT_SCOPE_FLAG_HOST `\; + :ref:`zeEventCreate`\( hEventPool, &eventDesc, &hNotificationEvent ); + + // Create tracer + :ref:`zetMetricTracerCreateExp`\(hContext, hDevice, 1, &hMetricGroup , &tracerDescriptor, hNotificationEvent, &hMetricTracer); + + // create decoder + :ref:`zetMetricDecoderCreateExp`\( hMetricTracer, &hMetricDecoder); + + // Get decodable metrics + uint32_t numDecodableMetrics = 0; + :ref:`zetMetricDecoderGetDecodableMetricsExp`\(hMetricDecoder, &numDecodableMetrics, nullptr); + std::vectordecodableMetrics(numDecodableMetrics); + :ref:`zetMetricDecoderGetDecodableMetricsExp`\(hMetricDecoder, &numDecodableMetrics, decodableMetrics.data()); + + // Enable the tracer + :ref:`zetMetricTracerEnableExp`\(hMetricTracer, true); + + // Run your workload + Workload(hDevice); + + // Wait for data, optional in this example + :ref:`zeEventHostSynchronize`\( hNotificationEvent, 1000 /\*timeout\*/ ); + // reset the event if it fired + + // Read raw data + size_t rawDataSize = 0; + :ref:`zetMetricTracerReadDataExp`\(hMetricTracer, &rawDataSize, nullptr); + std::vectorrawData(rawDataSize); + :ref:`zetMetricTracerReadDataExp`\(hMetricTracer, &rawDataSize, rawData.data()); + + // decode + uint32_t totalNumEntries = 0; + uint32_t setCount = 0; + :ref:`zetMetricTracerDecodeExp`\(hMetricDecoder, &rawDataSize, rawData.data(), numDecodableMetrics, decodableMetrics.data(), &setCount, nullptr, &totalNumEntries, nullptr); + std::vector decodedEntries(totalNumEntries) + std::vector metricEntriesCountPerSet(setCount); + :ref:`zetMetricTracerDecodeExp`\(hMetricDecoder, &rawDataSize, rawData.data(), numDecodableMetrics, decodableMetrics.data(), &setCount, metricEntriesCountPerSet.data(), &totalNumEntries, decodedEntries.data()); + + uint32_t setEntryStart = 0; + for (uint8_t setIndex = 0; setIndex < setCount; setIndex++) { + for (uint32_t index = setEntryStart; index < metricEntriesCountPerSet[setIndex]; index++) { + :ref:`zet-metric-entry-exp-t` metricEntry = decodedEntries[index]; + :ref:`zet-metric-properties-t` metricProperties = {}; + :ref:`zetMetricGetProperties`\(decodableMetrics[metricEntry.metricIndex], &metricProperties); + std::cout << "Component: " << metricProperties.component ". Decodable metric name: " << metricProperties.name; + switch (metricProperties.resultType) { + case :ref:`ZET_VALUE_TYPE_UINT8 `\: + case :ref:`ZET_VALUE_TYPE_UINT16 `\: + case :ref:`ZET_VALUE_TYPE_UINT32 `\: + std::cout << ".\t value: " << metricEntry.value.ui32 << std::endl; + break; + case :ref:`ZET_VALUE_TYPE_UINT64 `\: + std::cout << ".\t value: " << metricEntry.value.ui64 << std::endl; + break; + case :ref:`ZET_VALUE_TYPE_FLOAT32 `\: + std::cout << ".\t value: " << metricEntry.value.fp32 << std::endl; + break; + case :ref:`ZET_VALUE_TYPE_FLOAT64 `\: + std::cout << ".\t value: " << metricEntry.value.fp64 << std::endl; + break; + case :ref:`ZET_VALUE_TYPE_BOOL8 `\: + if( metricEntry.value.b8 ){ + std::cout << ".\t value: true" << std::endl; + else + std::cout << ".\t value: false" << std::endl; + } + break; + default: + break; + } + + setEntryStart = metricEntriesCountPerSet[setIndex]; + } + } + + // Close metric tracer + :ref:`zetMetricTracerDisableExp`\(hMetricTracer, true); + :ref:`zetMetricDecoderDestroyExp`\(hMetricDecoder); + :ref:`zetMetricTracerDestroyExp`\(hMetricTracer); + :ref:`zeEventDestroy`\( hNotificationEvent ); + :ref:`zeEventPoolDestroy`\( hEventPool ); + + // Clean device configuration and free memory + :ref:`zetContextActivateMetricGroups`\( hContext, hDevice, 0, nullptr ); \ No newline at end of file diff --git a/level-zero/1.10/_sources/tools/EXT_Exp_MultiMetricValues.rst b/level-zero/1.10/_sources/tools/EXT_Exp_MultiMetricValues.rst new file mode 100644 index 0000000..9acfdd4 --- /dev/null +++ b/level-zero/1.10/_sources/tools/EXT_Exp_MultiMetricValues.rst @@ -0,0 +1,60 @@ + +:orphan: + +.. _ZET_experimental_calculate_multiple_metrics: + +========================================== + Calculating Multiple Metrics Extension +========================================== + +API +---- + +* Functions + + * :ref:`zetMetricGroupCalculateMultipleMetricValuesExp` + +Sample Code +------------ + +The following code demonstrates how to calculate and process multiple metric values: + +.. parsed-literal:: + + // Get data count and total metric count + uint32_t dataCount = 0; + uint32_t totalMetricCount = 0; + :ref:`zetMetricGroupCalculateMultipleMetricValuesExp`\(hMetricGroup, type, rawDataSize, pRawData, &dataCount, &totalMetricCount, nullptr, nullptr); + + // Get metric counts and metric values + std::vector metricCounts(dataCount); + std::vector<:ref:`zet-typed-value-t`\> metricValues(totalMetricCount); + :ref:`zetMetricGroupCalculateMultipleMetricValuesExp`\(hMetricGroup, type, rawDataSize, pRawData, &dataCount, &totalMetricCount, metricCounts.data(), metricValues.data()); + + // Example showing how to process the metric values + + // Setup + uint32_t metricCount = 0; + :ref:`zetMetricGet`\(hMetricGroup, &metricCount, nullptr); + + zet_metric_handle_t* phMetrics = malloc(metricCount * sizeof(zet_metric_handle_t)); + :ref:`zetMetricGet`\(hMetricGroup, &metricCount, phMetrics); + + // This loop over metric data is new for this extension + uint32_t startIndex = 0; + for (uint32_t dataIndex = 0; dataIndex < dataCount; dataIndex++) { + + // Processing each metric data is the same as for the single + // calculate metric values + const uint32_t metricCountForDataIndex = metricCounts[dataIndex]; + const uint32_t reportCount = metricCountForDataIndex / metricCount; + for (uint32_t report = 0; report < reportCount; report++) { + for (uint32_t metric = 0; metric < metricCount ; metric++) { + const size_t metricIndex = report * metricCount + metric; + process_metric_value(metricValues[startIndex + metricIndex])); + } + } + + startIndex += metricCountForDataIndex; + } + assert(startIndex == totalMetricCount); diff --git a/level-zero/1.10/_sources/tools/PROG.rst b/level-zero/1.10/_sources/tools/PROG.rst new file mode 100644 index 0000000..8e5b835 --- /dev/null +++ b/level-zero/1.10/_sources/tools/PROG.rst @@ -0,0 +1,1001 @@ + + + + +.. _tools-programming-guide: + +========================= + Tools Programming Guide +========================= + +Initialization +============== + +Environment Variables +--------------------- + +The following environment variables are required to be enabled during :ref:`zeInit` for the respective feature. + ++-----------------+-------------------------------------+------------+-----------------------------------------------------------------------------------+ +| Category | Name | Values | Description | ++=================+=====================================+============+===================================================================================+ +| Tools | ZET_ENABLE_API_TRACING_EXP | {**0**, 1} | Enables driver instrumentation for API tracing | +| | | | **Note**: This tracing environment variable is **deprecated**. Please use the | +| | | | tracing loader layer instead. | +| +-------------------------------------+------------+-----------------------------------------------------------------------------------+ +| | ZET_ENABLE_METRICS | {**0**, 1} | Enables driver instrumentation and dependencies for device metrics | +| +-------------------------------------+------------+-----------------------------------------------------------------------------------+ +| | ZET_ENABLE_PROGRAM_INSTRUMENTATION | {**0**, 1} | Enables driver instrumentation and dependencies for program instrumentation | +| +-------------------------------------+------------+-----------------------------------------------------------------------------------+ +| | ZET_ENABLE_PROGRAM_DEBUGGING | {**0**, 1} | Enables driver instrumentation and dependencies for program debugging | ++-----------------+-------------------------------------+------------+-----------------------------------------------------------------------------------+ + +.. _API-Tracing: + +API Tracing +=========== + +**Experimental Extension** - this feature will be removed post-1.0 and replaced with custom loader layers. + +Introduction +------------ + +API tracing provides a way for tools to receive notifications of API +calls made by an application. The callbacks provide direct access to the +input and output parameters for viewing and modification. Tools may also +use these notifications as triggers to block and inject new API calls +into the command stream, such as metrics. + +Registration +------------ + +Tools may independently register for enter and exit callbacks for individual API calls, per driver instance. + +* :ref:`zetTracerExpSetPrologues` is used to specify all the enter callbacks +* :ref:`zetTracerExpSetEpilogues` is used to specify all the exit callbacks +* If the value of a callback is nullptr, then it will be ignored. + +The callbacks are defined as a collection of per-API function pointers, with the following parameters: + +* params : a structure capturing pointers to the input and output parameters of the current instance +* result : the current value of the return value +* pTracerUserData : the user's pointer for the tracer's data +* ppTracerInstanceUserData : a per-tracer, per-instance thread-local storage location; typically used for passing data from the prologue to the epilogue + +Note: since the creation of a tracer requires a device, on first glance +it appears that :ref:`zeInit`\, :ref:`zeDriverGet` and :ref:`zeDeviceGet` are not +traceable. However, these APIs **are** traceable for all calls +subsequent from the creation and enabling of the tracer itself. + +Enabling/Disabling and Destruction +---------------------------------- + +The tracer is created in a disabled state and must be explicitly enabled +by calling :ref:`zetTracerExpSetEnabled`\. The implementation guarantees that +prologues and epilogues will always be executed in pairs; i.e. + +* if the prologue was called then the epilogue is guaranteed to be called, even if another thread disabled the tracer between execution +* if the prologue was not called then the epilogue is guaranteed not to be called, even if another thread enabled the tracer between execution + +The tracer should be disabled by the application before the tracer is +destroyed. If multiple threads are in-flight, then it is still possible +that callbacks will continue to execute even after the tracer is +disabled; specifically, due to the pairing rules above. Due to the +complexity involved in ensuring no threads are still or will be +executing a callback even after its been disabled, the implementation +will stall and wait for any outstanding threads during :ref:`zetTracerExpDestroy`\. + +The following pseudo-code demonstrates a basic usage of API tracing: + + +.. parsed-literal:: + + typedef struct _my_tracer_data_t + { + uint32_t instance; + } my_tracer_data_t; + + typedef struct _my_instance_data_t + { + clock_t start; + } my_instance_data_t; + + void OnEnterCommandListAppendLaunchKernel( + ze_command_list_append_launch_kernel_params_t* params, + ze_result_t result, + void* pTracerUserData, + void** ppTracerInstanceUserData ) + { + my_instance_data_t* instance_data = malloc( sizeof(my_instance_data_t) ); + \*ppTracerInstanceUserData = instance_data; + + instance_data->start = clock(); + } + + void OnExitCommandListAppendLaunchKernel( + ze_command_list_append_launch_kernel_params_t* params, + ze_result_t result, + void* pTracerUserData, + void** ppTracerInstanceUserData ) + { + clock_t end = clock(); + + my_tracer_data_t* tracer_data = (my_tracer_data_t*)pTracerUserData; + my_instance_data_t* instance_data = *(my_instance_data_t**)ppTracerInstanceUserData; + + float time = 1000.f * ( end - instance_data->start ) / CLOCKS_PER_SEC; + printf("zeCommandListAppendLaunchKernel #%d takes %.4f ms\n", tracer_data->instance++, time); + + free(instance_data); + } + + void TracingExample( ... ) + { + my_tracer_data_t tracer_data = {}; + :ref:`zet-tracer-exp-desc-t` tracer_desc {}; + tracer_desc.stype = :ref:`ZET_STRUCTURE_TYPE_TRACER_EXP_DESC `\; + tracer_desc.pUserData = &tracer_data; + zet_tracer_exp_handle_t hTracer; + :ref:`zetTracerExpCreate`\(hDevice, &tracer_desc, &hTracer); + + // Set all callbacks + zet_core_callbacks_t prologCbs = {}; + zet_core_callbacks_t epilogCbs = {}; + prologCbs.CommandList.pfnAppendLaunchFunction = OnEnterCommandListAppendLaunchKernel; + epilogCbs.CommandList.pfnAppendLaunchFunction = OnExitCommandListAppendLaunchKernel; + + :ref:`zetTracerExpSetPrologues`\(hTracer, &prologCbs); + :ref:`zetTracerExpSetEpilogues`\(hTracer, &epilogCbs); + + :ref:`zetTracerExpSetEnabled`\(hTracer, true); + + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hFunction, &launchArgs, nullptr, 0, nullptr); + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hFunction, &launchArgs, nullptr, 0, nullptr); + :ref:`zeCommandListAppendLaunchKernel`\(hCommandList, hFunction, &launchArgs, nullptr, 0, nullptr); + + :ref:`zetTracerExpSetEnabled`\(hTracer, false); + :ref:`zetTracerExpDestroy`\(hTracer); + } + +Metrics +======= + +.. _introduction-1: + +Introduction +------------ + +Devices provide programmable infrastructure designed to support +performance debugging. The API described in this document provides +access to these device metrics. The intention of this API is to support +performance debug and it is not advised to use it in regular execution +as overall performance can be negatively impacted. + +| The following diagram illustrates the relationship between the metric + objects described in this document. + +.. image:: ../images/tools_metric_hierarchy.png + +Most of the detailed metrics require the device to be properly +programmed before use. It is important to understand that the device +programming is in most cases global. This generally means that if a +software tool or an application is using the metrics then no other +application can reliably use the same device resources. + +Metric Groups +------------- + +The device infrastructure consists of a pre-defined set of non-programmable +counters, and a programmable network of connections that work with a +separate set of counters as well as other types of counters. For sake of +simplicity, the smallest unit of configuration is a Metric Group. Metric +Groups are sets of metrics that provide certain perspective on +workload's performance. The groups aggregate metrics, define device +programming and available collection methods. An application may choose +to collect data from several Metric Groups provided that they all +belong to different domains. :ref:`Domains` are used as a software +representation of independent device resources that can safely be used +concurrently. + +Sampling Types +~~~~~~~~~~~~~~ + +Sampling types are a software representation of device capabilities in +terms of reading metric values. Each Metric Group provides information +on which sampling types it supports. There are separate sets of APIs +supporting each of the sampling types Time-based_ and Event-based_. + +All available sampling types are defined in :ref:`zet-metric-group-sampling-type-flags-t`\. + +- Information about supported sampling types for a given Metric Group is provided in :ref:`zet-metric-group-properties-t`\.samplingType. +- It's possible that a device provides multiple Metric Groups with the same names but different sampling types. +- When enumerating, it's important to choose a Metric Group which supports the desired sampling type. + +.. _Domains: + +Domains +~~~~~~~ + +Every Metric Group belongs to a given domain (:ref:`zet-metric-group-properties-t`\.domain). + +- The Metric Group typically define a uniform device counter configuration used for measurements. +- Each domain represents an exclusive resource used by the Metric Group. +- It's possible to simultaneously gather data for two different Metric Groups, only if they belong to a different domain i.e. Metric Groups that can be collected concurrently will have different domain values. + +Enumeration +----------- + +All available metrics are organized into Metric Groups. + +- During data collection, data for the whole Metric Group is gathered. +- The list of available Metric Groups and their Metrics is device-specific. + +The following APIs provide all the information needed for identification and usage. + +- Metric Group properties are accessed through the function :ref:`zetMetricGroupGetProperties` which returns :ref:`zet-metric-group-properties-t`\. +- Metric properties are accessed through the function :ref:`zetMetricGetProperties` which returns :ref:`zet-metric-properties-t`\. + +A common tool flow is to enumerate metrics looking for a specific Metric +Group. Depending on the metrics required for a specific scenario a tool +may choose to run the workload multiple times, recording different set +of Metric Groups each time. Usually care must be taken to ensure +run-to-run stability and result repeatability if metrics from different +runs are meant to be used together. When enumerating metrics to find +a desired Metric Group, it's important to know in advance which sampling +type will be used. + +To enumerate through the Metric tree: + +1. Call :ref:`zetMetricGroupGet` to obtain Metric Group count. +2. Call :ref:`zetMetricGroupGet` to obtain all Metric Groups. +3. Iterate over all available Metric Groups. + + - At this point it's possible to check Metric Group name, domain or sampling type. + - Metric Group names may not be unique. + +4. Obtain the metric count for each Metric Group by calling :ref:`zetMetricGroupGetProperties` with Metric Group handle (zet_metric_group_handle_t) and checking :ref:`zet-metric-group-properties-t`\.metricCount. +5. Iterate over available Metrics using :ref:`zetMetricGet` with parent Metric Group (zet_metric_group_handle_t). +6. Check Metric properties (e.g. name, description) calling :ref:`zetMetricGetProperties` with parent Metric (zet_metric_handle_t). + +The following pseudo-code demonstrates a basic enumeration over all +available metric groups and their metrics. Additionally, it returns a +metric group with a chosen name and sampling type. Similar code could be +used for selecting a preferred metric group for a specific type of +measurements. + +.. parsed-literal:: + + :ref:`ze-result-t` FindMetricGroup( ze_device_handle_t hDevice, + char* pMetricGroupName, + uint32_t desiredSamplingType, + zet_metric_group_handle_t* phMetricGroup ) + { + // Obtain available metric groups for the specific device + uint32_t metricGroupCount = 0; + :ref:`zetMetricGroupGet`\( hDevice, &metricGroupCount, nullptr ); + + zet_metric_group_handle_t* phMetricGroups = malloc(metricGroupCount * sizeof(zet_metric_group_handle_t)); + :ref:`zetMetricGroupGet`\( hDevice, &metricGroupCount, phMetricGroups ); + + // Iterate over all metric groups available + for( i = 0; i < metricGroupCount; i++ ) + { + // Get metric group under index 'i' and its properties + :ref:`zet-metric-group-properties-t` metricGroupProperties {}; + metricGroupProperties.stype = :ref:`ZET_STRUCTURE_TYPE_METRIC_GROUP_PROPERTIES `\; + :ref:`zetMetricGroupGetProperties`\( phMetricGroups[i], &metricGroupProperties ); + + printf("Metric Group: %s\n", metricGroupProperties.name); + + // Check whether the obtained metric group supports the desired sampling type + if((metricGroupProperties.samplingType & desiredSamplingType) == desiredSamplingType) + { + // Check whether the obtained metric group has the desired name + if( strcmp( pMetricGroupName, metricGroupProperties.name ) == 0 ) + { + \*phMetricGroup = phMetricGroups[i]; + break; + } + } + } + + free(phMetricGroups); + } + +Configuration +------------- + +Use the :ref:`zetContextActivateMetricGroups` API call to configure the device +for data collection. + +- Subsequent calls to the function will disable device programming for the metric groups not selected for activation. +- To avoid undefined results only call the :ref:`zetContextActivateMetricGroups` between experiments i.e. while not collecting data. + +Programming restrictions: + +- Any combination of metric groups can be configured simultaneously provided that all of them have a different :ref:`zet-metric-group-properties-t`\.domain. +- MetricGroup must be active until :ref:`zetMetricStreamerClose` and the last :ref:`zetCommandListAppendMetricQueryEnd` completes. + +Collection +---------- + +There are two modes of metrics collection supported: :ref:`time-based` and :ref:`event-based`. + +- Time-based collection is using a timer as well as other events to store data samples. A metric streamer interface is the software interface for configuration and collection. +- Event-based collection is based on a pair of Begin/End events appended to command lists. A metric query interface is the software interface for configuration and collection. + +.. _Time-based: + +Metric Streamer +~~~~~~~~~~~~~~~ + +Time-based collection uses a simple Open, Read, Close scheme: + +- :ref:`zetMetricStreamerOpen` opens the streamer. +- :ref:`zetMetricStreamerReadData` reads the raw data to be later processed by :ref:`zetMetricGroupCalculateMetricValues`\. +- :ref:`zetMetricStreamerClose` closes the streamer. + +.. image:: ../images/tools_metric_streamer.png + +The following pseudo-code demonstrates a basic sequence for time-based collection: + +.. parsed-literal:: + + :ref:`ze-result-t` TimeBasedUsageExample( ze_context_handle_t hContext, + ze_device_handle_t hDevice ) + { + zet_metric_group_handle_t hMetricGroup = nullptr; + ze_event_handle_t hNotificationEvent = nullptr; + ze_event_pool_handle_t hEventPool = nullptr; + :ref:`ze-event-pool-desc-t` eventPoolDesc = {:ref:`ZE_STRUCTURE_TYPE_EVENT_POOL_DESC `\, nullptr, 0, 1}; + :ref:`ze-event-desc-t` eventDesc = {:ref:`ZE_STRUCTURE_TYPE_EVENT_DESC `\}; + zet_metric_streamer_handle_t hMetricStreamer = nullptr; + :ref:`zet-metric-streamer-desc-t` metricStreamerDesc = {:ref:`ZET_STRUCTURE_TYPE_METRIC_STREAMER_DESC `\}; + + // Find a "ComputeBasic" metric group suitable for Time Based collection + FindMetricGroup( hDevice, "ComputeBasic", :ref:`ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_TIME_BASED `\, &hMetricGroup ); + + // Configure the HW + :ref:`zetContextActivateMetricGroups`\( hContext, hDevice, /\* count= \*/ 1, &hMetricGroup ); + + // Create notification event + :ref:`zeEventPoolCreate`\( hContext, &eventPoolDesc, 1, &hDevice, &hEventPool ); + eventDesc.index = 0; + eventDesc.signal = :ref:`ZE_EVENT_SCOPE_FLAG_HOST `\; + eventDesc.wait = :ref:`ZE_EVENT_SCOPE_FLAG_HOST `\; + :ref:`zeEventCreate`\( hEventPool, &eventDesc, &hNotificationEvent ); + + // Open metric streamer + metricStreamerDesc.samplingPeriod = 1000; + metricStreamerDesc.notifyEveryNReports = 32768; + :ref:`zetMetricStreamerOpen`\( hContext, hDevice, hMetricGroup, &metricStreamerDesc, hNotificationEvent, &hMetricStreamer ); + + // Run your workload, in this example we assume the data for the whole experiment fits in the device buffer + Workload(hDevice); + // Optionally insert markers during workload execution + //:ref:`zetCommandListAppendMetricStreamerMarker`\( hCommandList, hMetricStreamer, tool_marker_value ); + + // Wait for data, optional in this example since the whole workload has already been executed by now + //:ref:`zeEventHostSynchronize`\( hNotificationEvent, 1000 /\*timeout\*/ ); + // reset the event if it fired + + // Read raw data + size_t rawSize = 0; + :ref:`zetMetricStreamerReadData`\( hMetricStreamer, UINT32_MAX, &rawSize, nullptr ); + uint8_t* rawData = malloc(rawSize); + :ref:`zetMetricStreamerReadData`\( hMetricStreamer, UINT32_MAX, &rawSize, rawData ); + + // Close metric streamer + :ref:`zetMetricStreamerClose`\( hMetricStreamer ); + :ref:`zeEventDestroy`\( hNotificationEvent ); + :ref:`zeEventPoolDestroy`\( hEventPool ); + + // Deconfigure the device + :ref:`zetContextActivateMetricGroups`\( hContext, hDevice, 0, nullptr ); + + // Calculate metric data + CalculateMetricsExample( hMetricGroup, rawSize, rawData ); + free(rawData); + } + +.. _Event-based: + +Metric Query +~~~~~~~~~~~~ + +Event-based collection uses a simple Begin, End, GetData scheme: + +- :ref:`zetCommandListAppendMetricQueryBegin` defines the start counting event +- :ref:`zetCommandListAppendMetricQueryEnd` defines the finish counting event +- :ref:`zetMetricQueryGetData` reads the raw data to be later processed by :ref:`zetMetricGroupCalculateMetricValues`\. + +Typically, multiple queries are used and recycled to characterize a workload. A Query Pool is used to efficiently use and reuse device memory for multiple queries. + +- :ref:`zetMetricQueryPoolCreate` creates a pool of homogeneous queries. +- :ref:`zetMetricQueryPoolDestroy` frees the pool. The application must ensure no queries within the pool are in-use before freeing the pool. +- :ref:`zetMetricQueryCreate` obtains a handle to a unique location in the pool. +- :ref:`zetMetricQueryReset` allows for low-cost recycling of a location in the pool. + +.. image:: ../images/tools_metric_query.png + +The following pseudo-code demonstrates a basic sequence for query-based collection: + +.. parsed-literal:: + + :ref:`ze-result-t` MetricQueryUsageExample( ze_context_handle_t hContext, + ze_device_handle_t hDevice ) + { + zet_metric_group_handle_t hMetricGroup = nullptr; + ze_event_handle_t hCompletionEvent = nullptr; + :ref:`ze-event-pool-desc-t` eventPoolDesc = {:ref:`ZE_STRUCTURE_TYPE_EVENT_POOL_DESC `\, nullptr}; + :ref:`ze-event-desc-t` eventDesc = {:ref:`ZE_STRUCTURE_TYPE_EVENT_DESC `\, nullptr}; + ze_event_pool_handle_t hEventPool = nullptr; + zet_metric_query_pool_handle_t hMetricQueryPool = nullptr; + zet_metric_query_handle_t hMetricQuery = nullptr; + :ref:`zet-metric-query-pool-desc-t` queryPoolDesc = {:ref:`ZET_STRUCTURE_TYPE_METRIC_QUERY_POOL_DESC `\, nullptr}; + + // Find a "ComputeBasic" metric group suitable for Event Based collection + FindMetricGroup( hDevice, "ComputeBasic", :ref:`ZET_METRIC_GROUP_SAMPLING_TYPE_FLAG_EVENT_BASED `\, &hMetricGroup ); + + // Configure HW + :ref:`zetContextActivateMetricGroups`\( hContext, hDevice, 1 /\* count \*/, &hMetricGroup ); + + // Create metric query pool & completion event + queryPoolDesc.type = :ref:`ZET_METRIC_QUERY_POOL_TYPE_PERFORMANCE `\; + queryPoolDesc.count = 1000; + :ref:`zetMetricQueryPoolCreate`\( hContext, hDevice, hMetricGroup, &queryPoolDesc, &hMetricQueryPool ); + eventPoolDesc.flags = 0; + eventPoolDesc.count = 1000; + :ref:`zeEventPoolCreate`\( hContext, &eventPoolDesc, 1, &hDevice, &hEventPool ); + + // Write BEGIN metric query to command list + :ref:`zetMetricQueryCreate`\( hMetricQueryPool, 0 /\*slot\*/, &hMetricQuery ); + :ref:`zetCommandListAppendMetricQueryBegin`\( hCommandList, hMetricQuery ); + + // build your command list + ... + + // Write END metric query to command list, use an event to determine if the data is available + eventDesc.index = 0; + eventDesc.signal = :ref:`ZE_EVENT_SCOPE_FLAG_HOST `\; + eventDesc.wait = :ref:`ZE_EVENT_SCOPE_FLAG_HOST `\; + :ref:`zeEventCreate`\( hEventPool, &eventDesc, &hCompletionEvent); + :ref:`zetCommandListAppendMetricQueryEnd`\( hCommandList, hMetricQuery, hCompletionEvent, 0, nullptr ); + + // use :ref:`zeCommandQueueExecuteCommandLists`\( , , , ) to submit your workload to the device + + // Wait for data + :ref:`zeEventHostSynchronize`\( hCompletionEvent, 1000 /\*timeout\*/ ); + + // Read raw data + size_t rawSize = 0; + :ref:`zetMetricQueryGetData`\( hMetricQuery, &rawSize, nullptr ); + uint8_t* rawData = malloc(rawSize); + :ref:`zetMetricQueryGetData`\( hMetricQuery, &rawSize, rawData ); + + // Free the resources + :ref:`zeEventDestroy`\( hCompletionEvent ); + :ref:`zeEventPoolDestroy`\( hEventPool ); + :ref:`zetMetricQueryPoolDestroy`\( hMetricQueryPool ); + + // Deconfigure HW + :ref:`zetContextActivateMetricGroups`\( hContext, hDevice, 0, nullptr ); + + // Calculate metric data + CalculateMetricsExample( hMetricGroup, rawSize, rawData ); + free(rawData); + } + +Calculation +----------- + +Both MetricStreamer and MetricQuery collect the data in device specific, raw form that is not suitable for application processing. +To calculate metric values use :ref:`zetMetricGroupCalculateMetricValues`\. + +The following pseudo-code demonstrates a basic sequence for metric calculation and interpretation: + +.. parsed-literal:: + + :ref:`ze-result-t` CalculateMetricsExample( zet_metric_group_handle_t hMetricGroup, + size_t rawSize, uint8_t* rawData ) + { + // Calculate metric data + uint32_t numMetricValues = 0; + :ref:`zet-metric-group-calculation-type-t` calculationType = :ref:`ZET_METRIC_GROUP_CALCULATION_TYPE_METRIC_VALUES `\; + :ref:`zetMetricGroupCalculateMetricValues`\( hMetricGroup, calculationType, rawSize, rawData, &numMetricValues, nullptr ); + :ref:`zet-typed-value-t`\* metricValues = malloc( numMetricValues * sizeof(:ref:`zet-typed-value-t`\) ); + :ref:`zetMetricGroupCalculateMetricValues`\( hMetricGroup, calculationType, rawSize, rawData, &numMetricValues, metricValues ); + + // Obtain available metrics for the specific metric group + uint32_t metricCount = 0; + :ref:`zetMetricGet`\( hMetricGroup, &metricCount, nullptr ); + + zet_metric_handle_t* phMetrics = malloc(metricCount * sizeof(zet_metric_handle_t)); + :ref:`zetMetricGet`\( hMetricGroup, &metricCount, phMetrics ); + + // Print metric results + uint32_t numReports = numMetricValues / metricCount; + for( uint32_t report = 0; report < numReports; ++report ) + { + printf("Report: %d\n", report); + + for( uint32_t metric = 0; metric < metricCount; ++metric ) + { + :ref:`zet-typed-value-t` data = metricValues[report * metricCount + metric]; + + :ref:`zet-metric-properties-t` metricProperties {}; + metricProperties.stype = :ref:`ZET_STRUCTURE_TYPE_METRIC_PROPERTIES `\; + :ref:`zetMetricGetProperties`\( phMetrics[ metric ], &metricProperties ); + + printf("Metric: %s\n", metricProperties.name ); + + switch( data.type ) + { + case :ref:`ZET_VALUE_TYPE_UINT32 `\: + printf(" Value: %lu\n", data.value.ui32 ); + break; + case :ref:`ZET_VALUE_TYPE_UINT64 `\: + printf(" Value: %llu\n", data.value.ui64 ); + break; + case :ref:`ZET_VALUE_TYPE_FLOAT32 `\: + printf(" Value: %f\n", data.value.fp32 ); + break; + case :ref:`ZET_VALUE_TYPE_FLOAT64 `\: + printf(" Value: %f\n", data.value.fp64 ); + break; + case :ref:`ZET_VALUE_TYPE_BOOL8 `\: + if( data.value.ui32 ) + printf(" Value: true\n" ); + else + printf(" Value: false\n" ); + break; + default: + break; + }; + } + } + + free(metricValues); + free(phMetrics); + } + + +Program Instrumentation +======================= + +.. _introduction-2: + +Introduction +------------ + +The program instrumentation APIs provide tools a basic framework for low-level profiling of device kernels, +by allowing direct instrumentation of those programs. +These capabilities, in combination with those already provided, and in combination with a custom loader layer, +are sufficient for more advanced frameworks to be developed. + +There are two types of instrumentation available: + +1. Inter-Function Instrumentation - intercepting and redirecting function calls +2. Intra-Function Instrumentation - injecting new instructions within a function + +Inter-Function Instrumentation +------------------------------ + +The following capabilities allow for a tool to intercept and redirect function calls: + +* Inter-module function calls - the ability to call functions between different modules; e.g., the application's module and a tool's module +* Custom loader layer - the ability to intercept and inject API calls + +For example, a tool may use a custom loader layer in any of the following ways: + +* :ref:`zeModuleCreate` - replace a module handle with instrumented module handle for all functions +* :ref:`zeKernelCreate` - replace a kernel handle with instrumented kernel handle for all call sites +* :ref:`zeModuleGetFunctionPointer` - replace a function pointer with instrumented function pointer for all call sites +* :ref:`zeCommandListAppendLaunchKernel` - replace a kernel handle with instrumented kernel handle at call site + +Intra-Function Instrumentation +------------------------------ + +The following capabilities allow for a tool to inject instructions within a kernel: + +* :ref:`zetModuleGetDebugInfo` - allows a tool to query standard debug info for an application's module +* :ref:`zetKernelGetProfileInfo` - allows a tool to query detailed information on aspects of a kernel +* :ref:`zeModuleGetNativeBinary` - allows for a tool to retrieve the native binary of the application's module, instrument it, then create a new module using the instrumented version +* Custom loader layer - same usage as Inter-Function Instrumentation above + +Compilation +~~~~~~~~~~~ + +A module must be compiled with foreknowledge that instrumentation will be performed for the compiler to generate the proper profiling meta-data. +Therefore, when the instrumentation layer is enabled, a new +build flag is supported: "-zet-profile-flags \", where \ must be a +combination of :ref:`zet-profile-flags-t`\, in hexidecimal. + +As an example, a tool could use a custom loader layer to inject this build flag on each :ref:`zeModuleCreate` call that the tool wishes to instrument. +In another example, a tool could recompile a Module using the build flag and use a custom loader layer to replace the application's Module handle with it's own. + +Instrumentation +~~~~~~~~~~~~~~~ + +Once the module has been compiled with instrumentation enabled, a tool may use :ref:`zetModuleGetDebugInfo` and :ref:`zetKernelGetProfileInfo` +in order to decode the application's instructions and register usage for each function in the module. + +If a tool requires additional functions to be used, it may create other module(s) and use :ref:`zeModuleGetFunctionPointer` +to call functions between the application and tool modules. +A tool may use :ref:`zeModuleGetFunctionPointer` to retrieve the Host and device address of each function in the module. + +There are no APIs provided for the actual instrumentation. +Instead this is left up to the tool itself to decode the application module's native binary and inject native instructions. +This model prevents the instrumentation from being manipulated by the compiler. + +Execution +~~~~~~~~~ + +If a tool requires changing the address of an application's function, +then it should use a custom loader layer to intercept API calls dealing with function pointers. +For example, :ref:`zeModuleGetFunctionPointer` and all flavors of :ref:`zeCommandListAppendLaunchKernel`\. + + +Program Debug +============= + +.. _introduction-3: + +Introduction +------------ + +The program debug APIs provide tools a basic framework for debugging device code. + +The debug APIs only operate on a single device. +When debugging a multi-device system, the tool must debug each device independently. + +The debug APIs only operate in the context of a single host process. +When debugging multiple host processes at the same time, the tool must debug device code +submitted by each host process independently. + + +Device Debug Properties +----------------------- + +A tool may query the debug properties of a device by calling :ref:`zetDeviceGetDebugProperties`\. + +To start a debug session, a tool should first query the debug properties of the device it wants to attach to. +Support for attaching debuggers is indicated by the :ref:`ZET_DEVICE_DEBUG_PROPERTY_FLAG_ATTACH ` flag in :ref:`zet-device-debug-properties-t`\. + +.. parsed-literal:: + + :ref:`zet-device-debug-properties-t` props {}; + props.stype = :ref:`ZET_STRUCTURE_TYPE_DEVICE_DEBUG_PROPERTIES `\; + :ref:`zetDeviceGetDebugProperties`\(hDevice, &props); + + if (:ref:`ZET_DEVICE_DEBUG_PROPERTY_FLAG_ATTACH ` & props.flags == 0) + return; // debugging not supporting + + +Attach and Detach +----------------- + +A tool must attach to a device by calling :ref:`zetDebugAttach`\. +The library will check the following properties: + + * the device must support attaching debuggers. + + * the requested host process must exist. + + * the tool process must be allowed to debug the requested host process. + + Note that this does not require the tool to be attached to the host process. + + * there must be no other tool attached at the same time. + + * device debug must be enabled on this system. + + +If permission is granted, a zet_debug_session_handle_t is provided. +The debug session handle can be used in other program debug APIs until the tool detaches again. + +To end a debug session, a tool calls :ref:`zetDebugDetach` passing the +zet_debug_session_handle_t that had been provided on the corresponding +:ref:`zetDebugAttach` call. + +The following sample code demonstrates attaching and detaching: + +.. parsed-literal:: + + zet_debug_session_handle_t hDebug; + + :ref:`zet-debug-config-t` config; + memset(&config, 0, sizeof(config)); + config.pid = ...; + + errcode = :ref:`zetDebugAttach`\(hDevice, &config, &hDebug); + if (errcode) + return errcode; + + ... + + errcode = :ref:`zetDebugDetach`\(hDebug); + if (errcode) + return errcode; + + +Devices and Sub-Devices +~~~~~~~~~~~~~~~~~~~~~~~ + +A tool may attach to any device and will implicitly be attached to all sub-devices of that device. + +Implementations that use separate code segments per sub-device may further allow attaching to sub-devices individually. +Support for this can be determined by calling :ref:`zetDeviceGetDebugProperties` using a sub-device handle and +checking for the :ref:`ZET_DEVICE_DEBUG_PROPERTY_FLAG_ATTACH ` flag in :ref:`zet-device-debug-properties-t`\. +In that case, a tool may choose to either attach to the device or to one or more sub-devices. + +When attached to a sub-device, writes to the code segment will not be broadcast to other sub-devices, +even though they may share the same address space range. +This allows breakpoints to be contained within one sub-device. + +If a tool is attached to a sub-device, any attempt to attach to an parent device results in :ref:`ZE_RESULT_ERROR_NOT_AVAILABLE `\. + +Implementations that share code segments across sub-devices will only allow attaching to devices. +Any attempt to attach to a sub-device results in :ref:`ZE_RESULT_ERROR_NOT_AVAILABLE `\. + +Device Thread Identification +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Device threads are identified by their slice, sub-slice, EU, and thread numbers, +which lie between zero and the respective number reported by :ref:`ze-device-properties-t` minus one. + +If a tool is attached to a device, device threads are enumerated for all sub-devices within that device. + +The total number of threads on a device can be computed using device properties as shown in this sample code: + +.. parsed-literal:: + + :ref:`ze-device-properties-t` properties {}; + properties.stype = :ref:`ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES `\; + uint64_t num_threads; + + :ref:`zeDeviceGetProperties`\(hDevice, &properties); + + num_threads = properties.numSlices * properties.numSubslicesPerSlice * + properties.numEUsPerSubslice * properties.numThreadsPerEU; + + +Tools may enumerate all possible thread identifiers based on device properties +by iterating over the number of slices, sub-slices, EUs, and threads. + +Thread Availability +~~~~~~~~~~~~~~~~~~~ + +Not all threads may be available at all times and some threads may not be available at any time. +This may have various reasons, including: + +* the thread may be idle +* the thread may be assigned to a different process + +For the purpose of this debug tool API, threads may be in one of three states: + +* running +* stopped +* unavailable + + +Debug Events +------------ + +As soon as the debug session has been started, it will receive debug events from the device. +To read the topmost event in the FIFO, the tool must call :ref:`zetDebugReadEvent`\. + +The following sample code demonstrates reading an event: + +.. parsed-literal:: + + :ref:`zet-debug-event-t` event; + errcode = :ref:`zetDebugReadEvent`\(hDebug, UINT64_MAX, &event); + if (errcode) + return errcode; + + ... + + if (event.flags & :ref:`ZET_DEBUG_EVENT_FLAG_NEED_ACK `\) { + errcode = :ref:`zetDebugAcknowledgeEvent`\(hDebug, &event); + if (errcode) + return errcode; + } + + +A debug event is described by the :ref:`zet-debug-event-t` structure, which contains: + + * The event type as :ref:`zet-debug-event-type-t`\. + + * A bit-vector of :ref:`zet-debug-event-flags-t`\, which can be: + + * :ref:`ZET_DEBUG_EVENT_FLAG_NEED_ACK ` indicates that the event needs to be acknowledged by calling :ref:`zetDebugAcknowledgeEvent`\. + This allows tools to perform any action in response to an event and indicate their completion by acknowledging the event. + + Implementations are allowed to block reading of new events until the previous event has been acknowledged. + If an implementation allows reading further events, it must allow acknowledging events out of order. + + +Following the common fields, the event object contains event-specific fields depending on the event type. +Not all events have event-specific fields. + + * :ref:`ZET_DEBUG_EVENT_TYPE_DETACHED `\: the tool was detached. + + * The detach reason as :ref:`zet-debug-detach-reason-t`\. This can be: + + * :ref:`ZET_DEBUG_DETACH_REASON_HOST_EXIT ` indicates that the host process exited. + + * :ref:`ZET_DEBUG_EVENT_TYPE_PROCESS_ENTRY `\: the host process created one or more command queues on the device. + + * :ref:`ZET_DEBUG_EVENT_TYPE_PROCESS_EXIT `\: the host process destroyed all command queues on the device. + + * :ref:`ZET_DEBUG_EVENT_TYPE_MODULE_LOAD `\: an in-memory module was loaded onto the device. + + * :ref:`ZET_DEBUG_EVENT_TYPE_MODULE_UNLOAD `\: an in-memory module is about to get unloaded from the device. + + * :ref:`ZET_DEBUG_EVENT_TYPE_THREAD_STOPPED `\: threads stopped due to a device exception. + + The reported threads remain stopped until they are resumed by a call to :ref:`zetDebugResume`\. + + * :ref:`ZET_DEBUG_EVENT_TYPE_THREAD_UNAVAILABLE `\: threads cannot be interrupted because they are unavailable. + + The event is generated in response to an interrupt request if none of the requested threads is available to be interrupted. + + * :ref:`ZET_DEBUG_EVENT_TYPE_PAGE_FAULT `\: there was a page fault on the device + + The event provides the page fault reason, the faulting address aligned to the page granularity, and a mask specifying the alignment. + + To mask can be bit-wise ANDed with an address to obtain an address that is similarly aligned to the same page granularity as the provided faulting address. + + +Run Control +----------- + +The tool may interrupt and resume device threads by calling :ref:`zetDebugInterrupt` and :ref:`zetDebugResume`\, respectively. + +The thread argument may specify a single thread, a group of threads, or all threads on the device. +To specify all threads, the tool must set all fields in :ref:`ze-device-thread-t` to their maximum value. +By setting some but not all fields to their maximum value, a tool may specify a group of threads. + +The :ref:`zetDebugInterrupt` call is not blocking. +When all specified threads either stopped or are determined to be currently unavailable, +the tool receives a :ref:`ZET_DEBUG_EVENT_TYPE_THREAD_STOPPED ` event if at least one thread could be stopped +or a :ref:`ZET_DEBUG_EVENT_TYPE_THREAD_UNAVAILABLE ` event if none of the threads is currently available. + +If the thread argument specified a group of threads or all threads on the device, +the event may be preceded by :ref:`ZET_DEBUG_EVENT_TYPE_THREAD_STOPPED ` events of individual threads. + +The tool does not know whether a thread stopped or is unavailable until it tries to access its state or access memory through it. +Unavailable threads may become available at any time. + +The following sample code demonstrates how to interrupt and resume all threads in a debug session: + +.. parsed-literal:: + + :ref:`ze-device-thread-t` allthreads; + allthreads.slice = UINT32_MAX; + allthreads.subslice = UINT32_MAX; + allthreads.eu = UINT32_MAX; + allthreads.thread = UINT32_MAX; + + errcode = :ref:`zetDebugInterrupt`\(hDebug, allthreads); + if (errcode) + return errcode; + + ... + + errcode = :ref:`zetDebugResume`\(hDebug, allthreads); + if (errcode) + return errcode; + + +Memory Access +------------- + +A tool may read and write memory in the context of a stopped device thread as if that thread had read or written the memory. + +Memory may be partitioned into device-specific memory spaces. +For example, GPU devices support the following memory spaces, defined by :ref:`zet-debug-memory-space-type-t`\: + + * :ref:`ZET_DEBUG_MEMORY_SPACE_TYPE_DEFAULT ` - default memory space + + * :ref:`ZET_DEBUG_MEMORY_SPACE_TYPE_SLM ` - shared local memory space + +The default memory space may also be accessed in the context of the special thread with all fields set to their maximum value. + +To read and write memory, call the :ref:`zetDebugReadMemory` and :ref:`zetDebugWriteMemory` function, respectively. +The functions specify the thread(s), memory space and input or output buffer, respectively. + +The following example copies 16 bytes of memory from one location in the context of one device thread to another location in the default memory space: + +.. parsed-literal:: + + :ref:`zet-debug-memory-space-desc-t` srcSpace = { + :ref:`ZET_STRUCTURE_TYPE_DEBUG_MEMORY_SPACE_DESC `\, + nullptr, + :ref:`ZET_DEBUG_MEMORY_SPACE_TYPE_DEFAULT `\, + srcAddress + }; + :ref:`zet-debug-memory-space-desc-t` dstSpace = { + :ref:`ZET_STRUCTURE_TYPE_DEBUG_MEMORY_SPACE_DESC `\, + nullptr, + :ref:`ZET_DEBUG_MEMORY_SPACE_TYPE_DEFAULT `\, + dstAddress + }; + + :ref:`ze-device-thread-t` thread0 = { + 0, 0, 0, 0 + }; + + uint8_t buffer[16]; + errcode = :ref:`zetDebugReadMemory`\(hDebug, thread0, &srcSpace, sizeof(buffer), buffer); + if (errcode) + return errcode; + + ... + + errcode = :ref:`zetDebugWriteMemory`\(hDebug, allthreads, &dstSpace, sizeof(buffer), buffer); + if (errcode) + return errcode; + + +Register State Access +--------------------- + +A tool may read and write the register state of a stopped device thread. + +Registers are grouped into sets of similar registers. +The types of register sets supported by a device can be queried using +:ref:`zetDebugGetRegisterSetProperties` and :ref:`zetDebugGetThreadRegisterSetProperties`\. +The former provides general information about the register sets supported on a device. The latter provides the concrete register set for the argument thread. The register set may depend on dynamic properties and may change between stops. +The register set properties specify details about each register set, +such as the maximum number of registers in each set, and whether the register set is read-only. + +The actual type of registers is device-specific and will be defined by the device vendor. + +The following pseudo-code demonstrates obtaining register set properties for a device: + +.. parsed-literal:: + + uint32_t nRegSets = 0; + :ref:`zetDebugGetRegisterSetProperties`\(hDevice, &nRegSets, nullptr); + + :ref:`zet-debug-regset-properties-t`\* pRegSets = allocate(nRegSets * sizeof(:ref:`zet-debug-regset-properties-t`\)); + :ref:`zetDebugGetRegisterSetProperties`\(hDevice, &nRegSets, pRegSets); + +The following pseudo-code demonstrates obtaining register set properties for a thread: + +.. parsed-literal:: + + :ref:`ze-device-thread-t` thread0 = { + 0, 0, 0, 0 + }; + uint32_t nRegSets = 0; + :ref:`zetDebugGetThreadRegisterSetProperties`\(hDebug, thread0, &nRegSets, nullptr); + + :ref:`zet-debug-regset-properties-t`\* pRegSets = allocate(nRegSets * sizeof(:ref:`zet-debug-regset-properties-t`\)); + :ref:`zetDebugGetThreadRegisterSetProperties`\(hDebug, thread0, &nRegSets, pRegSets); + +To read and write the register state, use the :ref:`zetDebugReadRegisters` and :ref:`zetDebugWriteRegisters` function, respectively. + +The following pseudo-code demonstrates iterating over register sets: + +.. parsed-literal:: + + for (i = 0; i < nRegSets; ++i) { + void* values = allocate(pRegSets[i].count * pRegSets[i].valueSize); + + errcode = :ref:`zetDebugReadRegisters`\(hDebug, thread0, pRegSets[i].type, 0, pRegSets[i].count, values); + if (errcode) + return errcode; + + ... + + errcode = :ref:`zetDebugWriteRegisters`\(hDebug, thread0, pRegSets[i].type, 0, pRegSets[i].count, values); + if (errcode) + return errcode; + + free(values); + } + + diff --git a/level-zero/1.10/_sources/tools/api.rst b/level-zero/1.10/_sources/tools/api.rst new file mode 100644 index 0000000..5f4cab8 --- /dev/null +++ b/level-zero/1.10/_sources/tools/api.rst @@ -0,0 +1,1647 @@ + + +============================== +Tools API +============================== +oneAPI Level Zero Specification - Version 1.10 + + + + + +Common +============================================================ +* Enumerations + + + * :ref:`zet-structure-type-t` + * :ref:`zet-value-type-t` + + +* Structures + + + * :ref:`zet-base-properties-t` + * :ref:`zet-base-desc-t` + * :ref:`zet-value-t` + * :ref:`zet-typed-value-t` + + + + +Common Enums +------------------------------------------------------------------------------ + + +.. _zet-structure-type-t: + +zet_structure_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_structure_type_t + :project: LevelZero + + +.. _zet-value-type-t: + +zet_value_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_value_type_t + :project: LevelZero + + +Common Structures +------------------------------------------------------------------------------ + +.. _zet-base-properties-t: + +zet_base_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_base_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-base-desc-t: + +zet_base_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_base_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-value-t: + +zet_value_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenunion:: zet_value_t + :project: LevelZero + +.. _zet-typed-value-t: + +zet_typed_value_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_typed_value_t + :project: LevelZero + :members: + :undoc-members: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Module +============================================================ +* Functions + + + * :ref:`zetModuleGetDebugInfo` + + +* Enumerations + + + * :ref:`zet-module-debug-info-format-t` + + + + +Module Functions +------------------------------------------------------------------------------ + + +.. _zetModuleGetDebugInfo: + +zetModuleGetDebugInfo +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetModuleGetDebugInfo + :project: LevelZero + + + +Module Enums +------------------------------------------------------------------------------ + + +.. _zet-module-debug-info-format-t: + +zet_module_debug_info_format_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_module_debug_info_format_t + :project: LevelZero + + + + + +Debug +============================================================ +* Functions + + + * :ref:`zetDeviceGetDebugProperties` + * :ref:`zetDebugAttach` + * :ref:`zetDebugDetach` + * :ref:`zetDebugReadEvent` + * :ref:`zetDebugAcknowledgeEvent` + * :ref:`zetDebugInterrupt` + * :ref:`zetDebugResume` + * :ref:`zetDebugReadMemory` + * :ref:`zetDebugWriteMemory` + * :ref:`zetDebugGetRegisterSetProperties` + * :ref:`zetDebugGetThreadRegisterSetProperties` + * :ref:`zetDebugReadRegisters` + * :ref:`zetDebugWriteRegisters` + + +* Enumerations + + + * :ref:`zet-device-debug-property-flags-t` + * :ref:`zet-debug-event-flags-t` + * :ref:`zet-debug-event-type-t` + * :ref:`zet-debug-detach-reason-t` + * :ref:`zet-debug-page-fault-reason-t` + * :ref:`zet-debug-memory-space-type-t` + * :ref:`zet-debug-regset-flags-t` + + +* Structures + + + * :ref:`zet-device-debug-properties-t` + * :ref:`zet-debug-config-t` + * :ref:`zet-debug-event-info-detached-t` + * :ref:`zet-debug-event-info-module-t` + * :ref:`zet-debug-event-info-thread-stopped-t` + * :ref:`zet-debug-event-info-page-fault-t` + * :ref:`zet-debug-event-info-t` + * :ref:`zet-debug-event-t` + * :ref:`zet-debug-memory-space-desc-t` + * :ref:`zet-debug-regset-properties-t` + + +Debug Functions +------------------------------------------------------------------------------ + + +.. _zetDeviceGetDebugProperties: + +zetDeviceGetDebugProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDeviceGetDebugProperties + :project: LevelZero + + +.. _zetDebugAttach: + +zetDebugAttach +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugAttach + :project: LevelZero + + +.. _zetDebugDetach: + +zetDebugDetach +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugDetach + :project: LevelZero + + +.. _zetDebugReadEvent: + +zetDebugReadEvent +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugReadEvent + :project: LevelZero + + +.. _zetDebugAcknowledgeEvent: + +zetDebugAcknowledgeEvent +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugAcknowledgeEvent + :project: LevelZero + + +.. _zetDebugInterrupt: + +zetDebugInterrupt +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugInterrupt + :project: LevelZero + + +.. _zetDebugResume: + +zetDebugResume +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugResume + :project: LevelZero + + +.. _zetDebugReadMemory: + +zetDebugReadMemory +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugReadMemory + :project: LevelZero + + +.. _zetDebugWriteMemory: + +zetDebugWriteMemory +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugWriteMemory + :project: LevelZero + + +.. _zetDebugGetRegisterSetProperties: + +zetDebugGetRegisterSetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugGetRegisterSetProperties + :project: LevelZero + + +.. _zetDebugGetThreadRegisterSetProperties: + +zetDebugGetThreadRegisterSetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugGetThreadRegisterSetProperties + :project: LevelZero + + +.. _zetDebugReadRegisters: + +zetDebugReadRegisters +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugReadRegisters + :project: LevelZero + + +.. _zetDebugWriteRegisters: + +zetDebugWriteRegisters +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDebugWriteRegisters + :project: LevelZero + + + +Debug Enums +------------------------------------------------------------------------------ + + +.. _zet-device-debug-property-flags-t: + +zet_device_debug_property_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_device_debug_property_flag_t + :project: LevelZero + + +.. _zet-debug-event-flags-t: + +zet_debug_event_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_debug_event_flag_t + :project: LevelZero + + +.. _zet-debug-event-type-t: + +zet_debug_event_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_debug_event_type_t + :project: LevelZero + + +.. _zet-debug-detach-reason-t: + +zet_debug_detach_reason_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_debug_detach_reason_t + :project: LevelZero + + +.. _zet-debug-page-fault-reason-t: + +zet_debug_page_fault_reason_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_debug_page_fault_reason_t + :project: LevelZero + + +.. _zet-debug-memory-space-type-t: + +zet_debug_memory_space_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_debug_memory_space_type_t + :project: LevelZero + + +.. _zet-debug-regset-flags-t: + +zet_debug_regset_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_debug_regset_flag_t + :project: LevelZero + + +Debug Structures +------------------------------------------------------------------------------ + +.. _zet-device-debug-properties-t: + +zet_device_debug_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_device_debug_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-debug-config-t: + +zet_debug_config_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_debug_config_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-debug-event-info-detached-t: + +zet_debug_event_info_detached_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_debug_event_info_detached_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-debug-event-info-module-t: + +zet_debug_event_info_module_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_debug_event_info_module_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-debug-event-info-thread-stopped-t: + +zet_debug_event_info_thread_stopped_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_debug_event_info_thread_stopped_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-debug-event-info-page-fault-t: + +zet_debug_event_info_page_fault_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_debug_event_info_page_fault_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-debug-event-info-t: + +zet_debug_event_info_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenunion:: zet_debug_event_info_t + :project: LevelZero + +.. _zet-debug-event-t: + +zet_debug_event_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_debug_event_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-debug-memory-space-desc-t: + +zet_debug_memory_space_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_debug_memory_space_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-debug-regset-properties-t: + +zet_debug_regset_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_debug_regset_properties_t + :project: LevelZero + :members: + :undoc-members: + + + + +Metric +============================================================ +* Functions + + + * :ref:`zetMetricGroupGet` + * :ref:`zetMetricGroupGetProperties` + * :ref:`zetMetricGroupCalculateMetricValues` + * :ref:`zetMetricGet` + * :ref:`zetMetricGetProperties` + * :ref:`zetContextActivateMetricGroups` + * :ref:`zetMetricStreamerOpen` + * :ref:`zetCommandListAppendMetricStreamerMarker` + * :ref:`zetMetricStreamerClose` + * :ref:`zetMetricStreamerReadData` + * :ref:`zetMetricQueryPoolCreate` + * :ref:`zetMetricQueryPoolDestroy` + * :ref:`zetMetricQueryCreate` + * :ref:`zetMetricQueryDestroy` + * :ref:`zetMetricQueryReset` + * :ref:`zetCommandListAppendMetricQueryBegin` + * :ref:`zetCommandListAppendMetricQueryEnd` + * :ref:`zetCommandListAppendMetricMemoryBarrier` + * :ref:`zetMetricQueryGetData` + + +* Enumerations + + + * :ref:`zet-metric-group-sampling-type-flags-t` + * :ref:`zet-metric-type-t` + * :ref:`zet-metric-group-calculation-type-t` + * :ref:`zet-metric-query-pool-type-t` + + +* Structures + + + * :ref:`zet-metric-group-properties-t` + * :ref:`zet-metric-properties-t` + * :ref:`zet-metric-streamer-desc-t` + * :ref:`zet-metric-query-pool-desc-t` + + +Metric Functions +------------------------------------------------------------------------------ + + +.. _zetMetricGroupGet: + +zetMetricGroupGet +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGroupGet + :project: LevelZero + + +.. _zetMetricGroupGetProperties: + +zetMetricGroupGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGroupGetProperties + :project: LevelZero + + +.. _zetMetricGroupCalculateMetricValues: + +zetMetricGroupCalculateMetricValues +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGroupCalculateMetricValues + :project: LevelZero + + +.. _zetMetricGet: + +zetMetricGet +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGet + :project: LevelZero + + +.. _zetMetricGetProperties: + +zetMetricGetProperties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGetProperties + :project: LevelZero + + +.. _zetContextActivateMetricGroups: + +zetContextActivateMetricGroups +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetContextActivateMetricGroups + :project: LevelZero + + +.. _zetMetricStreamerOpen: + +zetMetricStreamerOpen +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricStreamerOpen + :project: LevelZero + + +.. _zetCommandListAppendMetricStreamerMarker: + +zetCommandListAppendMetricStreamerMarker +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetCommandListAppendMetricStreamerMarker + :project: LevelZero + + +.. _zetMetricStreamerClose: + +zetMetricStreamerClose +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricStreamerClose + :project: LevelZero + + +.. _zetMetricStreamerReadData: + +zetMetricStreamerReadData +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricStreamerReadData + :project: LevelZero + + +.. _zetMetricQueryPoolCreate: + +zetMetricQueryPoolCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricQueryPoolCreate + :project: LevelZero + + +.. _zetMetricQueryPoolDestroy: + +zetMetricQueryPoolDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricQueryPoolDestroy + :project: LevelZero + + +.. _zetMetricQueryCreate: + +zetMetricQueryCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricQueryCreate + :project: LevelZero + + +.. _zetMetricQueryDestroy: + +zetMetricQueryDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricQueryDestroy + :project: LevelZero + + +.. _zetMetricQueryReset: + +zetMetricQueryReset +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricQueryReset + :project: LevelZero + + +.. _zetCommandListAppendMetricQueryBegin: + +zetCommandListAppendMetricQueryBegin +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetCommandListAppendMetricQueryBegin + :project: LevelZero + + +.. _zetCommandListAppendMetricQueryEnd: + +zetCommandListAppendMetricQueryEnd +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetCommandListAppendMetricQueryEnd + :project: LevelZero + + +.. _zetCommandListAppendMetricMemoryBarrier: + +zetCommandListAppendMetricMemoryBarrier +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetCommandListAppendMetricMemoryBarrier + :project: LevelZero + + +.. _zetMetricQueryGetData: + +zetMetricQueryGetData +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricQueryGetData + :project: LevelZero + + + +Metric Enums +------------------------------------------------------------------------------ + + +.. _zet-metric-group-sampling-type-flags-t: + +zet_metric_group_sampling_type_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_metric_group_sampling_type_flag_t + :project: LevelZero + + +.. _zet-metric-type-t: + +zet_metric_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_metric_type_t + :project: LevelZero + + +.. _zet-metric-group-calculation-type-t: + +zet_metric_group_calculation_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_metric_group_calculation_type_t + :project: LevelZero + + +.. _zet-metric-query-pool-type-t: + +zet_metric_query_pool_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_metric_query_pool_type_t + :project: LevelZero + + +Metric Structures +------------------------------------------------------------------------------ + +.. _zet-metric-group-properties-t: + +zet_metric_group_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_group_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-metric-properties-t: + +zet_metric_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-metric-streamer-desc-t: + +zet_metric_streamer_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_streamer_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-metric-query-pool-desc-t: + +zet_metric_query_pool_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_query_pool_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Pin +============================================================ +* Functions + + + * :ref:`zetKernelGetProfileInfo` + + +* Enumerations + + + * :ref:`zet-profile-flags-t` + * :ref:`zet-profile-token-type-t` + + +* Structures + + + * :ref:`zet-profile-properties-t` + * :ref:`zet-profile-free-register-token-t` + * :ref:`zet-profile-register-sequence-t` + + +Pin Functions +------------------------------------------------------------------------------ + + +.. _zetKernelGetProfileInfo: + +zetKernelGetProfileInfo +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetKernelGetProfileInfo + :project: LevelZero + + + +Pin Enums +------------------------------------------------------------------------------ + + +.. _zet-profile-flags-t: + +zet_profile_flags_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_profile_flag_t + :project: LevelZero + + +.. _zet-profile-token-type-t: + +zet_profile_token_type_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_profile_token_type_t + :project: LevelZero + + +Pin Structures +------------------------------------------------------------------------------ + +.. _zet-profile-properties-t: + +zet_profile_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_profile_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-profile-free-register-token-t: + +zet_profile_free_register_token_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_profile_free_register_token_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-profile-register-sequence-t: + +zet_profile_register_sequence_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_profile_register_sequence_t + :project: LevelZero + :members: + :undoc-members: + + + + +Tracing +============================================================ +* Functions + + + * :ref:`zetTracerExpCreate` + * :ref:`zetTracerExpDestroy` + * :ref:`zetTracerExpSetPrologues` + * :ref:`zetTracerExpSetEpilogues` + * :ref:`zetTracerExpSetEnabled` + + +* Enumerations + + + * :ref:`zet-api-tracing-exp-version-t` + + +* Structures + + + * :ref:`zet-tracer-exp-desc-t` + + +Tracing Functions +------------------------------------------------------------------------------ + + +.. _zetTracerExpCreate: + +zetTracerExpCreate +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetTracerExpCreate + :project: LevelZero + + +.. _zetTracerExpDestroy: + +zetTracerExpDestroy +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetTracerExpDestroy + :project: LevelZero + + +.. _zetTracerExpSetPrologues: + +zetTracerExpSetPrologues +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetTracerExpSetPrologues + :project: LevelZero + + +.. _zetTracerExpSetEpilogues: + +zetTracerExpSetEpilogues +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetTracerExpSetEpilogues + :project: LevelZero + + +.. _zetTracerExpSetEnabled: + +zetTracerExpSetEnabled +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetTracerExpSetEnabled + :project: LevelZero + + + +Tracing Enums +------------------------------------------------------------------------------ + + +.. _zet-api-tracing-exp-version-t: + +zet_api_tracing_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_api_tracing_exp_version_t + :project: LevelZero + + +Tracing Structures +------------------------------------------------------------------------------ + +.. _zet-tracer-exp-desc-t: + +zet_tracer_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_tracer_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Concurrentmetricgroup +============================================================ +* Functions + + + * :ref:`zetDeviceGetConcurrentMetricGroupsExp` + + +* Enumerations + + + * :ref:`zet-concurrent-metric-groups-exp-version-t` + + + + +Concurrentmetricgroup Functions +------------------------------------------------------------------------------ + + +.. _zetDeviceGetConcurrentMetricGroupsExp: + +zetDeviceGetConcurrentMetricGroupsExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDeviceGetConcurrentMetricGroupsExp + :project: LevelZero + + + +Concurrentmetricgroup Enums +------------------------------------------------------------------------------ + + +.. _zet-concurrent-metric-groups-exp-version-t: + +zet_concurrent_metric_groups_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_concurrent_metric_groups_exp_version_t + :project: LevelZero + + + + + +Metrictracer +============================================================ +* Functions + + + * :ref:`zetMetricTracerCreateExp` + * :ref:`zetMetricTracerDestroyExp` + * :ref:`zetMetricTracerEnableExp` + * :ref:`zetMetricTracerDisableExp` + * :ref:`zetMetricTracerReadDataExp` + * :ref:`zetMetricDecoderCreateExp` + * :ref:`zetMetricDecoderDestroyExp` + * :ref:`zetMetricDecoderGetDecodableMetricsExp` + * :ref:`zetMetricTracerDecodeExp` + + +* Enumerations + + + * :ref:`zet-metric-tracer-exp-version-t` + + +* Structures + + + * :ref:`zet-metric-tracer-exp-desc-t` + * :ref:`zet-metric-entry-exp-t` + + +Metrictracer Functions +------------------------------------------------------------------------------ + + +.. _zetMetricTracerCreateExp: + +zetMetricTracerCreateExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricTracerCreateExp + :project: LevelZero + + +.. _zetMetricTracerDestroyExp: + +zetMetricTracerDestroyExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricTracerDestroyExp + :project: LevelZero + + +.. _zetMetricTracerEnableExp: + +zetMetricTracerEnableExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricTracerEnableExp + :project: LevelZero + + +.. _zetMetricTracerDisableExp: + +zetMetricTracerDisableExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricTracerDisableExp + :project: LevelZero + + +.. _zetMetricTracerReadDataExp: + +zetMetricTracerReadDataExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricTracerReadDataExp + :project: LevelZero + + +.. _zetMetricDecoderCreateExp: + +zetMetricDecoderCreateExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricDecoderCreateExp + :project: LevelZero + + +.. _zetMetricDecoderDestroyExp: + +zetMetricDecoderDestroyExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricDecoderDestroyExp + :project: LevelZero + + +.. _zetMetricDecoderGetDecodableMetricsExp: + +zetMetricDecoderGetDecodableMetricsExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricDecoderGetDecodableMetricsExp + :project: LevelZero + + +.. _zetMetricTracerDecodeExp: + +zetMetricTracerDecodeExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricTracerDecodeExp + :project: LevelZero + + + +Metrictracer Enums +------------------------------------------------------------------------------ + + +.. _zet-metric-tracer-exp-version-t: + +zet_metric_tracer_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_metric_tracer_exp_version_t + :project: LevelZero + + +Metrictracer Structures +------------------------------------------------------------------------------ + +.. _zet-metric-tracer-exp-desc-t: + +zet_metric_tracer_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_tracer_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-metric-entry-exp-t: + +zet_metric_entry_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_entry_exp_t + :project: LevelZero + :members: + :undoc-members: + + + + +Multimetricvalues +============================================================ +* Functions + + + * :ref:`zetMetricGroupCalculateMultipleMetricValuesExp` + + +* Enumerations + + + * :ref:`ze-calculate-multiple-metrics-exp-version-t` + + + + +Multimetricvalues Functions +------------------------------------------------------------------------------ + + +.. _zetMetricGroupCalculateMultipleMetricValuesExp: + +zetMetricGroupCalculateMultipleMetricValuesExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGroupCalculateMultipleMetricValuesExp + :project: LevelZero + + + +Multimetricvalues Enums +------------------------------------------------------------------------------ + + +.. _ze-calculate-multiple-metrics-exp-version-t: + +ze_calculate_multiple_metrics_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_calculate_multiple_metrics_exp_version_t + :project: LevelZero + + + + + +Globaltimestamps +============================================================ +* Functions + + + * :ref:`zetMetricGroupGetGlobalTimestampsExp` + + +* Enumerations + + + * :ref:`ze-metric-global-timestamps-exp-version-t` + + +* Structures + + + * :ref:`zet-metric-global-timestamps-resolution-exp-t` + + +Globaltimestamps Functions +------------------------------------------------------------------------------ + + +.. _zetMetricGroupGetGlobalTimestampsExp: + +zetMetricGroupGetGlobalTimestampsExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGroupGetGlobalTimestampsExp + :project: LevelZero + + + +Globaltimestamps Enums +------------------------------------------------------------------------------ + + +.. _ze-metric-global-timestamps-exp-version-t: + +ze_metric_global_timestamps_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: ze_metric_global_timestamps_exp_version_t + :project: LevelZero + + +Globaltimestamps Structures +------------------------------------------------------------------------------ + +.. _zet-metric-global-timestamps-resolution-exp-t: + +zet_metric_global_timestamps_resolution_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_global_timestamps_resolution_exp_t + :project: LevelZero + :members: + :undoc-members: + + + + +Metricexportdata +============================================================ +* Functions + + + * :ref:`zetMetricGroupGetExportDataExp` + * :ref:`zetMetricGroupCalculateMetricExportDataExp` + + +* Enumerations + + + * :ref:`zet-export-metric-data-exp-version-t` + + +* Structures + + + * :ref:`zet-metric-calculate-exp-desc-t` + + +Metricexportdata Functions +------------------------------------------------------------------------------ + + +.. _zetMetricGroupGetExportDataExp: + +zetMetricGroupGetExportDataExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGroupGetExportDataExp + :project: LevelZero + + +.. _zetMetricGroupCalculateMetricExportDataExp: + +zetMetricGroupCalculateMetricExportDataExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGroupCalculateMetricExportDataExp + :project: LevelZero + + + +Metricexportdata Enums +------------------------------------------------------------------------------ + + +.. _zet-export-metric-data-exp-version-t: + +zet_export_metric_data_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_export_metric_data_exp_version_t + :project: LevelZero + + +Metricexportdata Structures +------------------------------------------------------------------------------ + +.. _zet-metric-calculate-exp-desc-t: + +zet_metric_calculate_exp_desc_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_calculate_exp_desc_t + :project: LevelZero + :members: + :undoc-members: + + + + +Metricprogrammable +============================================================ +* Functions + + + * :ref:`zetMetricProgrammableGetExp` + * :ref:`zetMetricProgrammableGetPropertiesExp` + * :ref:`zetMetricProgrammableGetParamInfoExp` + * :ref:`zetMetricProgrammableGetParamValueInfoExp` + * :ref:`zetMetricCreateFromProgrammableExp` + * :ref:`zetDeviceCreateMetricGroupsFromMetricsExp` + * :ref:`zetMetricGroupAddMetricExp` + * :ref:`zetMetricGroupRemoveMetricExp` + * :ref:`zetMetricGroupCloseExp` + * :ref:`zetMetricGroupDestroyExp` + * :ref:`zetMetricDestroyExp` + + +* Enumerations + + + * :ref:`zet-metric-programmable-exp-version-t` + * :ref:`zet-metric-programmable-param-type-exp-t` + * :ref:`zet-value-info-type-exp-t` + + +* Structures + + + * :ref:`zet-metric-programmable-exp-properties-t` + * :ref:`zet-value-uint64-range-exp-t` + * :ref:`zet-value-fp64-range-exp-t` + * :ref:`zet-value-info-exp-t` + * :ref:`zet-metric-programmable-param-info-exp-t` + * :ref:`zet-metric-programmable-param-value-info-exp-t` + * :ref:`zet-metric-programmable-param-value-exp-t` + + +Metricprogrammable Functions +------------------------------------------------------------------------------ + + +.. _zetMetricProgrammableGetExp: + +zetMetricProgrammableGetExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricProgrammableGetExp + :project: LevelZero + + +.. _zetMetricProgrammableGetPropertiesExp: + +zetMetricProgrammableGetPropertiesExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricProgrammableGetPropertiesExp + :project: LevelZero + + +.. _zetMetricProgrammableGetParamInfoExp: + +zetMetricProgrammableGetParamInfoExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricProgrammableGetParamInfoExp + :project: LevelZero + + +.. _zetMetricProgrammableGetParamValueInfoExp: + +zetMetricProgrammableGetParamValueInfoExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricProgrammableGetParamValueInfoExp + :project: LevelZero + + +.. _zetMetricCreateFromProgrammableExp: + +zetMetricCreateFromProgrammableExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricCreateFromProgrammableExp + :project: LevelZero + + +.. _zetDeviceCreateMetricGroupsFromMetricsExp: + +zetDeviceCreateMetricGroupsFromMetricsExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetDeviceCreateMetricGroupsFromMetricsExp + :project: LevelZero + + +.. _zetMetricGroupAddMetricExp: + +zetMetricGroupAddMetricExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGroupAddMetricExp + :project: LevelZero + + +.. _zetMetricGroupRemoveMetricExp: + +zetMetricGroupRemoveMetricExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGroupRemoveMetricExp + :project: LevelZero + + +.. _zetMetricGroupCloseExp: + +zetMetricGroupCloseExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGroupCloseExp + :project: LevelZero + + +.. _zetMetricGroupDestroyExp: + +zetMetricGroupDestroyExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricGroupDestroyExp + :project: LevelZero + + +.. _zetMetricDestroyExp: + +zetMetricDestroyExp +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenfunction:: zetMetricDestroyExp + :project: LevelZero + + + +Metricprogrammable Enums +------------------------------------------------------------------------------ + + +.. _zet-metric-programmable-exp-version-t: + +zet_metric_programmable_exp_version_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_metric_programmable_exp_version_t + :project: LevelZero + + +.. _zet-metric-programmable-param-type-exp-t: + +zet_metric_programmable_param_type_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_metric_programmable_param_type_exp_t + :project: LevelZero + + +.. _zet-value-info-type-exp-t: + +zet_value_info_type_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenenum:: zet_value_info_type_exp_t + :project: LevelZero + + +Metricprogrammable Structures +------------------------------------------------------------------------------ + +.. _zet-metric-programmable-exp-properties-t: + +zet_metric_programmable_exp_properties_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_programmable_exp_properties_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-value-uint64-range-exp-t: + +zet_value_uint64_range_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_value_uint64_range_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-value-fp64-range-exp-t: + +zet_value_fp64_range_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_value_fp64_range_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-value-info-exp-t: + +zet_value_info_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenunion:: zet_value_info_exp_t + :project: LevelZero + +.. _zet-metric-programmable-param-info-exp-t: + +zet_metric_programmable_param_info_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_programmable_param_info_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-metric-programmable-param-value-info-exp-t: + +zet_metric_programmable_param_value_info_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_programmable_param_value_info_exp_t + :project: LevelZero + :members: + :undoc-members: + +.. _zet-metric-programmable-param-value-exp-t: + +zet_metric_programmable_param_value_exp_t +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. doxygenstruct:: zet_metric_programmable_param_value_exp_t + :project: LevelZero + :members: + :undoc-members: + + diff --git a/level-zero/1.10/_sources/versions.rst b/level-zero/1.10/_sources/versions.rst new file mode 100644 index 0000000..65798e3 --- /dev/null +++ b/level-zero/1.10/_sources/versions.rst @@ -0,0 +1,6 @@ + +=================== + Versions +=================== + +https://spec.oneapi.io/releases/index.html#level-zero diff --git a/level-zero/1.10/_static/basic.css b/level-zero/1.10/_static/basic.css new file mode 100644 index 0000000..2af6139 --- /dev/null +++ b/level-zero/1.10/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/level-zero/1.10/_static/doctools.js b/level-zero/1.10/_static/doctools.js new file mode 100644 index 0000000..4d67807 --- /dev/null +++ b/level-zero/1.10/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/level-zero/1.10/_static/documentation_options.js b/level-zero/1.10/_static/documentation_options.js new file mode 100644 index 0000000..dab586c --- /dev/null +++ b/level-zero/1.10/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/level-zero/1.10/_static/file.png b/level-zero/1.10/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/level-zero/1.10/_static/file.png differ diff --git a/level-zero/1.10/_static/images/logo_binder.svg b/level-zero/1.10/_static/images/logo_binder.svg new file mode 100644 index 0000000..45fecf7 --- /dev/null +++ b/level-zero/1.10/_static/images/logo_binder.svg @@ -0,0 +1,19 @@ + + + + +logo + + + + + + + + diff --git a/level-zero/1.10/_static/images/logo_colab.png b/level-zero/1.10/_static/images/logo_colab.png new file mode 100644 index 0000000..b7560ec Binary files /dev/null and b/level-zero/1.10/_static/images/logo_colab.png differ diff --git a/level-zero/1.10/_static/images/logo_deepnote.svg b/level-zero/1.10/_static/images/logo_deepnote.svg new file mode 100644 index 0000000..fa77ebf --- /dev/null +++ b/level-zero/1.10/_static/images/logo_deepnote.svg @@ -0,0 +1 @@ + diff --git a/level-zero/1.10/_static/images/logo_jupyterhub.svg b/level-zero/1.10/_static/images/logo_jupyterhub.svg new file mode 100644 index 0000000..60cfe9f --- /dev/null +++ b/level-zero/1.10/_static/images/logo_jupyterhub.svg @@ -0,0 +1 @@ +logo_jupyterhubHub diff --git a/level-zero/1.10/_static/language_data.js b/level-zero/1.10/_static/language_data.js new file mode 100644 index 0000000..367b8ed --- /dev/null +++ b/level-zero/1.10/_static/language_data.js @@ -0,0 +1,199 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"]; + + +/* Non-minified version is copied as a separate JS file, if available */ + +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/level-zero/1.10/_static/locales/ar/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/ar/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..15541a6 Binary files /dev/null and b/level-zero/1.10/_static/locales/ar/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/ar/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/ar/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..edae2ec --- /dev/null +++ b/level-zero/1.10/_static/locales/ar/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "موضوع بواسطة" + +msgid "Open an issue" +msgstr "افتح قضية" + +msgid "Contents" +msgstr "محتويات" + +msgid "Download notebook file" +msgstr "تنزيل ملف دفتر الملاحظات" + +msgid "Sphinx Book Theme" +msgstr "موضوع كتاب أبو الهول" + +msgid "Fullscreen mode" +msgstr "وضع ملء الشاشة" + +msgid "Edit this page" +msgstr "قم بتحرير هذه الصفحة" + +msgid "By" +msgstr "بواسطة" + +msgid "Copyright" +msgstr "حقوق النشر" + +msgid "Source repository" +msgstr "مستودع المصدر" + +msgid "previous page" +msgstr "الصفحة السابقة" + +msgid "next page" +msgstr "الصفحة التالية" + +msgid "Toggle navigation" +msgstr "تبديل التنقل" + +msgid "repository" +msgstr "مخزن" + +msgid "suggest edit" +msgstr "أقترح تحرير" + +msgid "open issue" +msgstr "قضية مفتوحة" + +msgid "Launch" +msgstr "إطلاق" + +msgid "Print to PDF" +msgstr "طباعة إلى PDF" + +msgid "By the" +msgstr "بواسطة" + +msgid "Last updated on" +msgstr "آخر تحديث في" + +msgid "Download source file" +msgstr "تنزيل ملف المصدر" + +msgid "Download this page" +msgstr "قم بتنزيل هذه الصفحة" diff --git a/level-zero/1.10/_static/locales/bg/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/bg/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..da95120 Binary files /dev/null and b/level-zero/1.10/_static/locales/bg/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/bg/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/bg/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..1f363b9 --- /dev/null +++ b/level-zero/1.10/_static/locales/bg/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Тема от" + +msgid "Open an issue" +msgstr "Отворете проблем" + +msgid "Contents" +msgstr "Съдържание" + +msgid "Download notebook file" +msgstr "Изтеглете файла на бележника" + +msgid "Sphinx Book Theme" +msgstr "Тема на книгата Sphinx" + +msgid "Fullscreen mode" +msgstr "Режим на цял екран" + +msgid "Edit this page" +msgstr "Редактирайте тази страница" + +msgid "By" +msgstr "От" + +msgid "Copyright" +msgstr "Авторско право" + +msgid "Source repository" +msgstr "Хранилище на източника" + +msgid "previous page" +msgstr "предишна страница" + +msgid "next page" +msgstr "Следваща страница" + +msgid "Toggle navigation" +msgstr "Превключване на навигацията" + +msgid "repository" +msgstr "хранилище" + +msgid "suggest edit" +msgstr "предложи редактиране" + +msgid "open issue" +msgstr "отворен брой" + +msgid "Launch" +msgstr "Стартиране" + +msgid "Print to PDF" +msgstr "Печат в PDF" + +msgid "By the" +msgstr "По" + +msgid "Last updated on" +msgstr "Последна актуализация на" + +msgid "Download source file" +msgstr "Изтеглете изходния файл" + +msgid "Download this page" +msgstr "Изтеглете тази страница" diff --git a/level-zero/1.10/_static/locales/bn/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/bn/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..6b96639 Binary files /dev/null and b/level-zero/1.10/_static/locales/bn/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/bn/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/bn/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..fa54372 --- /dev/null +++ b/level-zero/1.10/_static/locales/bn/LC_MESSAGES/booktheme.po @@ -0,0 +1,63 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "থিম দ্বারা" + +msgid "Open an issue" +msgstr "একটি সমস্যা খুলুন" + +msgid "Download notebook file" +msgstr "নোটবুক ফাইল ডাউনলোড করুন" + +msgid "Sphinx Book Theme" +msgstr "স্পিনিক্স বুক থিম" + +msgid "Edit this page" +msgstr "এই পৃষ্ঠাটি সম্পাদনা করুন" + +msgid "By" +msgstr "দ্বারা" + +msgid "Copyright" +msgstr "কপিরাইট" + +msgid "Source repository" +msgstr "উত্স সংগ্রহস্থল" + +msgid "previous page" +msgstr "আগের পৃষ্ঠা" + +msgid "next page" +msgstr "পরবর্তী পৃষ্ঠা" + +msgid "Toggle navigation" +msgstr "নেভিগেশন টগল করুন" + +msgid "open issue" +msgstr "খোলা সমস্যা" + +msgid "Launch" +msgstr "শুরু করা" + +msgid "Print to PDF" +msgstr "পিডিএফ প্রিন্ট করুন" + +msgid "By the" +msgstr "দ্বারা" + +msgid "Last updated on" +msgstr "সর্বশেষ আপডেট" + +msgid "Download source file" +msgstr "উত্স ফাইল ডাউনলোড করুন" + +msgid "Download this page" +msgstr "এই পৃষ্ঠাটি ডাউনলোড করুন" diff --git a/level-zero/1.10/_static/locales/ca/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/ca/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..a4dd30e Binary files /dev/null and b/level-zero/1.10/_static/locales/ca/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/ca/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/ca/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..22f1569 --- /dev/null +++ b/level-zero/1.10/_static/locales/ca/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema del" + +msgid "Open an issue" +msgstr "Obriu un número" + +msgid "Download notebook file" +msgstr "Descarregar fitxer de quadern" + +msgid "Sphinx Book Theme" +msgstr "Tema del llibre Esfinx" + +msgid "Edit this page" +msgstr "Editeu aquesta pàgina" + +msgid "By" +msgstr "Per" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Source repository" +msgstr "Dipòsit de fonts" + +msgid "previous page" +msgstr "Pàgina anterior" + +msgid "next page" +msgstr "pàgina següent" + +msgid "Toggle navigation" +msgstr "Commuta la navegació" + +msgid "suggest edit" +msgstr "suggerir edició" + +msgid "open issue" +msgstr "número obert" + +msgid "Launch" +msgstr "Llançament" + +msgid "Print to PDF" +msgstr "Imprimeix a PDF" + +msgid "By the" +msgstr "Per la" + +msgid "Last updated on" +msgstr "Darrera actualització el" + +msgid "Download source file" +msgstr "Baixeu el fitxer font" + +msgid "Download this page" +msgstr "Descarregueu aquesta pàgina" diff --git a/level-zero/1.10/_static/locales/cs/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/cs/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..c39e01a Binary files /dev/null and b/level-zero/1.10/_static/locales/cs/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/cs/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/cs/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..afecd9e --- /dev/null +++ b/level-zero/1.10/_static/locales/cs/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: cs\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Téma od" + +msgid "Open an issue" +msgstr "Otevřete problém" + +msgid "Contents" +msgstr "Obsah" + +msgid "Download notebook file" +msgstr "Stáhnout soubor poznámkového bloku" + +msgid "Sphinx Book Theme" +msgstr "Téma knihy Sfinga" + +msgid "Fullscreen mode" +msgstr "Režim celé obrazovky" + +msgid "Edit this page" +msgstr "Upravit tuto stránku" + +msgid "By" +msgstr "Podle" + +msgid "Copyright" +msgstr "autorská práva" + +msgid "Source repository" +msgstr "Zdrojové úložiště" + +msgid "previous page" +msgstr "předchozí stránka" + +msgid "next page" +msgstr "další strana" + +msgid "Toggle navigation" +msgstr "Přepnout navigaci" + +msgid "repository" +msgstr "úložiště" + +msgid "suggest edit" +msgstr "navrhnout úpravy" + +msgid "open issue" +msgstr "otevřené číslo" + +msgid "Launch" +msgstr "Zahájení" + +msgid "Print to PDF" +msgstr "Tisk do PDF" + +msgid "By the" +msgstr "Podle" + +msgid "Last updated on" +msgstr "Naposledy aktualizováno" + +msgid "Download source file" +msgstr "Stáhněte si zdrojový soubor" + +msgid "Download this page" +msgstr "Stáhněte si tuto stránku" diff --git a/level-zero/1.10/_static/locales/da/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/da/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..f43157d Binary files /dev/null and b/level-zero/1.10/_static/locales/da/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/da/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/da/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..649c78a --- /dev/null +++ b/level-zero/1.10/_static/locales/da/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema af" + +msgid "Open an issue" +msgstr "Åbn et problem" + +msgid "Contents" +msgstr "Indhold" + +msgid "Download notebook file" +msgstr "Download notesbog-fil" + +msgid "Sphinx Book Theme" +msgstr "Sphinx bogtema" + +msgid "Fullscreen mode" +msgstr "Fuldskærmstilstand" + +msgid "Edit this page" +msgstr "Rediger denne side" + +msgid "By" +msgstr "Ved" + +msgid "Copyright" +msgstr "ophavsret" + +msgid "Source repository" +msgstr "Kildelager" + +msgid "previous page" +msgstr "forrige side" + +msgid "next page" +msgstr "Næste side" + +msgid "Toggle navigation" +msgstr "Skift navigation" + +msgid "repository" +msgstr "lager" + +msgid "suggest edit" +msgstr "foreslå redigering" + +msgid "open issue" +msgstr "åbent nummer" + +msgid "Launch" +msgstr "Start" + +msgid "Print to PDF" +msgstr "Udskriv til PDF" + +msgid "By the" +msgstr "Ved" + +msgid "Last updated on" +msgstr "Sidst opdateret den" + +msgid "Download source file" +msgstr "Download kildefil" + +msgid "Download this page" +msgstr "Download denne side" diff --git a/level-zero/1.10/_static/locales/de/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/de/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..648b565 Binary files /dev/null and b/level-zero/1.10/_static/locales/de/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/de/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/de/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..f51d2ec --- /dev/null +++ b/level-zero/1.10/_static/locales/de/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Thema von der" + +msgid "Open an issue" +msgstr "Öffnen Sie ein Problem" + +msgid "Contents" +msgstr "Inhalt" + +msgid "Download notebook file" +msgstr "Notebook-Datei herunterladen" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-Buch-Thema" + +msgid "Fullscreen mode" +msgstr "Vollbildmodus" + +msgid "Edit this page" +msgstr "Bearbeite diese Seite" + +msgid "By" +msgstr "Durch" + +msgid "Copyright" +msgstr "Urheberrechte ©" + +msgid "Source repository" +msgstr "Quell-Repository" + +msgid "previous page" +msgstr "vorherige Seite" + +msgid "next page" +msgstr "Nächste Seite" + +msgid "Toggle navigation" +msgstr "Navigation umschalten" + +msgid "repository" +msgstr "Repository" + +msgid "suggest edit" +msgstr "vorschlagen zu bearbeiten" + +msgid "open issue" +msgstr "offenes Thema" + +msgid "Launch" +msgstr "Starten" + +msgid "Print to PDF" +msgstr "In PDF drucken" + +msgid "By the" +msgstr "Bis zum" + +msgid "Last updated on" +msgstr "Zuletzt aktualisiert am" + +msgid "Download source file" +msgstr "Quelldatei herunterladen" + +msgid "Download this page" +msgstr "Laden Sie diese Seite herunter" diff --git a/level-zero/1.10/_static/locales/el/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/el/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..fca6e93 Binary files /dev/null and b/level-zero/1.10/_static/locales/el/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/el/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/el/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..8bec790 --- /dev/null +++ b/level-zero/1.10/_static/locales/el/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: el\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Θέμα από το" + +msgid "Open an issue" +msgstr "Ανοίξτε ένα ζήτημα" + +msgid "Contents" +msgstr "Περιεχόμενα" + +msgid "Download notebook file" +msgstr "Λήψη αρχείου σημειωματάριου" + +msgid "Sphinx Book Theme" +msgstr "Θέμα βιβλίου Sphinx" + +msgid "Fullscreen mode" +msgstr "ΛΕΙΤΟΥΡΓΙΑ ΠΛΗΡΟΥΣ ΟΘΟΝΗΣ" + +msgid "Edit this page" +msgstr "Επεξεργαστείτε αυτήν τη σελίδα" + +msgid "By" +msgstr "Με" + +msgid "Copyright" +msgstr "Πνευματική ιδιοκτησία" + +msgid "Source repository" +msgstr "Αποθήκη πηγής" + +msgid "previous page" +msgstr "προηγούμενη σελίδα" + +msgid "next page" +msgstr "επόμενη σελίδα" + +msgid "Toggle navigation" +msgstr "Εναλλαγή πλοήγησης" + +msgid "repository" +msgstr "αποθήκη" + +msgid "suggest edit" +msgstr "προτείνω επεξεργασία" + +msgid "open issue" +msgstr "ανοιχτό ζήτημα" + +msgid "Launch" +msgstr "Εκτόξευση" + +msgid "Print to PDF" +msgstr "Εκτύπωση σε PDF" + +msgid "By the" +msgstr "Από το" + +msgid "Last updated on" +msgstr "Τελευταία ενημέρωση στις" + +msgid "Download source file" +msgstr "Λήψη αρχείου προέλευσης" + +msgid "Download this page" +msgstr "Λήψη αυτής της σελίδας" diff --git a/level-zero/1.10/_static/locales/eo/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/eo/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..d1072bb Binary files /dev/null and b/level-zero/1.10/_static/locales/eo/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/eo/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/eo/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..d72a048 --- /dev/null +++ b/level-zero/1.10/_static/locales/eo/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: eo\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Temo de la" + +msgid "Open an issue" +msgstr "Malfermu numeron" + +msgid "Contents" +msgstr "Enhavo" + +msgid "Download notebook file" +msgstr "Elŝutu kajeran dosieron" + +msgid "Sphinx Book Theme" +msgstr "Sfinksa Libro-Temo" + +msgid "Fullscreen mode" +msgstr "Plenekrana reĝimo" + +msgid "Edit this page" +msgstr "Redaktu ĉi tiun paĝon" + +msgid "By" +msgstr "De" + +msgid "Copyright" +msgstr "Kopirajto" + +msgid "Source repository" +msgstr "Fonto-deponejo" + +msgid "previous page" +msgstr "antaŭa paĝo" + +msgid "next page" +msgstr "sekva paĝo" + +msgid "Toggle navigation" +msgstr "Ŝalti navigadon" + +msgid "repository" +msgstr "deponejo" + +msgid "suggest edit" +msgstr "sugesti redaktadon" + +msgid "open issue" +msgstr "malferma numero" + +msgid "Launch" +msgstr "Lanĉo" + +msgid "Print to PDF" +msgstr "Presi al PDF" + +msgid "By the" +msgstr "Per la" + +msgid "Last updated on" +msgstr "Laste ĝisdatigita la" + +msgid "Download source file" +msgstr "Elŝutu fontodosieron" + +msgid "Download this page" +msgstr "Elŝutu ĉi tiun paĝon" diff --git a/level-zero/1.10/_static/locales/es/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/es/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..ba2ee4d Binary files /dev/null and b/level-zero/1.10/_static/locales/es/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/es/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/es/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..611834b --- /dev/null +++ b/level-zero/1.10/_static/locales/es/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema por el" + +msgid "Open an issue" +msgstr "Abrir un problema" + +msgid "Contents" +msgstr "Contenido" + +msgid "Download notebook file" +msgstr "Descargar archivo de cuaderno" + +msgid "Sphinx Book Theme" +msgstr "Tema del libro de la esfinge" + +msgid "Fullscreen mode" +msgstr "Modo de pantalla completa" + +msgid "Edit this page" +msgstr "Edita esta página" + +msgid "By" +msgstr "Por" + +msgid "Copyright" +msgstr "Derechos de autor" + +msgid "Source repository" +msgstr "Repositorio de origen" + +msgid "previous page" +msgstr "pagina anterior" + +msgid "next page" +msgstr "siguiente página" + +msgid "Toggle navigation" +msgstr "Navegación de palanca" + +msgid "repository" +msgstr "repositorio" + +msgid "suggest edit" +msgstr "sugerir editar" + +msgid "open issue" +msgstr "Tema abierto" + +msgid "Launch" +msgstr "Lanzamiento" + +msgid "Print to PDF" +msgstr "Imprimir en PDF" + +msgid "By the" +msgstr "Por el" + +msgid "Last updated on" +msgstr "Ultima actualización en" + +msgid "Download source file" +msgstr "Descargar archivo fuente" + +msgid "Download this page" +msgstr "Descarga esta pagina" diff --git a/level-zero/1.10/_static/locales/et/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/et/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..983b823 Binary files /dev/null and b/level-zero/1.10/_static/locales/et/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/et/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/et/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..345088f --- /dev/null +++ b/level-zero/1.10/_static/locales/et/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Teema" + +msgid "Open an issue" +msgstr "Avage probleem" + +msgid "Contents" +msgstr "Sisu" + +msgid "Download notebook file" +msgstr "Laadige sülearvuti fail alla" + +msgid "Sphinx Book Theme" +msgstr "Sfinksiraamatu teema" + +msgid "Fullscreen mode" +msgstr "Täisekraanirežiim" + +msgid "Edit this page" +msgstr "Muutke seda lehte" + +msgid "By" +msgstr "Kõrval" + +msgid "Copyright" +msgstr "Autoriõigus" + +msgid "Source repository" +msgstr "Allikahoidla" + +msgid "previous page" +msgstr "eelmine leht" + +msgid "next page" +msgstr "järgmine leht" + +msgid "Toggle navigation" +msgstr "Lülita navigeerimine sisse" + +msgid "repository" +msgstr "hoidla" + +msgid "suggest edit" +msgstr "soovita muuta" + +msgid "open issue" +msgstr "avatud küsimus" + +msgid "Launch" +msgstr "Käivitage" + +msgid "Print to PDF" +msgstr "Prindi PDF-i" + +msgid "By the" +msgstr "Autor" + +msgid "Last updated on" +msgstr "Viimati uuendatud" + +msgid "Download source file" +msgstr "Laadige alla lähtefail" + +msgid "Download this page" +msgstr "Laadige see leht alla" diff --git a/level-zero/1.10/_static/locales/fi/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/fi/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..d8ac054 Binary files /dev/null and b/level-zero/1.10/_static/locales/fi/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/fi/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/fi/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..d97a08d --- /dev/null +++ b/level-zero/1.10/_static/locales/fi/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Teeman tekijä" + +msgid "Open an issue" +msgstr "Avaa ongelma" + +msgid "Contents" +msgstr "Sisällys" + +msgid "Download notebook file" +msgstr "Lataa muistikirjatiedosto" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-kirjan teema" + +msgid "Fullscreen mode" +msgstr "Koko näytön tila" + +msgid "Edit this page" +msgstr "Muokkaa tätä sivua" + +msgid "By" +msgstr "Tekijä" + +msgid "Copyright" +msgstr "Tekijänoikeus" + +msgid "Source repository" +msgstr "Lähteen arkisto" + +msgid "previous page" +msgstr "Edellinen sivu" + +msgid "next page" +msgstr "seuraava sivu" + +msgid "Toggle navigation" +msgstr "Vaihda navigointia" + +msgid "repository" +msgstr "arkisto" + +msgid "suggest edit" +msgstr "ehdottaa muokkausta" + +msgid "open issue" +msgstr "avoin ongelma" + +msgid "Launch" +msgstr "Tuoda markkinoille" + +msgid "Print to PDF" +msgstr "Tulosta PDF-tiedostoon" + +msgid "By the" +msgstr "Mukaan" + +msgid "Last updated on" +msgstr "Viimeksi päivitetty" + +msgid "Download source file" +msgstr "Lataa lähdetiedosto" + +msgid "Download this page" +msgstr "Lataa tämä sivu" diff --git a/level-zero/1.10/_static/locales/fr/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/fr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..f663d39 Binary files /dev/null and b/level-zero/1.10/_static/locales/fr/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/fr/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/fr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..88f3517 --- /dev/null +++ b/level-zero/1.10/_static/locales/fr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Thème par le" + +msgid "Open an issue" +msgstr "Ouvrez un problème" + +msgid "Contents" +msgstr "Contenu" + +msgid "Download notebook file" +msgstr "Télécharger le fichier notebook" + +msgid "Sphinx Book Theme" +msgstr "Thème du livre Sphinx" + +msgid "Fullscreen mode" +msgstr "Mode plein écran" + +msgid "Edit this page" +msgstr "Modifier cette page" + +msgid "By" +msgstr "Par" + +msgid "Copyright" +msgstr "droits d'auteur" + +msgid "Source repository" +msgstr "Dépôt source" + +msgid "previous page" +msgstr "page précédente" + +msgid "next page" +msgstr "page suivante" + +msgid "Toggle navigation" +msgstr "Basculer la navigation" + +msgid "repository" +msgstr "dépôt" + +msgid "suggest edit" +msgstr "suggestion de modification" + +msgid "open issue" +msgstr "signaler un problème" + +msgid "Launch" +msgstr "lancement" + +msgid "Print to PDF" +msgstr "Imprimer au format PDF" + +msgid "By the" +msgstr "Par le" + +msgid "Last updated on" +msgstr "Dernière mise à jour le" + +msgid "Download source file" +msgstr "Télécharger le fichier source" + +msgid "Download this page" +msgstr "Téléchargez cette page" diff --git a/level-zero/1.10/_static/locales/hr/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/hr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..eca4a1a Binary files /dev/null and b/level-zero/1.10/_static/locales/hr/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/hr/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/hr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..fb9440a --- /dev/null +++ b/level-zero/1.10/_static/locales/hr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema autora" + +msgid "Open an issue" +msgstr "Otvorite izdanje" + +msgid "Contents" +msgstr "Sadržaj" + +msgid "Download notebook file" +msgstr "Preuzmi datoteku bilježnice" + +msgid "Sphinx Book Theme" +msgstr "Tema knjige Sphinx" + +msgid "Fullscreen mode" +msgstr "Način preko cijelog zaslona" + +msgid "Edit this page" +msgstr "Uredite ovu stranicu" + +msgid "By" +msgstr "Po" + +msgid "Copyright" +msgstr "Autorska prava" + +msgid "Source repository" +msgstr "Izvorno spremište" + +msgid "previous page" +msgstr "Prethodna stranica" + +msgid "next page" +msgstr "sljedeća stranica" + +msgid "Toggle navigation" +msgstr "Uključi / isključi navigaciju" + +msgid "repository" +msgstr "spremište" + +msgid "suggest edit" +msgstr "predloži uređivanje" + +msgid "open issue" +msgstr "otvoreno izdanje" + +msgid "Launch" +msgstr "Pokrenite" + +msgid "Print to PDF" +msgstr "Ispis u PDF" + +msgid "By the" +msgstr "Od strane" + +msgid "Last updated on" +msgstr "Posljednje ažuriranje:" + +msgid "Download source file" +msgstr "Preuzmi izvornu datoteku" + +msgid "Download this page" +msgstr "Preuzmite ovu stranicu" diff --git a/level-zero/1.10/_static/locales/id/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/id/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..d07a06a Binary files /dev/null and b/level-zero/1.10/_static/locales/id/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/id/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/id/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..9ffb56f --- /dev/null +++ b/level-zero/1.10/_static/locales/id/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: id\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema oleh" + +msgid "Open an issue" +msgstr "Buka masalah" + +msgid "Contents" +msgstr "Isi" + +msgid "Download notebook file" +msgstr "Unduh file notebook" + +msgid "Sphinx Book Theme" +msgstr "Tema Buku Sphinx" + +msgid "Fullscreen mode" +msgstr "Mode layar penuh" + +msgid "Edit this page" +msgstr "Edit halaman ini" + +msgid "By" +msgstr "Oleh" + +msgid "Copyright" +msgstr "hak cipta" + +msgid "Source repository" +msgstr "Repositori sumber" + +msgid "previous page" +msgstr "halaman sebelumnya" + +msgid "next page" +msgstr "halaman selanjutnya" + +msgid "Toggle navigation" +msgstr "Alihkan navigasi" + +msgid "repository" +msgstr "gudang" + +msgid "suggest edit" +msgstr "menyarankan edit" + +msgid "open issue" +msgstr "masalah terbuka" + +msgid "Launch" +msgstr "Meluncurkan" + +msgid "Print to PDF" +msgstr "Cetak ke PDF" + +msgid "By the" +msgstr "Oleh" + +msgid "Last updated on" +msgstr "Terakhir diperbarui saat" + +msgid "Download source file" +msgstr "Unduh file sumber" + +msgid "Download this page" +msgstr "Unduh halaman ini" diff --git a/level-zero/1.10/_static/locales/it/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/it/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..53ba476 Binary files /dev/null and b/level-zero/1.10/_static/locales/it/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/it/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/it/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..04308dd --- /dev/null +++ b/level-zero/1.10/_static/locales/it/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema di" + +msgid "Open an issue" +msgstr "Apri un problema" + +msgid "Contents" +msgstr "Contenuti" + +msgid "Download notebook file" +msgstr "Scarica il file del taccuino" + +msgid "Sphinx Book Theme" +msgstr "Tema del libro della Sfinge" + +msgid "Fullscreen mode" +msgstr "Modalità schermo intero" + +msgid "Edit this page" +msgstr "Modifica questa pagina" + +msgid "By" +msgstr "Di" + +msgid "Copyright" +msgstr "Diritto d'autore" + +msgid "Source repository" +msgstr "Repository di origine" + +msgid "previous page" +msgstr "pagina precedente" + +msgid "next page" +msgstr "pagina successiva" + +msgid "Toggle navigation" +msgstr "Attiva / disattiva la navigazione" + +msgid "repository" +msgstr "repository" + +msgid "suggest edit" +msgstr "suggerisci modifica" + +msgid "open issue" +msgstr "questione aperta" + +msgid "Launch" +msgstr "Lanciare" + +msgid "Print to PDF" +msgstr "Stampa in PDF" + +msgid "By the" +msgstr "Dal" + +msgid "Last updated on" +msgstr "Ultimo aggiornamento il" + +msgid "Download source file" +msgstr "Scarica il file sorgente" + +msgid "Download this page" +msgstr "Scarica questa pagina" diff --git a/level-zero/1.10/_static/locales/iw/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/iw/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..a45c657 Binary files /dev/null and b/level-zero/1.10/_static/locales/iw/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/iw/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/iw/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..4ea190d --- /dev/null +++ b/level-zero/1.10/_static/locales/iw/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: iw\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "נושא מאת" + +msgid "Open an issue" +msgstr "פתח גיליון" + +msgid "Contents" +msgstr "תוכן" + +msgid "Download notebook file" +msgstr "הורד קובץ מחברת" + +msgid "Sphinx Book Theme" +msgstr "נושא ספר ספינקס" + +msgid "Fullscreen mode" +msgstr "מצב מסך מלא" + +msgid "Edit this page" +msgstr "ערוך דף זה" + +msgid "By" +msgstr "על ידי" + +msgid "Copyright" +msgstr "זכויות יוצרים" + +msgid "Source repository" +msgstr "מאגר המקורות" + +msgid "previous page" +msgstr "עמוד קודם" + +msgid "next page" +msgstr "עמוד הבא" + +msgid "Toggle navigation" +msgstr "החלף ניווט" + +msgid "repository" +msgstr "מאגר" + +msgid "suggest edit" +msgstr "מציע לערוך" + +msgid "open issue" +msgstr "בעיה פתוחה" + +msgid "Launch" +msgstr "לְהַשִׁיק" + +msgid "Print to PDF" +msgstr "הדפס לקובץ PDF" + +msgid "By the" +msgstr "דרך" + +msgid "Last updated on" +msgstr "עודכן לאחרונה ב" + +msgid "Download source file" +msgstr "הורד את קובץ המקור" + +msgid "Download this page" +msgstr "הורד דף זה" diff --git a/level-zero/1.10/_static/locales/ja/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/ja/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..1cefd29 Binary files /dev/null and b/level-zero/1.10/_static/locales/ja/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/ja/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/ja/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..77d5a09 --- /dev/null +++ b/level-zero/1.10/_static/locales/ja/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ja\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "のテーマ" + +msgid "Open an issue" +msgstr "問題を報告" + +msgid "Contents" +msgstr "目次" + +msgid "Download notebook file" +msgstr "ノートブックファイルをダウンロード" + +msgid "Sphinx Book Theme" +msgstr "スフィンクスの本のテーマ" + +msgid "Fullscreen mode" +msgstr "全画面モード" + +msgid "Edit this page" +msgstr "このページを編集" + +msgid "By" +msgstr "著者" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Source repository" +msgstr "ソースリポジトリ" + +msgid "previous page" +msgstr "前のページ" + +msgid "next page" +msgstr "次のページ" + +msgid "Toggle navigation" +msgstr "ナビゲーションを切り替え" + +msgid "repository" +msgstr "リポジトリ" + +msgid "suggest edit" +msgstr "編集を提案する" + +msgid "open issue" +msgstr "未解決の問題" + +msgid "Launch" +msgstr "起動" + +msgid "Print to PDF" +msgstr "PDFに印刷" + +msgid "By the" +msgstr "によって" + +msgid "Last updated on" +msgstr "最終更新日" + +msgid "Download source file" +msgstr "ソースファイルをダウンロード" + +msgid "Download this page" +msgstr "このページをダウンロード" diff --git a/level-zero/1.10/_static/locales/ko/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/ko/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..06c7ec9 Binary files /dev/null and b/level-zero/1.10/_static/locales/ko/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/ko/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/ko/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..6ee3d78 --- /dev/null +++ b/level-zero/1.10/_static/locales/ko/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ko\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "테마별" + +msgid "Open an issue" +msgstr "이슈 열기" + +msgid "Contents" +msgstr "내용" + +msgid "Download notebook file" +msgstr "노트북 파일 다운로드" + +msgid "Sphinx Book Theme" +msgstr "스핑크스 도서 테마" + +msgid "Fullscreen mode" +msgstr "전체 화면으로보기" + +msgid "Edit this page" +msgstr "이 페이지 편집" + +msgid "By" +msgstr "으로" + +msgid "Copyright" +msgstr "저작권" + +msgid "Source repository" +msgstr "소스 저장소" + +msgid "previous page" +msgstr "이전 페이지" + +msgid "next page" +msgstr "다음 페이지" + +msgid "Toggle navigation" +msgstr "탐색 전환" + +msgid "repository" +msgstr "저장소" + +msgid "suggest edit" +msgstr "편집 제안" + +msgid "open issue" +msgstr "열린 문제" + +msgid "Launch" +msgstr "시작하다" + +msgid "Print to PDF" +msgstr "PDF로 인쇄" + +msgid "By the" +msgstr "에 의해" + +msgid "Last updated on" +msgstr "마지막 업데이트" + +msgid "Download source file" +msgstr "소스 파일 다운로드" + +msgid "Download this page" +msgstr "이 페이지 다운로드" diff --git a/level-zero/1.10/_static/locales/lt/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/lt/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..4468ba0 Binary files /dev/null and b/level-zero/1.10/_static/locales/lt/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/lt/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/lt/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..01be267 --- /dev/null +++ b/level-zero/1.10/_static/locales/lt/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema" + +msgid "Open an issue" +msgstr "Atidarykite problemą" + +msgid "Contents" +msgstr "Turinys" + +msgid "Download notebook file" +msgstr "Atsisiųsti nešiojamojo kompiuterio failą" + +msgid "Sphinx Book Theme" +msgstr "Sfinkso knygos tema" + +msgid "Fullscreen mode" +msgstr "Pilno ekrano režimas" + +msgid "Edit this page" +msgstr "Redaguoti šį puslapį" + +msgid "By" +msgstr "Iki" + +msgid "Copyright" +msgstr "Autorių teisės" + +msgid "Source repository" +msgstr "Šaltinio saugykla" + +msgid "previous page" +msgstr "Ankstesnis puslapis" + +msgid "next page" +msgstr "Kitas puslapis" + +msgid "Toggle navigation" +msgstr "Perjungti naršymą" + +msgid "repository" +msgstr "saugykla" + +msgid "suggest edit" +msgstr "pasiūlyti redaguoti" + +msgid "open issue" +msgstr "atviras klausimas" + +msgid "Launch" +msgstr "Paleiskite" + +msgid "Print to PDF" +msgstr "Spausdinti į PDF" + +msgid "By the" +msgstr "Prie" + +msgid "Last updated on" +msgstr "Paskutinį kartą atnaujinta" + +msgid "Download source file" +msgstr "Atsisiųsti šaltinio failą" + +msgid "Download this page" +msgstr "Atsisiųskite šį puslapį" diff --git a/level-zero/1.10/_static/locales/lv/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/lv/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..74aa4d8 Binary files /dev/null and b/level-zero/1.10/_static/locales/lv/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/lv/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/lv/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..993a1e4 --- /dev/null +++ b/level-zero/1.10/_static/locales/lv/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Autora tēma" + +msgid "Open an issue" +msgstr "Atveriet problēmu" + +msgid "Contents" +msgstr "Saturs" + +msgid "Download notebook file" +msgstr "Lejupielādēt piezīmju grāmatiņu" + +msgid "Sphinx Book Theme" +msgstr "Sfinksa grāmatas tēma" + +msgid "Fullscreen mode" +msgstr "Pilnekrāna režīms" + +msgid "Edit this page" +msgstr "Rediģēt šo lapu" + +msgid "By" +msgstr "Autors" + +msgid "Copyright" +msgstr "Autortiesības" + +msgid "Source repository" +msgstr "Avota krātuve" + +msgid "previous page" +msgstr "iepriekšējā lapa" + +msgid "next page" +msgstr "nākamā lapaspuse" + +msgid "Toggle navigation" +msgstr "Pārslēgt navigāciju" + +msgid "repository" +msgstr "krātuve" + +msgid "suggest edit" +msgstr "ieteikt rediģēt" + +msgid "open issue" +msgstr "atklāts jautājums" + +msgid "Launch" +msgstr "Uzsākt" + +msgid "Print to PDF" +msgstr "Drukāt PDF formātā" + +msgid "By the" +msgstr "Ar" + +msgid "Last updated on" +msgstr "Pēdējoreiz atjaunināts" + +msgid "Download source file" +msgstr "Lejupielādēt avota failu" + +msgid "Download this page" +msgstr "Lejupielādējiet šo lapu" diff --git a/level-zero/1.10/_static/locales/ml/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/ml/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..2736e8f Binary files /dev/null and b/level-zero/1.10/_static/locales/ml/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/ml/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/ml/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..81daf7c --- /dev/null +++ b/level-zero/1.10/_static/locales/ml/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ml\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "പ്രമേയം" + +msgid "Open an issue" +msgstr "ഒരു പ്രശ്നം തുറക്കുക" + +msgid "Download notebook file" +msgstr "നോട്ട്ബുക്ക് ഫയൽ ഡൺലോഡ് ചെയ്യുക" + +msgid "Sphinx Book Theme" +msgstr "സ്ഫിങ്ക്സ് പുസ്തക തീം" + +msgid "Edit this page" +msgstr "ഈ പേജ് എഡിറ്റുചെയ്യുക" + +msgid "By" +msgstr "എഴുതിയത്" + +msgid "Copyright" +msgstr "പകർപ്പവകാശം" + +msgid "Source repository" +msgstr "ഉറവിട ശേഖരം" + +msgid "previous page" +msgstr "മുൻപത്തെ താൾ" + +msgid "next page" +msgstr "അടുത്ത പേജ്" + +msgid "Toggle navigation" +msgstr "നാവിഗേഷൻ ടോഗിൾ ചെയ്യുക" + +msgid "suggest edit" +msgstr "എഡിറ്റുചെയ്യാൻ നിർദ്ദേശിക്കുക" + +msgid "open issue" +msgstr "തുറന്ന പ്രശ്നം" + +msgid "Launch" +msgstr "സമാരംഭിക്കുക" + +msgid "Print to PDF" +msgstr "PDF- ലേക്ക് പ്രിന്റുചെയ്യുക" + +msgid "By the" +msgstr "എഴുതിയത്" + +msgid "Last updated on" +msgstr "അവസാനം അപ്‌ഡേറ്റുചെയ്‌തത്" + +msgid "Download source file" +msgstr "ഉറവിട ഫയൽ ഡൗൺലോഡുചെയ്യുക" + +msgid "Download this page" +msgstr "ഈ പേജ് ഡൗൺലോഡുചെയ്യുക" diff --git a/level-zero/1.10/_static/locales/mr/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/mr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..fe53010 Binary files /dev/null and b/level-zero/1.10/_static/locales/mr/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/mr/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/mr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..fd857bf --- /dev/null +++ b/level-zero/1.10/_static/locales/mr/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "द्वारा थीम" + +msgid "Open an issue" +msgstr "एक मुद्दा उघडा" + +msgid "Download notebook file" +msgstr "नोटबुक फाईल डाउनलोड करा" + +msgid "Sphinx Book Theme" +msgstr "स्फिंक्स बुक थीम" + +msgid "Edit this page" +msgstr "हे पृष्ठ संपादित करा" + +msgid "By" +msgstr "द्वारा" + +msgid "Copyright" +msgstr "कॉपीराइट" + +msgid "Source repository" +msgstr "स्त्रोत भांडार" + +msgid "previous page" +msgstr "मागील पान" + +msgid "next page" +msgstr "पुढील पृष्ठ" + +msgid "Toggle navigation" +msgstr "नेव्हिगेशन टॉगल करा" + +msgid "suggest edit" +msgstr "संपादन सुचवा" + +msgid "open issue" +msgstr "खुला मुद्दा" + +msgid "Launch" +msgstr "लाँच करा" + +msgid "Print to PDF" +msgstr "पीडीएफवर मुद्रित करा" + +msgid "By the" +msgstr "द्वारा" + +msgid "Last updated on" +msgstr "अखेरचे अद्यतनित" + +msgid "Download source file" +msgstr "स्त्रोत फाइल डाउनलोड करा" + +msgid "Download this page" +msgstr "हे पृष्ठ डाउनलोड करा" diff --git a/level-zero/1.10/_static/locales/ms/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/ms/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..f02603f Binary files /dev/null and b/level-zero/1.10/_static/locales/ms/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/ms/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/ms/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..b616d70 --- /dev/null +++ b/level-zero/1.10/_static/locales/ms/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ms\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema oleh" + +msgid "Open an issue" +msgstr "Buka masalah" + +msgid "Download notebook file" +msgstr "Muat turun fail buku nota" + +msgid "Sphinx Book Theme" +msgstr "Tema Buku Sphinx" + +msgid "Edit this page" +msgstr "Edit halaman ini" + +msgid "By" +msgstr "Oleh" + +msgid "Copyright" +msgstr "hak cipta" + +msgid "Source repository" +msgstr "Repositori sumber" + +msgid "previous page" +msgstr "halaman sebelumnya" + +msgid "next page" +msgstr "muka surat seterusnya" + +msgid "Toggle navigation" +msgstr "Togol navigasi" + +msgid "suggest edit" +msgstr "cadangkan edit" + +msgid "open issue" +msgstr "isu terbuka" + +msgid "Launch" +msgstr "Lancarkan" + +msgid "Print to PDF" +msgstr "Cetak ke PDF" + +msgid "By the" +msgstr "Oleh" + +msgid "Last updated on" +msgstr "Terakhir dikemas kini pada" + +msgid "Download source file" +msgstr "Muat turun fail sumber" + +msgid "Download this page" +msgstr "Muat turun halaman ini" diff --git a/level-zero/1.10/_static/locales/nl/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/nl/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..e59e7ec Binary files /dev/null and b/level-zero/1.10/_static/locales/nl/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/nl/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/nl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..f16f4bc --- /dev/null +++ b/level-zero/1.10/_static/locales/nl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Thema door de" + +msgid "Open an issue" +msgstr "Open een probleem" + +msgid "Contents" +msgstr "Inhoud" + +msgid "Download notebook file" +msgstr "Download notebookbestand" + +msgid "Sphinx Book Theme" +msgstr "Sphinx-boekthema" + +msgid "Fullscreen mode" +msgstr "Volledig scherm" + +msgid "Edit this page" +msgstr "bewerk deze pagina" + +msgid "By" +msgstr "Door" + +msgid "Copyright" +msgstr "auteursrechten" + +msgid "Source repository" +msgstr "Bronopslagplaats" + +msgid "previous page" +msgstr "vorige pagina" + +msgid "next page" +msgstr "volgende bladzijde" + +msgid "Toggle navigation" +msgstr "Schakel navigatie" + +msgid "repository" +msgstr "repository" + +msgid "suggest edit" +msgstr "suggereren bewerken" + +msgid "open issue" +msgstr "open probleem" + +msgid "Launch" +msgstr "Lancering" + +msgid "Print to PDF" +msgstr "Afdrukken naar pdf" + +msgid "By the" +msgstr "Door de" + +msgid "Last updated on" +msgstr "Laatst geupdate op" + +msgid "Download source file" +msgstr "Download het bronbestand" + +msgid "Download this page" +msgstr "Download deze pagina" diff --git a/level-zero/1.10/_static/locales/no/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/no/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..6cd15c8 Binary files /dev/null and b/level-zero/1.10/_static/locales/no/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/no/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/no/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..b1d304e --- /dev/null +++ b/level-zero/1.10/_static/locales/no/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: no\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema av" + +msgid "Open an issue" +msgstr "Åpne et problem" + +msgid "Contents" +msgstr "Innhold" + +msgid "Download notebook file" +msgstr "Last ned notatbokfilen" + +msgid "Sphinx Book Theme" +msgstr "Sphinx boktema" + +msgid "Fullscreen mode" +msgstr "Fullskjerm-modus" + +msgid "Edit this page" +msgstr "Rediger denne siden" + +msgid "By" +msgstr "Av" + +msgid "Copyright" +msgstr "opphavsrett" + +msgid "Source repository" +msgstr "Kildedepot" + +msgid "previous page" +msgstr "forrige side" + +msgid "next page" +msgstr "neste side" + +msgid "Toggle navigation" +msgstr "Bytt navigasjon" + +msgid "repository" +msgstr "oppbevaringssted" + +msgid "suggest edit" +msgstr "foreslå redigering" + +msgid "open issue" +msgstr "åpent nummer" + +msgid "Launch" +msgstr "Start" + +msgid "Print to PDF" +msgstr "Skriv ut til PDF" + +msgid "By the" +msgstr "Ved" + +msgid "Last updated on" +msgstr "Sist oppdatert den" + +msgid "Download source file" +msgstr "Last ned kildefilen" + +msgid "Download this page" +msgstr "Last ned denne siden" diff --git a/level-zero/1.10/_static/locales/pl/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/pl/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..9ebb584 Binary files /dev/null and b/level-zero/1.10/_static/locales/pl/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/pl/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/pl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..80d2c89 --- /dev/null +++ b/level-zero/1.10/_static/locales/pl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Motyw autorstwa" + +msgid "Open an issue" +msgstr "Otwórz problem" + +msgid "Contents" +msgstr "Zawartość" + +msgid "Download notebook file" +msgstr "Pobierz plik notatnika" + +msgid "Sphinx Book Theme" +msgstr "Motyw książki Sphinx" + +msgid "Fullscreen mode" +msgstr "Pełny ekran" + +msgid "Edit this page" +msgstr "Edytuj tę strone" + +msgid "By" +msgstr "Przez" + +msgid "Copyright" +msgstr "prawa autorskie" + +msgid "Source repository" +msgstr "Repozytorium źródłowe" + +msgid "previous page" +msgstr "Poprzednia strona" + +msgid "next page" +msgstr "Następna strona" + +msgid "Toggle navigation" +msgstr "Przełącz nawigację" + +msgid "repository" +msgstr "magazyn" + +msgid "suggest edit" +msgstr "zaproponuj edycję" + +msgid "open issue" +msgstr "otwarty problem" + +msgid "Launch" +msgstr "Uruchomić" + +msgid "Print to PDF" +msgstr "Drukuj do PDF" + +msgid "By the" +msgstr "Przez" + +msgid "Last updated on" +msgstr "Ostatnia aktualizacja" + +msgid "Download source file" +msgstr "Pobierz plik źródłowy" + +msgid "Download this page" +msgstr "Pobierz tę stronę" diff --git a/level-zero/1.10/_static/locales/pt/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/pt/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..d0ddb87 Binary files /dev/null and b/level-zero/1.10/_static/locales/pt/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/pt/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/pt/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..45ac847 --- /dev/null +++ b/level-zero/1.10/_static/locales/pt/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema por" + +msgid "Open an issue" +msgstr "Abra um problema" + +msgid "Contents" +msgstr "Conteúdo" + +msgid "Download notebook file" +msgstr "Baixar arquivo de notebook" + +msgid "Sphinx Book Theme" +msgstr "Tema do livro Sphinx" + +msgid "Fullscreen mode" +msgstr "Modo tela cheia" + +msgid "Edit this page" +msgstr "Edite essa página" + +msgid "By" +msgstr "De" + +msgid "Copyright" +msgstr "direito autoral" + +msgid "Source repository" +msgstr "Repositório fonte" + +msgid "previous page" +msgstr "página anterior" + +msgid "next page" +msgstr "próxima página" + +msgid "Toggle navigation" +msgstr "Alternar de navegação" + +msgid "repository" +msgstr "repositório" + +msgid "suggest edit" +msgstr "sugerir edição" + +msgid "open issue" +msgstr "questão aberta" + +msgid "Launch" +msgstr "Lançamento" + +msgid "Print to PDF" +msgstr "Imprimir em PDF" + +msgid "By the" +msgstr "Pelo" + +msgid "Last updated on" +msgstr "Última atualização em" + +msgid "Download source file" +msgstr "Baixar arquivo fonte" + +msgid "Download this page" +msgstr "Baixe esta página" diff --git a/level-zero/1.10/_static/locales/ro/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/ro/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..3c36ab1 Binary files /dev/null and b/level-zero/1.10/_static/locales/ro/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/ro/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/ro/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..532b3b8 --- /dev/null +++ b/level-zero/1.10/_static/locales/ro/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ro\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema de" + +msgid "Open an issue" +msgstr "Deschideți o problemă" + +msgid "Contents" +msgstr "Cuprins" + +msgid "Download notebook file" +msgstr "Descărcați fișierul notebook" + +msgid "Sphinx Book Theme" +msgstr "Tema Sphinx Book" + +msgid "Fullscreen mode" +msgstr "Modul ecran întreg" + +msgid "Edit this page" +msgstr "Editați această pagină" + +msgid "By" +msgstr "De" + +msgid "Copyright" +msgstr "Drepturi de autor" + +msgid "Source repository" +msgstr "Depozit sursă" + +msgid "previous page" +msgstr "pagina anterioară" + +msgid "next page" +msgstr "pagina următoare" + +msgid "Toggle navigation" +msgstr "Comutare navigare" + +msgid "repository" +msgstr "repertoriu" + +msgid "suggest edit" +msgstr "sugerează editare" + +msgid "open issue" +msgstr "problema deschisă" + +msgid "Launch" +msgstr "Lansa" + +msgid "Print to PDF" +msgstr "Imprimați în PDF" + +msgid "By the" +msgstr "Langa" + +msgid "Last updated on" +msgstr "Ultima actualizare la" + +msgid "Download source file" +msgstr "Descărcați fișierul sursă" + +msgid "Download this page" +msgstr "Descarcă această pagină" diff --git a/level-zero/1.10/_static/locales/ru/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/ru/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..6b8ca41 Binary files /dev/null and b/level-zero/1.10/_static/locales/ru/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/ru/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/ru/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..b718b48 --- /dev/null +++ b/level-zero/1.10/_static/locales/ru/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Тема от" + +msgid "Open an issue" +msgstr "Открыть вопрос" + +msgid "Contents" +msgstr "Содержание" + +msgid "Download notebook file" +msgstr "Скачать файл записной книжки" + +msgid "Sphinx Book Theme" +msgstr "Тема книги Сфинкс" + +msgid "Fullscreen mode" +msgstr "Полноэкранный режим" + +msgid "Edit this page" +msgstr "Редактировать эту страницу" + +msgid "By" +msgstr "По" + +msgid "Copyright" +msgstr "авторское право" + +msgid "Source repository" +msgstr "Исходный репозиторий" + +msgid "previous page" +msgstr "Предыдущая страница" + +msgid "next page" +msgstr "Следующая страница" + +msgid "Toggle navigation" +msgstr "Переключить навигацию" + +msgid "repository" +msgstr "хранилище" + +msgid "suggest edit" +msgstr "предложить редактировать" + +msgid "open issue" +msgstr "открытый вопрос" + +msgid "Launch" +msgstr "Запуск" + +msgid "Print to PDF" +msgstr "Распечатать в PDF" + +msgid "By the" +msgstr "Посредством" + +msgid "Last updated on" +msgstr "Последнее обновление" + +msgid "Download source file" +msgstr "Скачать исходный файл" + +msgid "Download this page" +msgstr "Загрузите эту страницу" diff --git a/level-zero/1.10/_static/locales/sk/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/sk/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..59bd0dd Binary files /dev/null and b/level-zero/1.10/_static/locales/sk/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/sk/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/sk/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..f6c423b --- /dev/null +++ b/level-zero/1.10/_static/locales/sk/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Téma od" + +msgid "Open an issue" +msgstr "Otvorte problém" + +msgid "Contents" +msgstr "Obsah" + +msgid "Download notebook file" +msgstr "Stiahnite si zošit" + +msgid "Sphinx Book Theme" +msgstr "Téma knihy Sfinga" + +msgid "Fullscreen mode" +msgstr "Režim celej obrazovky" + +msgid "Edit this page" +msgstr "Upraviť túto stránku" + +msgid "By" +msgstr "Autor:" + +msgid "Copyright" +msgstr "Autorské práva" + +msgid "Source repository" +msgstr "Zdrojové úložisko" + +msgid "previous page" +msgstr "predchádzajúca strana" + +msgid "next page" +msgstr "ďalšia strana" + +msgid "Toggle navigation" +msgstr "Prepnúť navigáciu" + +msgid "repository" +msgstr "Úložisko" + +msgid "suggest edit" +msgstr "navrhnúť úpravu" + +msgid "open issue" +msgstr "otvorené vydanie" + +msgid "Launch" +msgstr "Spustiť" + +msgid "Print to PDF" +msgstr "Tlač do PDF" + +msgid "By the" +msgstr "Podľa" + +msgid "Last updated on" +msgstr "Posledná aktualizácia dňa" + +msgid "Download source file" +msgstr "Stiahnite si zdrojový súbor" + +msgid "Download this page" +msgstr "Stiahnite si túto stránku" diff --git a/level-zero/1.10/_static/locales/sl/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/sl/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..87bf26d Binary files /dev/null and b/level-zero/1.10/_static/locales/sl/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/sl/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/sl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..9822dc5 --- /dev/null +++ b/level-zero/1.10/_static/locales/sl/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema avtorja" + +msgid "Open an issue" +msgstr "Odprite številko" + +msgid "Contents" +msgstr "Vsebina" + +msgid "Download notebook file" +msgstr "Prenesite datoteko zvezka" + +msgid "Sphinx Book Theme" +msgstr "Tema knjige Sphinx" + +msgid "Fullscreen mode" +msgstr "Celozaslonski način" + +msgid "Edit this page" +msgstr "Uredite to stran" + +msgid "By" +msgstr "Avtor" + +msgid "Copyright" +msgstr "avtorske pravice" + +msgid "Source repository" +msgstr "Izvorno skladišče" + +msgid "previous page" +msgstr "Prejšnja stran" + +msgid "next page" +msgstr "Naslednja stran" + +msgid "Toggle navigation" +msgstr "Preklopi navigacijo" + +msgid "repository" +msgstr "odlagališče" + +msgid "suggest edit" +msgstr "predlagajte urejanje" + +msgid "open issue" +msgstr "odprto vprašanje" + +msgid "Launch" +msgstr "Kosilo" + +msgid "Print to PDF" +msgstr "Natisni v PDF" + +msgid "By the" +msgstr "Avtor" + +msgid "Last updated on" +msgstr "Nazadnje posodobljeno dne" + +msgid "Download source file" +msgstr "Prenesite izvorno datoteko" + +msgid "Download this page" +msgstr "Prenesite to stran" diff --git a/level-zero/1.10/_static/locales/sr/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/sr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..ec740f4 Binary files /dev/null and b/level-zero/1.10/_static/locales/sr/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/sr/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/sr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..e809230 --- /dev/null +++ b/level-zero/1.10/_static/locales/sr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Тхеме би" + +msgid "Open an issue" +msgstr "Отворите издање" + +msgid "Contents" +msgstr "Садржај" + +msgid "Download notebook file" +msgstr "Преузмите датотеку бележнице" + +msgid "Sphinx Book Theme" +msgstr "Тема књиге Спхинк" + +msgid "Fullscreen mode" +msgstr "Режим целог екрана" + +msgid "Edit this page" +msgstr "Уредите ову страницу" + +msgid "By" +msgstr "Од стране" + +msgid "Copyright" +msgstr "Ауторско право" + +msgid "Source repository" +msgstr "Изворно спремиште" + +msgid "previous page" +msgstr "Претходна страница" + +msgid "next page" +msgstr "Следећа страна" + +msgid "Toggle navigation" +msgstr "Укључи / искључи навигацију" + +msgid "repository" +msgstr "спремиште" + +msgid "suggest edit" +msgstr "предложи уређивање" + +msgid "open issue" +msgstr "отворено издање" + +msgid "Launch" +msgstr "Лансирање" + +msgid "Print to PDF" +msgstr "Испис у ПДФ" + +msgid "By the" +msgstr "Од" + +msgid "Last updated on" +msgstr "Последње ажурирање" + +msgid "Download source file" +msgstr "Преузми изворну датотеку" + +msgid "Download this page" +msgstr "Преузмите ову страницу" diff --git a/level-zero/1.10/_static/locales/sv/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/sv/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..b07dc76 Binary files /dev/null and b/level-zero/1.10/_static/locales/sv/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/sv/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/sv/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..2421b00 --- /dev/null +++ b/level-zero/1.10/_static/locales/sv/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema av" + +msgid "Open an issue" +msgstr "Öppna en problemrapport" + +msgid "Contents" +msgstr "Innehåll" + +msgid "Download notebook file" +msgstr "Ladda ner notebook-fil" + +msgid "Sphinx Book Theme" +msgstr "Sphinx Boktema" + +msgid "Fullscreen mode" +msgstr "Fullskärmsläge" + +msgid "Edit this page" +msgstr "Redigera den här sidan" + +msgid "By" +msgstr "Av" + +msgid "Copyright" +msgstr "Upphovsrätt" + +msgid "Source repository" +msgstr "Källkodsrepositorium" + +msgid "previous page" +msgstr "föregående sida" + +msgid "next page" +msgstr "nästa sida" + +msgid "Toggle navigation" +msgstr "Växla navigering" + +msgid "repository" +msgstr "repositorium" + +msgid "suggest edit" +msgstr "föreslå ändring" + +msgid "open issue" +msgstr "öppna problemrapport" + +msgid "Launch" +msgstr "Öppna" + +msgid "Print to PDF" +msgstr "Skriv ut till PDF" + +msgid "By the" +msgstr "Av den" + +msgid "Last updated on" +msgstr "Senast uppdaterad den" + +msgid "Download source file" +msgstr "Ladda ner källfil" + +msgid "Download this page" +msgstr "Ladda ner den här sidan" diff --git a/level-zero/1.10/_static/locales/ta/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/ta/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..29f52e1 Binary files /dev/null and b/level-zero/1.10/_static/locales/ta/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/ta/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/ta/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..500042f --- /dev/null +++ b/level-zero/1.10/_static/locales/ta/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ta\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "வழங்கிய தீம்" + +msgid "Open an issue" +msgstr "சிக்கலைத் திறக்கவும்" + +msgid "Download notebook file" +msgstr "நோட்புக் கோப்பைப் பதிவிறக்கவும்" + +msgid "Sphinx Book Theme" +msgstr "ஸ்பிங்க்ஸ் புத்தக தீம்" + +msgid "Edit this page" +msgstr "இந்தப் பக்கத்தைத் திருத்தவும்" + +msgid "By" +msgstr "வழங்கியவர்" + +msgid "Copyright" +msgstr "பதிப்புரிமை" + +msgid "Source repository" +msgstr "மூல களஞ்சியம்" + +msgid "previous page" +msgstr "முந்தைய பக்கம்" + +msgid "next page" +msgstr "அடுத்த பக்கம்" + +msgid "Toggle navigation" +msgstr "வழிசெலுத்தலை நிலைமாற்று" + +msgid "suggest edit" +msgstr "திருத்த பரிந்துரைக்கவும்" + +msgid "open issue" +msgstr "திறந்த பிரச்சினை" + +msgid "Launch" +msgstr "தொடங்க" + +msgid "Print to PDF" +msgstr "PDF இல் அச்சிடுக" + +msgid "By the" +msgstr "மூலம்" + +msgid "Last updated on" +msgstr "கடைசியாக புதுப்பிக்கப்பட்டது" + +msgid "Download source file" +msgstr "மூல கோப்பைப் பதிவிறக்குக" + +msgid "Download this page" +msgstr "இந்தப் பக்கத்தைப் பதிவிறக்கவும்" diff --git a/level-zero/1.10/_static/locales/te/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/te/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..0a5f4b4 Binary files /dev/null and b/level-zero/1.10/_static/locales/te/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/te/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/te/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..b1afebb --- /dev/null +++ b/level-zero/1.10/_static/locales/te/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: te\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "ద్వారా థీమ్" + +msgid "Open an issue" +msgstr "సమస్యను తెరవండి" + +msgid "Download notebook file" +msgstr "నోట్బుక్ ఫైల్ను డౌన్లోడ్ చేయండి" + +msgid "Sphinx Book Theme" +msgstr "సింహిక పుస్తక థీమ్" + +msgid "Edit this page" +msgstr "ఈ పేజీని సవరించండి" + +msgid "By" +msgstr "ద్వారా" + +msgid "Copyright" +msgstr "కాపీరైట్" + +msgid "Source repository" +msgstr "మూల రిపోజిటరీ" + +msgid "previous page" +msgstr "ముందు పేజి" + +msgid "next page" +msgstr "తరువాతి పేజీ" + +msgid "Toggle navigation" +msgstr "నావిగేషన్‌ను టోగుల్ చేయండి" + +msgid "suggest edit" +msgstr "సవరించమని సూచించండి" + +msgid "open issue" +msgstr "ఓపెన్ ఇష్యూ" + +msgid "Launch" +msgstr "ప్రారంభించండి" + +msgid "Print to PDF" +msgstr "PDF కి ముద్రించండి" + +msgid "By the" +msgstr "ద్వారా" + +msgid "Last updated on" +msgstr "చివరిగా నవీకరించబడింది" + +msgid "Download source file" +msgstr "మూల ఫైల్‌ను డౌన్‌లోడ్ చేయండి" + +msgid "Download this page" +msgstr "ఈ పేజీని డౌన్‌లోడ్ చేయండి" diff --git a/level-zero/1.10/_static/locales/tg/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/tg/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..b21c6c6 Binary files /dev/null and b/level-zero/1.10/_static/locales/tg/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/tg/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/tg/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..29b8237 --- /dev/null +++ b/level-zero/1.10/_static/locales/tg/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Мавзӯъи аз" + +msgid "Open an issue" +msgstr "Масъаларо кушоед" + +msgid "Contents" +msgstr "Мундариҷа" + +msgid "Download notebook file" +msgstr "Файли дафтарро зеркашӣ кунед" + +msgid "Sphinx Book Theme" +msgstr "Сфинкс Мавзӯи китоб" + +msgid "Fullscreen mode" +msgstr "Ҳолати экрани пурра" + +msgid "Edit this page" +msgstr "Ин саҳифаро таҳрир кунед" + +msgid "By" +msgstr "Бо" + +msgid "Copyright" +msgstr "Ҳуқуқи муаллиф" + +msgid "Source repository" +msgstr "Анбори манбаъ" + +msgid "previous page" +msgstr "саҳифаи қаблӣ" + +msgid "next page" +msgstr "саҳифаи оянда" + +msgid "Toggle navigation" +msgstr "Гузаришро иваз кунед" + +msgid "repository" +msgstr "анбор" + +msgid "suggest edit" +msgstr "пешниҳод вироиш" + +msgid "open issue" +msgstr "барориши кушод" + +msgid "Launch" +msgstr "Оғоз" + +msgid "Print to PDF" +msgstr "Чоп ба PDF" + +msgid "By the" +msgstr "Бо" + +msgid "Last updated on" +msgstr "Last навсозӣ дар" + +msgid "Download source file" +msgstr "Файли манбаъро зеркашӣ кунед" + +msgid "Download this page" +msgstr "Ин саҳифаро зеркашӣ кунед" diff --git a/level-zero/1.10/_static/locales/th/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/th/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..abede98 Binary files /dev/null and b/level-zero/1.10/_static/locales/th/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/th/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/th/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..ac65ee0 --- /dev/null +++ b/level-zero/1.10/_static/locales/th/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "ธีมโดย" + +msgid "Open an issue" +msgstr "เปิดปัญหา" + +msgid "Contents" +msgstr "สารบัญ" + +msgid "Download notebook file" +msgstr "ดาวน์โหลดไฟล์สมุดบันทึก" + +msgid "Sphinx Book Theme" +msgstr "ธีมหนังสือสฟิงซ์" + +msgid "Fullscreen mode" +msgstr "โหมดเต็มหน้าจอ" + +msgid "Edit this page" +msgstr "แก้ไขหน้านี้" + +msgid "By" +msgstr "โดย" + +msgid "Copyright" +msgstr "ลิขสิทธิ์" + +msgid "Source repository" +msgstr "ที่เก็บซอร์ส" + +msgid "previous page" +msgstr "หน้าที่แล้ว" + +msgid "next page" +msgstr "หน้าต่อไป" + +msgid "Toggle navigation" +msgstr "ไม่ต้องสลับช่องทาง" + +msgid "repository" +msgstr "ที่เก็บ" + +msgid "suggest edit" +msgstr "แนะนำแก้ไข" + +msgid "open issue" +msgstr "เปิดปัญหา" + +msgid "Launch" +msgstr "เปิด" + +msgid "Print to PDF" +msgstr "พิมพ์เป็น PDF" + +msgid "By the" +msgstr "โดย" + +msgid "Last updated on" +msgstr "ปรับปรุงล่าสุดเมื่อ" + +msgid "Download source file" +msgstr "ดาวน์โหลดไฟล์ต้นฉบับ" + +msgid "Download this page" +msgstr "ดาวน์โหลดหน้านี้" diff --git a/level-zero/1.10/_static/locales/tl/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/tl/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..8df1b73 Binary files /dev/null and b/level-zero/1.10/_static/locales/tl/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/tl/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/tl/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..662d66c --- /dev/null +++ b/level-zero/1.10/_static/locales/tl/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tema ng" + +msgid "Open an issue" +msgstr "Magbukas ng isyu" + +msgid "Download notebook file" +msgstr "Mag-download ng file ng notebook" + +msgid "Sphinx Book Theme" +msgstr "Tema ng Sphinx Book" + +msgid "Edit this page" +msgstr "I-edit ang pahinang ito" + +msgid "By" +msgstr "Ni" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Source repository" +msgstr "Pinagmulan ng imbakan" + +msgid "previous page" +msgstr "Nakaraang pahina" + +msgid "next page" +msgstr "Susunod na pahina" + +msgid "Toggle navigation" +msgstr "I-toggle ang pag-navigate" + +msgid "suggest edit" +msgstr "iminumungkahi i-edit" + +msgid "open issue" +msgstr "bukas na isyu" + +msgid "Launch" +msgstr "Ilunsad" + +msgid "Print to PDF" +msgstr "I-print sa PDF" + +msgid "By the" +msgstr "Sa pamamagitan ng" + +msgid "Last updated on" +msgstr "Huling na-update noong" + +msgid "Download source file" +msgstr "Mag-download ng file ng pinagmulan" + +msgid "Download this page" +msgstr "I-download ang pahinang ito" diff --git a/level-zero/1.10/_static/locales/tr/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/tr/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..029ae18 Binary files /dev/null and b/level-zero/1.10/_static/locales/tr/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/tr/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/tr/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..d1ae723 --- /dev/null +++ b/level-zero/1.10/_static/locales/tr/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Tarafından tema" + +msgid "Open an issue" +msgstr "Bir sorunu açın" + +msgid "Contents" +msgstr "İçindekiler" + +msgid "Download notebook file" +msgstr "Defter dosyasını indirin" + +msgid "Sphinx Book Theme" +msgstr "Sfenks Kitap Teması" + +msgid "Fullscreen mode" +msgstr "Tam ekran modu" + +msgid "Edit this page" +msgstr "Bu sayfayı düzenle" + +msgid "By" +msgstr "Tarafından" + +msgid "Copyright" +msgstr "Telif hakkı" + +msgid "Source repository" +msgstr "Kaynak kod deposu" + +msgid "previous page" +msgstr "önceki sayfa" + +msgid "next page" +msgstr "sonraki Sayfa" + +msgid "Toggle navigation" +msgstr "Gezinmeyi değiştir" + +msgid "repository" +msgstr "depo" + +msgid "suggest edit" +msgstr "düzenleme öner" + +msgid "open issue" +msgstr "Açık konu" + +msgid "Launch" +msgstr "Başlatmak" + +msgid "Print to PDF" +msgstr "PDF olarak yazdır" + +msgid "By the" +msgstr "Tarafından" + +msgid "Last updated on" +msgstr "Son güncelleme tarihi" + +msgid "Download source file" +msgstr "Kaynak dosyayı indirin" + +msgid "Download this page" +msgstr "Bu sayfayı indirin" diff --git a/level-zero/1.10/_static/locales/uk/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/uk/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..16ab789 Binary files /dev/null and b/level-zero/1.10/_static/locales/uk/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/uk/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/uk/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..be49ab8 --- /dev/null +++ b/level-zero/1.10/_static/locales/uk/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: uk\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Тема від" + +msgid "Open an issue" +msgstr "Відкрийте випуск" + +msgid "Contents" +msgstr "Зміст" + +msgid "Download notebook file" +msgstr "Завантажте файл блокнота" + +msgid "Sphinx Book Theme" +msgstr "Тема книги \"Сфінкс\"" + +msgid "Fullscreen mode" +msgstr "Повноекранний режим" + +msgid "Edit this page" +msgstr "Редагувати цю сторінку" + +msgid "By" +msgstr "Автор" + +msgid "Copyright" +msgstr "Авторське право" + +msgid "Source repository" +msgstr "Джерело сховища" + +msgid "previous page" +msgstr "Попередня сторінка" + +msgid "next page" +msgstr "Наступна сторінка" + +msgid "Toggle navigation" +msgstr "Переключити навігацію" + +msgid "repository" +msgstr "сховище" + +msgid "suggest edit" +msgstr "запропонувати редагувати" + +msgid "open issue" +msgstr "відкритий випуск" + +msgid "Launch" +msgstr "Запуск" + +msgid "Print to PDF" +msgstr "Друк у форматі PDF" + +msgid "By the" +msgstr "По" + +msgid "Last updated on" +msgstr "Останнє оновлення:" + +msgid "Download source file" +msgstr "Завантажити вихідний файл" + +msgid "Download this page" +msgstr "Завантажте цю сторінку" diff --git a/level-zero/1.10/_static/locales/ur/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/ur/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..de8c84b Binary files /dev/null and b/level-zero/1.10/_static/locales/ur/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/ur/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/ur/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..94bcab3 --- /dev/null +++ b/level-zero/1.10/_static/locales/ur/LC_MESSAGES/booktheme.po @@ -0,0 +1,66 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ur\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "کے ذریعہ تھیم" + +msgid "Open an issue" +msgstr "ایک مسئلہ کھولیں" + +msgid "Download notebook file" +msgstr "نوٹ بک فائل ڈاؤن لوڈ کریں" + +msgid "Sphinx Book Theme" +msgstr "سپنکس بک تھیم" + +msgid "Edit this page" +msgstr "اس صفحے میں ترمیم کریں" + +msgid "By" +msgstr "بذریعہ" + +msgid "Copyright" +msgstr "کاپی رائٹ" + +msgid "Source repository" +msgstr "ماخذ ذخیرہ" + +msgid "previous page" +msgstr "سابقہ ​​صفحہ" + +msgid "next page" +msgstr "اگلا صفحہ" + +msgid "Toggle navigation" +msgstr "نیویگیشن ٹوگل کریں" + +msgid "suggest edit" +msgstr "ترمیم کی تجویز کریں" + +msgid "open issue" +msgstr "کھلا مسئلہ" + +msgid "Launch" +msgstr "لانچ کریں" + +msgid "Print to PDF" +msgstr "پی ڈی ایف پرنٹ کریں" + +msgid "By the" +msgstr "کی طرف" + +msgid "Last updated on" +msgstr "آخری بار تازہ کاری ہوئی" + +msgid "Download source file" +msgstr "سورس فائل ڈاؤن لوڈ کریں" + +msgid "Download this page" +msgstr "اس صفحے کو ڈاؤن لوڈ کریں" diff --git a/level-zero/1.10/_static/locales/vi/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/vi/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..2bb3255 Binary files /dev/null and b/level-zero/1.10/_static/locales/vi/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/vi/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/vi/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..116236d --- /dev/null +++ b/level-zero/1.10/_static/locales/vi/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: vi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "Chủ đề của" + +msgid "Open an issue" +msgstr "Mở một vấn đề" + +msgid "Contents" +msgstr "Nội dung" + +msgid "Download notebook file" +msgstr "Tải xuống tệp sổ tay" + +msgid "Sphinx Book Theme" +msgstr "Chủ đề sách nhân sư" + +msgid "Fullscreen mode" +msgstr "Chế độ toàn màn hình" + +msgid "Edit this page" +msgstr "chỉnh sửa trang này" + +msgid "By" +msgstr "Bởi" + +msgid "Copyright" +msgstr "Bản quyền" + +msgid "Source repository" +msgstr "Kho nguồn" + +msgid "previous page" +msgstr "trang trước" + +msgid "next page" +msgstr "Trang tiếp theo" + +msgid "Toggle navigation" +msgstr "Chuyển đổi điều hướng thành" + +msgid "repository" +msgstr "kho" + +msgid "suggest edit" +msgstr "đề nghị chỉnh sửa" + +msgid "open issue" +msgstr "vấn đề mở" + +msgid "Launch" +msgstr "Phóng" + +msgid "Print to PDF" +msgstr "In sang PDF" + +msgid "By the" +msgstr "Bằng" + +msgid "Last updated on" +msgstr "Cập nhật lần cuối vào" + +msgid "Download source file" +msgstr "Tải xuống tệp nguồn" + +msgid "Download this page" +msgstr "Tải xuống trang này" diff --git a/level-zero/1.10/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..0e3235d Binary files /dev/null and b/level-zero/1.10/_static/locales/zh_CN/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/zh_CN/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/zh_CN/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..4f4ab57 --- /dev/null +++ b/level-zero/1.10/_static/locales/zh_CN/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "主题作者:" + +msgid "Open an issue" +msgstr "创建议题" + +msgid "Contents" +msgstr "目录" + +msgid "Download notebook file" +msgstr "下载笔记本文件" + +msgid "Sphinx Book Theme" +msgstr "Sphinx Book 主题" + +msgid "Fullscreen mode" +msgstr "全屏模式" + +msgid "Edit this page" +msgstr "编辑此页面" + +msgid "By" +msgstr "作者:" + +msgid "Copyright" +msgstr "版权" + +msgid "Source repository" +msgstr "源码库" + +msgid "previous page" +msgstr "上一页" + +msgid "next page" +msgstr "下一页" + +msgid "Toggle navigation" +msgstr "显示或隐藏导航栏" + +msgid "repository" +msgstr "仓库" + +msgid "suggest edit" +msgstr "提出修改建议" + +msgid "open issue" +msgstr "创建议题" + +msgid "Launch" +msgstr "启动" + +msgid "Print to PDF" +msgstr "列印成 PDF" + +msgid "By the" +msgstr "作者:" + +msgid "Last updated on" +msgstr "上次更新时间:" + +msgid "Download source file" +msgstr "下载源文件" + +msgid "Download this page" +msgstr "下载此页面" diff --git a/level-zero/1.10/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo b/level-zero/1.10/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo new file mode 100644 index 0000000..9116fa9 Binary files /dev/null and b/level-zero/1.10/_static/locales/zh_TW/LC_MESSAGES/booktheme.mo differ diff --git a/level-zero/1.10/_static/locales/zh_TW/LC_MESSAGES/booktheme.po b/level-zero/1.10/_static/locales/zh_TW/LC_MESSAGES/booktheme.po new file mode 100644 index 0000000..42b43b8 --- /dev/null +++ b/level-zero/1.10/_static/locales/zh_TW/LC_MESSAGES/booktheme.po @@ -0,0 +1,75 @@ + +msgid "" +msgstr "" +"Project-Id-Version: Sphinx-Book-Theme\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "Theme by the" +msgstr "佈景主題作者:" + +msgid "Open an issue" +msgstr "開啟議題" + +msgid "Contents" +msgstr "目錄" + +msgid "Download notebook file" +msgstr "下載 Notebook 檔案" + +msgid "Sphinx Book Theme" +msgstr "Sphinx Book 佈景主題" + +msgid "Fullscreen mode" +msgstr "全螢幕模式" + +msgid "Edit this page" +msgstr "編輯此頁面" + +msgid "By" +msgstr "作者:" + +msgid "Copyright" +msgstr "Copyright" + +msgid "Source repository" +msgstr "來源儲存庫" + +msgid "previous page" +msgstr "上一頁" + +msgid "next page" +msgstr "下一頁" + +msgid "Toggle navigation" +msgstr "顯示或隱藏導覽列" + +msgid "repository" +msgstr "儲存庫" + +msgid "suggest edit" +msgstr "提出修改建議" + +msgid "open issue" +msgstr "公開的問題" + +msgid "Launch" +msgstr "啟動" + +msgid "Print to PDF" +msgstr "列印成 PDF" + +msgid "By the" +msgstr "作者:" + +msgid "Last updated on" +msgstr "最後更新時間:" + +msgid "Download source file" +msgstr "下載原始檔" + +msgid "Download this page" +msgstr "下載此頁面" diff --git a/level-zero/1.10/_static/minus.png b/level-zero/1.10/_static/minus.png new file mode 100644 index 0000000..d96755f Binary files /dev/null and b/level-zero/1.10/_static/minus.png differ diff --git a/level-zero/1.10/_static/plus.png b/level-zero/1.10/_static/plus.png new file mode 100644 index 0000000..7107cec Binary files /dev/null and b/level-zero/1.10/_static/plus.png differ diff --git a/level-zero/1.10/_static/pygments.css b/level-zero/1.10/_static/pygments.css new file mode 100644 index 0000000..997797f --- /dev/null +++ b/level-zero/1.10/_static/pygments.css @@ -0,0 +1,152 @@ +html[data-theme="light"] .highlight pre { line-height: 125%; } +html[data-theme="light"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="light"] .highlight .hll { background-color: #7971292e } +html[data-theme="light"] .highlight { background: #fefefe; color: #545454 } +html[data-theme="light"] .highlight .c { color: #797129 } /* Comment */ +html[data-theme="light"] .highlight .err { color: #d91e18 } /* Error */ +html[data-theme="light"] .highlight .k { color: #7928a1 } /* Keyword */ +html[data-theme="light"] .highlight .l { color: #797129 } /* Literal */ +html[data-theme="light"] .highlight .n { color: #545454 } /* Name */ +html[data-theme="light"] .highlight .o { color: #008000 } /* Operator */ +html[data-theme="light"] .highlight .p { color: #545454 } /* Punctuation */ +html[data-theme="light"] .highlight .ch { color: #797129 } /* Comment.Hashbang */ +html[data-theme="light"] .highlight .cm { color: #797129 } /* Comment.Multiline */ +html[data-theme="light"] .highlight .cp { color: #797129 } /* Comment.Preproc */ +html[data-theme="light"] .highlight .cpf { color: #797129 } /* Comment.PreprocFile */ +html[data-theme="light"] .highlight .c1 { color: #797129 } /* Comment.Single */ +html[data-theme="light"] .highlight .cs { color: #797129 } /* Comment.Special */ +html[data-theme="light"] .highlight .gd { color: #007faa } /* Generic.Deleted */ +html[data-theme="light"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="light"] .highlight .gh { color: #007faa } /* Generic.Heading */ +html[data-theme="light"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="light"] .highlight .gu { color: #007faa } /* Generic.Subheading */ +html[data-theme="light"] .highlight .kc { color: #7928a1 } /* Keyword.Constant */ +html[data-theme="light"] .highlight .kd { color: #7928a1 } /* Keyword.Declaration */ +html[data-theme="light"] .highlight .kn { color: #7928a1 } /* Keyword.Namespace */ +html[data-theme="light"] .highlight .kp { color: #7928a1 } /* Keyword.Pseudo */ +html[data-theme="light"] .highlight .kr { color: #7928a1 } /* Keyword.Reserved */ +html[data-theme="light"] .highlight .kt { color: #797129 } /* Keyword.Type */ +html[data-theme="light"] .highlight .ld { color: #797129 } /* Literal.Date */ +html[data-theme="light"] .highlight .m { color: #797129 } /* Literal.Number */ +html[data-theme="light"] .highlight .s { color: #008000 } /* Literal.String */ +html[data-theme="light"] .highlight .na { color: #797129 } /* Name.Attribute */ +html[data-theme="light"] .highlight .nb { color: #797129 } /* Name.Builtin */ +html[data-theme="light"] .highlight .nc { color: #007faa } /* Name.Class */ +html[data-theme="light"] .highlight .no { color: #007faa } /* Name.Constant */ +html[data-theme="light"] .highlight .nd { color: #797129 } /* Name.Decorator */ +html[data-theme="light"] .highlight .ni { color: #008000 } /* Name.Entity */ +html[data-theme="light"] .highlight .ne { color: #7928a1 } /* Name.Exception */ +html[data-theme="light"] .highlight .nf { color: #007faa } /* Name.Function */ +html[data-theme="light"] .highlight .nl { color: #797129 } /* Name.Label */ +html[data-theme="light"] .highlight .nn { color: #545454 } /* Name.Namespace */ +html[data-theme="light"] .highlight .nx { color: #545454 } /* Name.Other */ +html[data-theme="light"] .highlight .py { color: #007faa } /* Name.Property */ +html[data-theme="light"] .highlight .nt { color: #007faa } /* Name.Tag */ +html[data-theme="light"] .highlight .nv { color: #d91e18 } /* Name.Variable */ +html[data-theme="light"] .highlight .ow { color: #7928a1 } /* Operator.Word */ +html[data-theme="light"] .highlight .pm { color: #545454 } /* Punctuation.Marker */ +html[data-theme="light"] .highlight .w { color: #545454 } /* Text.Whitespace */ +html[data-theme="light"] .highlight .mb { color: #797129 } /* Literal.Number.Bin */ +html[data-theme="light"] .highlight .mf { color: #797129 } /* Literal.Number.Float */ +html[data-theme="light"] .highlight .mh { color: #797129 } /* Literal.Number.Hex */ +html[data-theme="light"] .highlight .mi { color: #797129 } /* Literal.Number.Integer */ +html[data-theme="light"] .highlight .mo { color: #797129 } /* Literal.Number.Oct */ +html[data-theme="light"] .highlight .sa { color: #008000 } /* Literal.String.Affix */ +html[data-theme="light"] .highlight .sb { color: #008000 } /* Literal.String.Backtick */ +html[data-theme="light"] .highlight .sc { color: #008000 } /* Literal.String.Char */ +html[data-theme="light"] .highlight .dl { color: #008000 } /* Literal.String.Delimiter */ +html[data-theme="light"] .highlight .sd { color: #008000 } /* Literal.String.Doc */ +html[data-theme="light"] .highlight .s2 { color: #008000 } /* Literal.String.Double */ +html[data-theme="light"] .highlight .se { color: #008000 } /* Literal.String.Escape */ +html[data-theme="light"] .highlight .sh { color: #008000 } /* Literal.String.Heredoc */ +html[data-theme="light"] .highlight .si { color: #008000 } /* Literal.String.Interpol */ +html[data-theme="light"] .highlight .sx { color: #008000 } /* Literal.String.Other */ +html[data-theme="light"] .highlight .sr { color: #d91e18 } /* Literal.String.Regex */ +html[data-theme="light"] .highlight .s1 { color: #008000 } /* Literal.String.Single */ +html[data-theme="light"] .highlight .ss { color: #007faa } /* Literal.String.Symbol */ +html[data-theme="light"] .highlight .bp { color: #797129 } /* Name.Builtin.Pseudo */ +html[data-theme="light"] .highlight .fm { color: #007faa } /* Name.Function.Magic */ +html[data-theme="light"] .highlight .vc { color: #d91e18 } /* Name.Variable.Class */ +html[data-theme="light"] .highlight .vg { color: #d91e18 } /* Name.Variable.Global */ +html[data-theme="light"] .highlight .vi { color: #d91e18 } /* Name.Variable.Instance */ +html[data-theme="light"] .highlight .vm { color: #797129 } /* Name.Variable.Magic */ +html[data-theme="light"] .highlight .il { color: #797129 } /* Literal.Number.Integer.Long */ +html[data-theme="dark"] .highlight pre { line-height: 125%; } +html[data-theme="dark"] .highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +html[data-theme="dark"] .highlight .hll { background-color: #ffd9002e } +html[data-theme="dark"] .highlight { background: #2b2b2b; color: #f8f8f2 } +html[data-theme="dark"] .highlight .c { color: #ffd900 } /* Comment */ +html[data-theme="dark"] .highlight .err { color: #ffa07a } /* Error */ +html[data-theme="dark"] .highlight .k { color: #dcc6e0 } /* Keyword */ +html[data-theme="dark"] .highlight .l { color: #ffd900 } /* Literal */ +html[data-theme="dark"] .highlight .n { color: #f8f8f2 } /* Name */ +html[data-theme="dark"] .highlight .o { color: #abe338 } /* Operator */ +html[data-theme="dark"] .highlight .p { color: #f8f8f2 } /* Punctuation */ +html[data-theme="dark"] .highlight .ch { color: #ffd900 } /* Comment.Hashbang */ +html[data-theme="dark"] .highlight .cm { color: #ffd900 } /* Comment.Multiline */ +html[data-theme="dark"] .highlight .cp { color: #ffd900 } /* Comment.Preproc */ +html[data-theme="dark"] .highlight .cpf { color: #ffd900 } /* Comment.PreprocFile */ +html[data-theme="dark"] .highlight .c1 { color: #ffd900 } /* Comment.Single */ +html[data-theme="dark"] .highlight .cs { color: #ffd900 } /* Comment.Special */ +html[data-theme="dark"] .highlight .gd { color: #00e0e0 } /* Generic.Deleted */ +html[data-theme="dark"] .highlight .ge { font-style: italic } /* Generic.Emph */ +html[data-theme="dark"] .highlight .gh { color: #00e0e0 } /* Generic.Heading */ +html[data-theme="dark"] .highlight .gs { font-weight: bold } /* Generic.Strong */ +html[data-theme="dark"] .highlight .gu { color: #00e0e0 } /* Generic.Subheading */ +html[data-theme="dark"] .highlight .kc { color: #dcc6e0 } /* Keyword.Constant */ +html[data-theme="dark"] .highlight .kd { color: #dcc6e0 } /* Keyword.Declaration */ +html[data-theme="dark"] .highlight .kn { color: #dcc6e0 } /* Keyword.Namespace */ +html[data-theme="dark"] .highlight .kp { color: #dcc6e0 } /* Keyword.Pseudo */ +html[data-theme="dark"] .highlight .kr { color: #dcc6e0 } /* Keyword.Reserved */ +html[data-theme="dark"] .highlight .kt { color: #ffd900 } /* Keyword.Type */ +html[data-theme="dark"] .highlight .ld { color: #ffd900 } /* Literal.Date */ +html[data-theme="dark"] .highlight .m { color: #ffd900 } /* Literal.Number */ +html[data-theme="dark"] .highlight .s { color: #abe338 } /* Literal.String */ +html[data-theme="dark"] .highlight .na { color: #ffd900 } /* Name.Attribute */ +html[data-theme="dark"] .highlight .nb { color: #ffd900 } /* Name.Builtin */ +html[data-theme="dark"] .highlight .nc { color: #00e0e0 } /* Name.Class */ +html[data-theme="dark"] .highlight .no { color: #00e0e0 } /* Name.Constant */ +html[data-theme="dark"] .highlight .nd { color: #ffd900 } /* Name.Decorator */ +html[data-theme="dark"] .highlight .ni { color: #abe338 } /* Name.Entity */ +html[data-theme="dark"] .highlight .ne { color: #dcc6e0 } /* Name.Exception */ +html[data-theme="dark"] .highlight .nf { color: #00e0e0 } /* Name.Function */ +html[data-theme="dark"] .highlight .nl { color: #ffd900 } /* Name.Label */ +html[data-theme="dark"] .highlight .nn { color: #f8f8f2 } /* Name.Namespace */ +html[data-theme="dark"] .highlight .nx { color: #f8f8f2 } /* Name.Other */ +html[data-theme="dark"] .highlight .py { color: #00e0e0 } /* Name.Property */ +html[data-theme="dark"] .highlight .nt { color: #00e0e0 } /* Name.Tag */ +html[data-theme="dark"] .highlight .nv { color: #ffa07a } /* Name.Variable */ +html[data-theme="dark"] .highlight .ow { color: #dcc6e0 } /* Operator.Word */ +html[data-theme="dark"] .highlight .pm { color: #f8f8f2 } /* Punctuation.Marker */ +html[data-theme="dark"] .highlight .w { color: #f8f8f2 } /* Text.Whitespace */ +html[data-theme="dark"] .highlight .mb { color: #ffd900 } /* Literal.Number.Bin */ +html[data-theme="dark"] .highlight .mf { color: #ffd900 } /* Literal.Number.Float */ +html[data-theme="dark"] .highlight .mh { color: #ffd900 } /* Literal.Number.Hex */ +html[data-theme="dark"] .highlight .mi { color: #ffd900 } /* Literal.Number.Integer */ +html[data-theme="dark"] .highlight .mo { color: #ffd900 } /* Literal.Number.Oct */ +html[data-theme="dark"] .highlight .sa { color: #abe338 } /* Literal.String.Affix */ +html[data-theme="dark"] .highlight .sb { color: #abe338 } /* Literal.String.Backtick */ +html[data-theme="dark"] .highlight .sc { color: #abe338 } /* Literal.String.Char */ +html[data-theme="dark"] .highlight .dl { color: #abe338 } /* Literal.String.Delimiter */ +html[data-theme="dark"] .highlight .sd { color: #abe338 } /* Literal.String.Doc */ +html[data-theme="dark"] .highlight .s2 { color: #abe338 } /* Literal.String.Double */ +html[data-theme="dark"] .highlight .se { color: #abe338 } /* Literal.String.Escape */ +html[data-theme="dark"] .highlight .sh { color: #abe338 } /* Literal.String.Heredoc */ +html[data-theme="dark"] .highlight .si { color: #abe338 } /* Literal.String.Interpol */ +html[data-theme="dark"] .highlight .sx { color: #abe338 } /* Literal.String.Other */ +html[data-theme="dark"] .highlight .sr { color: #ffa07a } /* Literal.String.Regex */ +html[data-theme="dark"] .highlight .s1 { color: #abe338 } /* Literal.String.Single */ +html[data-theme="dark"] .highlight .ss { color: #00e0e0 } /* Literal.String.Symbol */ +html[data-theme="dark"] .highlight .bp { color: #ffd900 } /* Name.Builtin.Pseudo */ +html[data-theme="dark"] .highlight .fm { color: #00e0e0 } /* Name.Function.Magic */ +html[data-theme="dark"] .highlight .vc { color: #ffa07a } /* Name.Variable.Class */ +html[data-theme="dark"] .highlight .vg { color: #ffa07a } /* Name.Variable.Global */ +html[data-theme="dark"] .highlight .vi { color: #ffa07a } /* Name.Variable.Instance */ +html[data-theme="dark"] .highlight .vm { color: #ffd900 } /* Name.Variable.Magic */ +html[data-theme="dark"] .highlight .il { color: #ffd900 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/level-zero/1.10/_static/sbt-webpack-macros.html b/level-zero/1.10/_static/sbt-webpack-macros.html new file mode 100644 index 0000000..6cbf559 --- /dev/null +++ b/level-zero/1.10/_static/sbt-webpack-macros.html @@ -0,0 +1,11 @@ + +{% macro head_pre_bootstrap() %} + +{% endmacro %} + +{% macro body_post() %} + +{% endmacro %} diff --git a/level-zero/1.10/_static/scripts/bootstrap.js b/level-zero/1.10/_static/scripts/bootstrap.js new file mode 100644 index 0000000..4e209b0 --- /dev/null +++ b/level-zero/1.10/_static/scripts/bootstrap.js @@ -0,0 +1,3 @@ +/*! For license information please see bootstrap.js.LICENSE.txt */ +(()=>{"use strict";var t={d:(e,i)=>{for(var n in i)t.o(i,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:i[n]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{afterMain:()=>E,afterRead:()=>v,afterWrite:()=>C,applyStyles:()=>$,arrow:()=>J,auto:()=>a,basePlacements:()=>l,beforeMain:()=>y,beforeRead:()=>_,beforeWrite:()=>A,bottom:()=>s,clippingParents:()=>d,computeStyles:()=>it,createPopper:()=>Dt,createPopperBase:()=>St,createPopperLite:()=>$t,detectOverflow:()=>_t,end:()=>h,eventListeners:()=>st,flip:()=>bt,hide:()=>wt,left:()=>r,main:()=>w,modifierPhases:()=>O,offset:()=>Et,placements:()=>g,popper:()=>f,popperGenerator:()=>Lt,popperOffsets:()=>At,preventOverflow:()=>Tt,read:()=>b,reference:()=>p,right:()=>o,start:()=>c,top:()=>n,variationPlacements:()=>m,viewport:()=>u,write:()=>T});var i={};t.r(i),t.d(i,{Alert:()=>Oe,Button:()=>ke,Carousel:()=>ri,Collapse:()=>yi,Dropdown:()=>Vi,Modal:()=>xn,Offcanvas:()=>Vn,Popover:()=>fs,ScrollSpy:()=>Ts,Tab:()=>Ks,Toast:()=>lo,Tooltip:()=>hs});var n="top",s="bottom",o="right",r="left",a="auto",l=[n,s,o,r],c="start",h="end",d="clippingParents",u="viewport",f="popper",p="reference",m=l.reduce((function(t,e){return t.concat([e+"-"+c,e+"-"+h])}),[]),g=[].concat(l,[a]).reduce((function(t,e){return t.concat([e,e+"-"+c,e+"-"+h])}),[]),_="beforeRead",b="read",v="afterRead",y="beforeMain",w="main",E="afterMain",A="beforeWrite",T="write",C="afterWrite",O=[_,b,v,y,w,E,A,T,C];function x(t){return t?(t.nodeName||"").toLowerCase():null}function k(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function L(t){return t instanceof k(t).Element||t instanceof Element}function S(t){return t instanceof k(t).HTMLElement||t instanceof HTMLElement}function D(t){return"undefined"!=typeof ShadowRoot&&(t instanceof k(t).ShadowRoot||t instanceof ShadowRoot)}const $={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];S(s)&&x(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});S(n)&&x(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function I(t){return t.split("-")[0]}var N=Math.max,P=Math.min,M=Math.round;function j(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function F(){return!/^((?!chrome|android).)*safari/i.test(j())}function H(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&S(t)&&(s=t.offsetWidth>0&&M(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&M(n.height)/t.offsetHeight||1);var r=(L(t)?k(t):window).visualViewport,a=!F()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function B(t){var e=H(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function W(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&D(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function z(t){return k(t).getComputedStyle(t)}function R(t){return["table","td","th"].indexOf(x(t))>=0}function q(t){return((L(t)?t.ownerDocument:t.document)||window.document).documentElement}function V(t){return"html"===x(t)?t:t.assignedSlot||t.parentNode||(D(t)?t.host:null)||q(t)}function Y(t){return S(t)&&"fixed"!==z(t).position?t.offsetParent:null}function K(t){for(var e=k(t),i=Y(t);i&&R(i)&&"static"===z(i).position;)i=Y(i);return i&&("html"===x(i)||"body"===x(i)&&"static"===z(i).position)?e:i||function(t){var e=/firefox/i.test(j());if(/Trident/i.test(j())&&S(t)&&"fixed"===z(t).position)return null;var i=V(t);for(D(i)&&(i=i.host);S(i)&&["html","body"].indexOf(x(i))<0;){var n=z(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Q(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function X(t,e,i){return N(t,P(e,i))}function U(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function G(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const J={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,a=t.name,c=t.options,h=i.elements.arrow,d=i.modifiersData.popperOffsets,u=I(i.placement),f=Q(u),p=[r,o].indexOf(u)>=0?"height":"width";if(h&&d){var m=function(t,e){return U("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:G(t,l))}(c.padding,i),g=B(h),_="y"===f?n:r,b="y"===f?s:o,v=i.rects.reference[p]+i.rects.reference[f]-d[f]-i.rects.popper[p],y=d[f]-i.rects.reference[f],w=K(h),E=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,A=v/2-y/2,T=m[_],C=E-g[p]-m[b],O=E/2-g[p]/2+A,x=X(T,O,C),k=f;i.modifiersData[a]=((e={})[k]=x,e.centerOffset=x-O,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&W(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Z(t){return t.split("-")[1]}var tt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function et(t){var e,i=t.popper,a=t.popperRect,l=t.placement,c=t.variation,d=t.offsets,u=t.position,f=t.gpuAcceleration,p=t.adaptive,m=t.roundOffsets,g=t.isFixed,_=d.x,b=void 0===_?0:_,v=d.y,y=void 0===v?0:v,w="function"==typeof m?m({x:b,y}):{x:b,y};b=w.x,y=w.y;var E=d.hasOwnProperty("x"),A=d.hasOwnProperty("y"),T=r,C=n,O=window;if(p){var x=K(i),L="clientHeight",S="clientWidth";x===k(i)&&"static"!==z(x=q(i)).position&&"absolute"===u&&(L="scrollHeight",S="scrollWidth"),(l===n||(l===r||l===o)&&c===h)&&(C=s,y-=(g&&x===O&&O.visualViewport?O.visualViewport.height:x[L])-a.height,y*=f?1:-1),l!==r&&(l!==n&&l!==s||c!==h)||(T=o,b-=(g&&x===O&&O.visualViewport?O.visualViewport.width:x[S])-a.width,b*=f?1:-1)}var D,$=Object.assign({position:u},p&&tt),I=!0===m?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:M(i*s)/s||0,y:M(n*s)/s||0}}({x:b,y},k(i)):{x:b,y};return b=I.x,y=I.y,f?Object.assign({},$,((D={})[C]=A?"0":"",D[T]=E?"0":"",D.transform=(O.devicePixelRatio||1)<=1?"translate("+b+"px, "+y+"px)":"translate3d("+b+"px, "+y+"px, 0)",D)):Object.assign({},$,((e={})[C]=A?y+"px":"",e[T]=E?b+"px":"",e.transform="",e))}const it={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:I(e.placement),variation:Z(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,et(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,et(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var nt={passive:!0};const st={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=k(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,nt)})),a&&l.addEventListener("resize",i.update,nt),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,nt)})),a&&l.removeEventListener("resize",i.update,nt)}},data:{}};var ot={left:"right",right:"left",bottom:"top",top:"bottom"};function rt(t){return t.replace(/left|right|bottom|top/g,(function(t){return ot[t]}))}var at={start:"end",end:"start"};function lt(t){return t.replace(/start|end/g,(function(t){return at[t]}))}function ct(t){var e=k(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ht(t){return H(q(t)).left+ct(t).scrollLeft}function dt(t){var e=z(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function ut(t){return["html","body","#document"].indexOf(x(t))>=0?t.ownerDocument.body:S(t)&&dt(t)?t:ut(V(t))}function ft(t,e){var i;void 0===e&&(e=[]);var n=ut(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=k(n),r=s?[o].concat(o.visualViewport||[],dt(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(ft(V(r)))}function pt(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function mt(t,e,i){return e===u?pt(function(t,e){var i=k(t),n=q(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=F();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+ht(t),y:l}}(t,i)):L(e)?function(t,e){var i=H(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):pt(function(t){var e,i=q(t),n=ct(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=N(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=N(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ht(t),l=-n.scrollTop;return"rtl"===z(s||i).direction&&(a+=N(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(q(t)))}function gt(t){var e,i=t.reference,a=t.element,l=t.placement,d=l?I(l):null,u=l?Z(l):null,f=i.x+i.width/2-a.width/2,p=i.y+i.height/2-a.height/2;switch(d){case n:e={x:f,y:i.y-a.height};break;case s:e={x:f,y:i.y+i.height};break;case o:e={x:i.x+i.width,y:p};break;case r:e={x:i.x-a.width,y:p};break;default:e={x:i.x,y:i.y}}var m=d?Q(d):null;if(null!=m){var g="y"===m?"height":"width";switch(u){case c:e[m]=e[m]-(i[g]/2-a[g]/2);break;case h:e[m]=e[m]+(i[g]/2-a[g]/2)}}return e}function _t(t,e){void 0===e&&(e={});var i=e,r=i.placement,a=void 0===r?t.placement:r,c=i.strategy,h=void 0===c?t.strategy:c,m=i.boundary,g=void 0===m?d:m,_=i.rootBoundary,b=void 0===_?u:_,v=i.elementContext,y=void 0===v?f:v,w=i.altBoundary,E=void 0!==w&&w,A=i.padding,T=void 0===A?0:A,C=U("number"!=typeof T?T:G(T,l)),O=y===f?p:f,k=t.rects.popper,D=t.elements[E?O:y],$=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=ft(V(t)),i=["absolute","fixed"].indexOf(z(t).position)>=0&&S(t)?K(t):t;return L(i)?e.filter((function(t){return L(t)&&W(t,i)&&"body"!==x(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=mt(t,i,n);return e.top=N(s.top,e.top),e.right=P(s.right,e.right),e.bottom=P(s.bottom,e.bottom),e.left=N(s.left,e.left),e}),mt(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(L(D)?D:D.contextElement||q(t.elements.popper),g,b,h),I=H(t.elements.reference),M=gt({reference:I,element:k,strategy:"absolute",placement:a}),j=pt(Object.assign({},k,M)),F=y===f?j:I,B={top:$.top-F.top+C.top,bottom:F.bottom-$.bottom+C.bottom,left:$.left-F.left+C.left,right:F.right-$.right+C.right},R=t.modifiersData.offset;if(y===f&&R){var Y=R[a];Object.keys(B).forEach((function(t){var e=[o,s].indexOf(t)>=0?1:-1,i=[n,s].indexOf(t)>=0?"y":"x";B[t]+=Y[i]*e}))}return B}const bt={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,h=t.name;if(!e.modifiersData[h]._skip){for(var d=i.mainAxis,u=void 0===d||d,f=i.altAxis,p=void 0===f||f,_=i.fallbackPlacements,b=i.padding,v=i.boundary,y=i.rootBoundary,w=i.altBoundary,E=i.flipVariations,A=void 0===E||E,T=i.allowedAutoPlacements,C=e.options.placement,O=I(C),x=_||(O!==C&&A?function(t){if(I(t)===a)return[];var e=rt(t);return[lt(t),e,lt(e)]}(C):[rt(C)]),k=[C].concat(x).reduce((function(t,i){return t.concat(I(i)===a?function(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,c=i.allowedAutoPlacements,h=void 0===c?g:c,d=Z(n),u=d?a?m:m.filter((function(t){return Z(t)===d})):l,f=u.filter((function(t){return h.indexOf(t)>=0}));0===f.length&&(f=u);var p=f.reduce((function(e,i){return e[i]=_t(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[I(i)],e}),{});return Object.keys(p).sort((function(t,e){return p[t]-p[e]}))}(e,{placement:i,boundary:v,rootBoundary:y,padding:b,flipVariations:A,allowedAutoPlacements:T}):i)}),[]),L=e.rects.reference,S=e.rects.popper,D=new Map,$=!0,N=k[0],P=0;P=0,B=H?"width":"height",W=_t(e,{placement:M,boundary:v,rootBoundary:y,altBoundary:w,padding:b}),z=H?F?o:r:F?s:n;L[B]>S[B]&&(z=rt(z));var R=rt(z),q=[];if(u&&q.push(W[j]<=0),p&&q.push(W[z]<=0,W[R]<=0),q.every((function(t){return t}))){N=M,$=!1;break}D.set(M,q)}if($)for(var V=function(t){var e=k.find((function(e){var i=D.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return N=e,"break"},Y=A?3:1;Y>0&&"break"!==V(Y);Y--);e.placement!==N&&(e.modifiersData[h]._skip=!0,e.placement=N,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function vt(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function yt(t){return[n,o,s,r].some((function(e){return t[e]>=0}))}const wt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=_t(e,{elementContext:"reference"}),a=_t(e,{altBoundary:!0}),l=vt(r,n),c=vt(a,s,o),h=yt(l),d=yt(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Et={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,s=t.name,a=i.offset,l=void 0===a?[0,0]:a,c=g.reduce((function(t,i){return t[i]=function(t,e,i){var s=I(t),a=[r,n].indexOf(s)>=0?-1:1,l="function"==typeof i?i(Object.assign({},e,{placement:t})):i,c=l[0],h=l[1];return c=c||0,h=(h||0)*a,[r,o].indexOf(s)>=0?{x:h,y:c}:{x:c,y:h}}(i,e.rects,l),t}),{}),h=c[e.placement],d=h.x,u=h.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=d,e.modifiersData.popperOffsets.y+=u),e.modifiersData[s]=c}},At={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=gt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},Tt={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,a=t.name,l=i.mainAxis,h=void 0===l||l,d=i.altAxis,u=void 0!==d&&d,f=i.boundary,p=i.rootBoundary,m=i.altBoundary,g=i.padding,_=i.tether,b=void 0===_||_,v=i.tetherOffset,y=void 0===v?0:v,w=_t(e,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),E=I(e.placement),A=Z(e.placement),T=!A,C=Q(E),O="x"===C?"y":"x",x=e.modifiersData.popperOffsets,k=e.rects.reference,L=e.rects.popper,S="function"==typeof y?y(Object.assign({},e.rects,{placement:e.placement})):y,D="number"==typeof S?{mainAxis:S,altAxis:S}:Object.assign({mainAxis:0,altAxis:0},S),$=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,M={x:0,y:0};if(x){if(h){var j,F="y"===C?n:r,H="y"===C?s:o,W="y"===C?"height":"width",z=x[C],R=z+w[F],q=z-w[H],V=b?-L[W]/2:0,Y=A===c?k[W]:L[W],U=A===c?-L[W]:-k[W],G=e.elements.arrow,J=b&&G?B(G):{width:0,height:0},tt=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},et=tt[F],it=tt[H],nt=X(0,k[W],J[W]),st=T?k[W]/2-V-nt-et-D.mainAxis:Y-nt-et-D.mainAxis,ot=T?-k[W]/2+V+nt+it+D.mainAxis:U+nt+it+D.mainAxis,rt=e.elements.arrow&&K(e.elements.arrow),at=rt?"y"===C?rt.clientTop||0:rt.clientLeft||0:0,lt=null!=(j=null==$?void 0:$[C])?j:0,ct=z+ot-lt,ht=X(b?P(R,z+st-lt-at):R,z,b?N(q,ct):q);x[C]=ht,M[C]=ht-z}if(u){var dt,ut="x"===C?n:r,ft="x"===C?s:o,pt=x[O],mt="y"===O?"height":"width",gt=pt+w[ut],bt=pt-w[ft],vt=-1!==[n,r].indexOf(E),yt=null!=(dt=null==$?void 0:$[O])?dt:0,wt=vt?gt:pt-k[mt]-L[mt]-yt+D.altAxis,Et=vt?pt+k[mt]+L[mt]-yt-D.altAxis:bt,At=b&&vt?function(t,e,i){var n=X(t,e,i);return n>i?i:n}(wt,pt,Et):X(b?wt:gt,pt,b?Et:bt);x[O]=At,M[O]=At-pt}e.modifiersData[a]=M}},requiresIfExists:["offset"]};function Ct(t,e,i){void 0===i&&(i=!1);var n,s,o=S(e),r=S(e)&&function(t){var e=t.getBoundingClientRect(),i=M(e.width)/t.offsetWidth||1,n=M(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=q(e),l=H(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==x(e)||dt(a))&&(c=(n=e)!==k(n)&&S(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:ct(n)),S(e)?((h=H(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=ht(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function Ot(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var xt={placement:"bottom",modifiers:[],strategy:"absolute"};function kt(){for(var t=arguments.length,e=new Array(t),i=0;iIt.has(t)&&It.get(t).get(e)||null,remove(t,e){if(!It.has(t))return;const i=It.get(t);i.delete(e),0===i.size&&It.delete(t)}},Pt="transitionend",Mt=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),jt=t=>{t.dispatchEvent(new Event(Pt))},Ft=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),Ht=t=>Ft(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(Mt(t)):null,Bt=t=>{if(!Ft(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},Wt=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),zt=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?zt(t.parentNode):null},Rt=()=>{},qt=t=>{t.offsetHeight},Vt=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Yt=[],Kt=()=>"rtl"===document.documentElement.dir,Qt=t=>{var e;e=()=>{const e=Vt();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(Yt.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of Yt)t()})),Yt.push(e)):e()},Xt=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,Ut=(t,e,i=!0)=>{if(!i)return void Xt(t);const n=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let s=!1;const o=({target:i})=>{i===e&&(s=!0,e.removeEventListener(Pt,o),Xt(t))};e.addEventListener(Pt,o),setTimeout((()=>{s||jt(e)}),n)},Gt=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},Jt=/[^.]*(?=\..*)\.|.*/,Zt=/\..*/,te=/::\d+$/,ee={};let ie=1;const ne={mouseenter:"mouseover",mouseleave:"mouseout"},se=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function oe(t,e){return e&&`${e}::${ie++}`||t.uidEvent||ie++}function re(t){const e=oe(t);return t.uidEvent=e,ee[e]=ee[e]||{},ee[e]}function ae(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function le(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=ue(t);return se.has(o)||(o=t),[n,s,o]}function ce(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=le(e,i,n);if(e in ne){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=re(t),c=l[a]||(l[a]={}),h=ae(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=oe(r,e.replace(Jt,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return pe(s,{delegateTarget:r}),n.oneOff&&fe.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return pe(n,{delegateTarget:t}),i.oneOff&&fe.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function he(t,e,i,n,s){const o=ae(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function de(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&he(t,e,i,r.callable,r.delegationSelector)}function ue(t){return t=t.replace(Zt,""),ne[t]||t}const fe={on(t,e,i,n){ce(t,e,i,n,!1)},one(t,e,i,n){ce(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=le(e,i,n),a=r!==e,l=re(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))de(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(te,"");a&&!e.includes(s)||he(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;he(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=Vt();let s=null,o=!0,r=!0,a=!1;e!==ue(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=pe(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function pe(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function me(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function ge(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const _e={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${ge(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${ge(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=me(t.dataset[n])}return e},getDataAttribute:(t,e)=>me(t.getAttribute(`data-bs-${ge(e)}`))};class be{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=Ft(e)?_e.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...Ft(e)?_e.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],o=Ft(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${o}" but expected type "${s}".`)}var i}}class ve extends be{constructor(t,e){super(),(t=Ht(t))&&(this._element=t,this._config=this._getConfig(e),Nt.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Nt.remove(this._element,this.constructor.DATA_KEY),fe.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){Ut(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Nt.get(Ht(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.2"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const ye=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?Mt(i.trim()):null}return e},we={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!Wt(t)&&Bt(t)))},getSelectorFromElement(t){const e=ye(t);return e&&we.findOne(e)?e:null},getElementFromSelector(t){const e=ye(t);return e?we.findOne(e):null},getMultipleElementsFromSelector(t){const e=ye(t);return e?we.find(e):[]}},Ee=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;fe.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),Wt(this))return;const s=we.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},Ae=".bs.alert",Te=`close${Ae}`,Ce=`closed${Ae}`;class Oe extends ve{static get NAME(){return"alert"}close(){if(fe.trigger(this._element,Te).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),fe.trigger(this._element,Ce),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Oe.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}Ee(Oe,"close"),Qt(Oe);const xe='[data-bs-toggle="button"]';class ke extends ve{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=ke.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}fe.on(document,"click.bs.button.data-api",xe,(t=>{t.preventDefault();const e=t.target.closest(xe);ke.getOrCreateInstance(e).toggle()})),Qt(ke);const Le=".bs.swipe",Se=`touchstart${Le}`,De=`touchmove${Le}`,$e=`touchend${Le}`,Ie=`pointerdown${Le}`,Ne=`pointerup${Le}`,Pe={endCallback:null,leftCallback:null,rightCallback:null},Me={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class je extends be{constructor(t,e){super(),this._element=t,t&&je.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Pe}static get DefaultType(){return Me}static get NAME(){return"swipe"}dispose(){fe.off(this._element,Le)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Xt(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&Xt(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(fe.on(this._element,Ie,(t=>this._start(t))),fe.on(this._element,Ne,(t=>this._end(t))),this._element.classList.add("pointer-event")):(fe.on(this._element,Se,(t=>this._start(t))),fe.on(this._element,De,(t=>this._move(t))),fe.on(this._element,$e,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Fe=".bs.carousel",He=".data-api",Be="next",We="prev",ze="left",Re="right",qe=`slide${Fe}`,Ve=`slid${Fe}`,Ye=`keydown${Fe}`,Ke=`mouseenter${Fe}`,Qe=`mouseleave${Fe}`,Xe=`dragstart${Fe}`,Ue=`load${Fe}${He}`,Ge=`click${Fe}${He}`,Je="carousel",Ze="active",ti=".active",ei=".carousel-item",ii=ti+ei,ni={ArrowLeft:Re,ArrowRight:ze},si={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},oi={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class ri extends ve{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=we.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===Je&&this.cycle()}static get Default(){return si}static get DefaultType(){return oi}static get NAME(){return"carousel"}next(){this._slide(Be)}nextWhenVisible(){!document.hidden&&Bt(this._element)&&this.next()}prev(){this._slide(We)}pause(){this._isSliding&&jt(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?fe.one(this._element,Ve,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void fe.one(this._element,Ve,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?Be:We;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&fe.on(this._element,Ye,(t=>this._keydown(t))),"hover"===this._config.pause&&(fe.on(this._element,Ke,(()=>this.pause())),fe.on(this._element,Qe,(()=>this._maybeEnableCycle()))),this._config.touch&&je.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of we.find(".carousel-item img",this._element))fe.on(t,Xe,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ze)),rightCallback:()=>this._slide(this._directionToOrder(Re)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new je(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=ni[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=we.findOne(ti,this._indicatorsElement);e.classList.remove(Ze),e.removeAttribute("aria-current");const i=we.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(Ze),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===Be,s=e||Gt(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>fe.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(qe).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),qt(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(Ze),i.classList.remove(Ze,c,l),this._isSliding=!1,r(Ve)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return we.findOne(ii,this._element)}_getItems(){return we.find(ei,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return Kt()?t===ze?We:Be:t===ze?Be:We}_orderToDirection(t){return Kt()?t===We?ze:Re:t===We?Re:ze}static jQueryInterface(t){return this.each((function(){const e=ri.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}fe.on(document,Ge,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=we.getElementFromSelector(this);if(!e||!e.classList.contains(Je))return;t.preventDefault();const i=ri.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===_e.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),fe.on(window,Ue,(()=>{const t=we.find('[data-bs-ride="carousel"]');for(const e of t)ri.getOrCreateInstance(e)})),Qt(ri);const ai=".bs.collapse",li=`show${ai}`,ci=`shown${ai}`,hi=`hide${ai}`,di=`hidden${ai}`,ui=`click${ai}.data-api`,fi="show",pi="collapse",mi="collapsing",gi=`:scope .${pi} .${pi}`,_i='[data-bs-toggle="collapse"]',bi={parent:null,toggle:!0},vi={parent:"(null|element)",toggle:"boolean"};class yi extends ve{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=we.find(_i);for(const t of i){const e=we.getSelectorFromElement(t),i=we.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return bi}static get DefaultType(){return vi}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>yi.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(fe.trigger(this._element,li).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(pi),this._element.classList.add(mi),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(mi),this._element.classList.add(pi,fi),this._element.style[e]="",fe.trigger(this._element,ci)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(fe.trigger(this._element,hi).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,qt(this._element),this._element.classList.add(mi),this._element.classList.remove(pi,fi);for(const t of this._triggerArray){const e=we.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(mi),this._element.classList.add(pi),fe.trigger(this._element,di)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(fi)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=Ht(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(_i);for(const e of t){const t=we.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=we.find(gi,this._config.parent);return we.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=yi.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}fe.on(document,ui,_i,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of we.getMultipleElementsFromSelector(this))yi.getOrCreateInstance(t,{toggle:!1}).toggle()})),Qt(yi);const wi="dropdown",Ei=".bs.dropdown",Ai=".data-api",Ti="ArrowUp",Ci="ArrowDown",Oi=`hide${Ei}`,xi=`hidden${Ei}`,ki=`show${Ei}`,Li=`shown${Ei}`,Si=`click${Ei}${Ai}`,Di=`keydown${Ei}${Ai}`,$i=`keyup${Ei}${Ai}`,Ii="show",Ni='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',Pi=`${Ni}.${Ii}`,Mi=".dropdown-menu",ji=Kt()?"top-end":"top-start",Fi=Kt()?"top-start":"top-end",Hi=Kt()?"bottom-end":"bottom-start",Bi=Kt()?"bottom-start":"bottom-end",Wi=Kt()?"left-start":"right-start",zi=Kt()?"right-start":"left-start",Ri={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},qi={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Vi extends ve{constructor(t,e){super(t,e),this._popper=null,this._parent=this._element.parentNode,this._menu=we.next(this._element,Mi)[0]||we.prev(this._element,Mi)[0]||we.findOne(Mi,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Ri}static get DefaultType(){return qi}static get NAME(){return wi}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Wt(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!fe.trigger(this._element,ki,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Ii),this._element.classList.add(Ii),fe.trigger(this._element,Li,t)}}hide(){if(Wt(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!fe.trigger(this._element,Oi,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._popper&&this._popper.destroy(),this._menu.classList.remove(Ii),this._element.classList.remove(Ii),this._element.setAttribute("aria-expanded","false"),_e.removeDataAttribute(this._menu,"popper"),fe.trigger(this._element,xi,t)}}_getConfig(t){if("object"==typeof(t=super._getConfig(t)).reference&&!Ft(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${wi.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(void 0===e)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;"parent"===this._config.reference?t=this._parent:Ft(this._config.reference)?t=Ht(this._config.reference):"object"==typeof this._config.reference&&(t=this._config.reference);const i=this._getPopperConfig();this._popper=Dt(t,this._menu,i)}_isShown(){return this._menu.classList.contains(Ii)}_getPlacement(){const t=this._parent;if(t.classList.contains("dropend"))return Wi;if(t.classList.contains("dropstart"))return zi;if(t.classList.contains("dropup-center"))return"top";if(t.classList.contains("dropdown-center"))return"bottom";const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?Fi:ji:e?Bi:Hi}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(_e.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Xt(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=we.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>Bt(t)));i.length&&Gt(i,e,t===Ci,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=Vi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=we.find(Pi);for(const i of e){const e=Vi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ti,Ci].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ni)?this:we.prev(this,Ni)[0]||we.next(this,Ni)[0]||we.findOne(Ni,t.delegateTarget.parentNode),o=Vi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}fe.on(document,Di,Ni,Vi.dataApiKeydownHandler),fe.on(document,Di,Mi,Vi.dataApiKeydownHandler),fe.on(document,Si,Vi.clearMenus),fe.on(document,$i,Vi.clearMenus),fe.on(document,Si,Ni,(function(t){t.preventDefault(),Vi.getOrCreateInstance(this).toggle()})),Qt(Vi);const Yi="backdrop",Ki="show",Qi=`mousedown.bs.${Yi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Ui={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Gi extends be{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Ui}static get NAME(){return Yi}show(t){if(!this._config.isVisible)return void Xt(t);this._append();const e=this._getElement();this._config.isAnimated&&qt(e),e.classList.add(Ki),this._emulateAnimation((()=>{Xt(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),Xt(t)}))):Xt(t)}dispose(){this._isAppended&&(fe.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=Ht(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),fe.on(t,Qi,(()=>{Xt(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){Ut(t,this._getElement(),this._config.isAnimated)}}const Ji=".bs.focustrap",Zi=`focusin${Ji}`,tn=`keydown.tab${Ji}`,en="backward",nn={autofocus:!0,trapElement:null},sn={autofocus:"boolean",trapElement:"element"};class on extends be{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return nn}static get DefaultType(){return sn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),fe.off(document,Ji),fe.on(document,Zi,(t=>this._handleFocusin(t))),fe.on(document,tn,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,fe.off(document,Ji))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=we.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===en?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?en:"forward")}}const rn=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",an=".sticky-top",ln="padding-right",cn="margin-right";class hn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,ln,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e+t)),this._setElementAttributes(an,cn,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,ln),this._resetElementAttributes(rn,ln),this._resetElementAttributes(an,cn)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&_e.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=_e.getDataAttribute(t,e);null!==i?(_e.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(Ft(t))e(t);else for(const i of we.find(t,this._element))e(i)}}const dn=".bs.modal",un=`hide${dn}`,fn=`hidePrevented${dn}`,pn=`hidden${dn}`,mn=`show${dn}`,gn=`shown${dn}`,_n=`resize${dn}`,bn=`click.dismiss${dn}`,vn=`mousedown.dismiss${dn}`,yn=`keydown.dismiss${dn}`,wn=`click${dn}.data-api`,En="modal-open",An="show",Tn="modal-static",Cn={backdrop:!0,focus:!0,keyboard:!0},On={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class xn extends ve{constructor(t,e){super(t,e),this._dialog=we.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new hn,this._addEventListeners()}static get Default(){return Cn}static get DefaultType(){return On}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||fe.trigger(this._element,mn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(En),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(fe.trigger(this._element,un).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){fe.off(window,dn),fe.off(this._dialog,dn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Gi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new on({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=we.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),qt(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,fe.trigger(this._element,gn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){fe.on(this._element,yn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),fe.on(window,_n,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),fe.on(this._element,vn,(t=>{fe.one(this._element,bn,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(En),this._resetAdjustments(),this._scrollBar.reset(),fe.trigger(this._element,pn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(fe.trigger(this._element,fn).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(Tn)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(Tn),this._queueCallback((()=>{this._element.classList.remove(Tn),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=Kt()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=Kt()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=xn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}fe.on(document,wn,'[data-bs-toggle="modal"]',(function(t){const e=we.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),fe.one(e,mn,(t=>{t.defaultPrevented||fe.one(e,pn,(()=>{Bt(this)&&this.focus()}))}));const i=we.findOne(".modal.show");i&&xn.getInstance(i).hide(),xn.getOrCreateInstance(e).toggle(this)})),Ee(xn),Qt(xn);const kn=".bs.offcanvas",Ln=".data-api",Sn=`load${kn}${Ln}`,Dn="show",$n="showing",In="hiding",Nn=".offcanvas.show",Pn=`show${kn}`,Mn=`shown${kn}`,jn=`hide${kn}`,Fn=`hidePrevented${kn}`,Hn=`hidden${kn}`,Bn=`resize${kn}`,Wn=`click${kn}${Ln}`,zn=`keydown.dismiss${kn}`,Rn={backdrop:!0,keyboard:!0,scroll:!1},qn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Vn extends ve{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Rn}static get DefaultType(){return qn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||fe.trigger(this._element,Pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new hn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($n),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Dn),this._element.classList.remove($n),fe.trigger(this._element,Mn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(fe.trigger(this._element,jn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(In),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Dn,In),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new hn).reset(),fe.trigger(this._element,Hn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Gi({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():fe.trigger(this._element,Fn)}:null})}_initializeFocusTrap(){return new on({trapElement:this._element})}_addEventListeners(){fe.on(this._element,zn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():fe.trigger(this._element,Fn))}))}static jQueryInterface(t){return this.each((function(){const e=Vn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}fe.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=we.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this))return;fe.one(e,Hn,(()=>{Bt(this)&&this.focus()}));const i=we.findOne(Nn);i&&i!==e&&Vn.getInstance(i).hide(),Vn.getOrCreateInstance(e).toggle(this)})),fe.on(window,Sn,(()=>{for(const t of we.find(Nn))Vn.getOrCreateInstance(t).show()})),fe.on(window,Bn,(()=>{for(const t of we.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&Vn.getOrCreateInstance(t).hide()})),Ee(Vn),Qt(Vn);const Yn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Un={allowList:Yn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Gn={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Jn={entry:"(string|element|function|null)",selector:"(string|element)"};class Zn extends be{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Un}static get DefaultType(){return Gn}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Jn)}_setContent(t,e,i){const n=we.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?Ft(e)?this._putElementInTemplate(Ht(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Xt(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const ts=new Set(["sanitize","allowList","sanitizeFn"]),es="fade",is="show",ns=".modal",ss="hide.bs.modal",os="hover",rs="focus",as={AUTO:"auto",TOP:"top",RIGHT:Kt()?"left":"right",BOTTOM:"bottom",LEFT:Kt()?"right":"left"},ls={allowList:Yn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},cs={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class hs extends ve{constructor(t,i){if(void 0===e)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,i),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return ls}static get DefaultType(){return cs}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),fe.off(this._element.closest(ns),ss,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=fe.trigger(this._element,this.constructor.eventName("show")),e=(zt(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),fe.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(is),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.on(t,"mouseover",Rt);this._queueCallback((()=>{fe.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!fe.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(is),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))fe.off(t,"mouseover",Rt);this._activeTrigger.click=!1,this._activeTrigger[rs]=!1,this._activeTrigger[os]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),fe.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(es,is),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(es),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Zn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(es)}_isShown(){return this.tip&&this.tip.classList.contains(is)}_createPopper(t){const e=Xt(this._config.placement,[this,t,this._element]),i=as[e.toUpperCase()];return Dt(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return Xt(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...Xt(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)fe.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===os?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===os?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");fe.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?rs:os]=!0,e._enter()})),fe.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?rs:os]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},fe.on(this._element.closest(ns),ss,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=_e.getDataAttributes(this._element);for(const t of Object.keys(e))ts.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:Ht(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=hs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(hs);const ds={...hs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},us={...hs.DefaultType,content:"(null|string|element|function)"};class fs extends hs{static get Default(){return ds}static get DefaultType(){return us}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=fs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}Qt(fs);const ps=".bs.scrollspy",ms=`activate${ps}`,gs=`click${ps}`,_s=`load${ps}.data-api`,bs="active",vs="[href]",ys=".nav-link",ws=`${ys}, .nav-item > ${ys}, .list-group-item`,Es={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Ts extends ve{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Es}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=Ht(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(fe.off(this._config.target,gs),fe.on(this._config.target,gs,vs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=we.find(vs,this._config.target);for(const e of t){if(!e.hash||Wt(e))continue;const t=we.findOne(decodeURI(e.hash),this._element);Bt(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(bs),this._activateParents(t),fe.trigger(this._element,ms,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))we.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(bs);else for(const e of we.parents(t,".nav, .list-group"))for(const t of we.prev(e,ws))t.classList.add(bs)}_clearActiveClass(t){t.classList.remove(bs);const e=we.find(`${vs}.${bs}`,t);for(const t of e)t.classList.remove(bs)}static jQueryInterface(t){return this.each((function(){const e=Ts.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(window,_s,(()=>{for(const t of we.find('[data-bs-spy="scroll"]'))Ts.getOrCreateInstance(t)})),Qt(Ts);const Cs=".bs.tab",Os=`hide${Cs}`,xs=`hidden${Cs}`,ks=`show${Cs}`,Ls=`shown${Cs}`,Ss=`click${Cs}`,Ds=`keydown${Cs}`,$s=`load${Cs}`,Is="ArrowLeft",Ns="ArrowRight",Ps="ArrowUp",Ms="ArrowDown",js="Home",Fs="End",Hs="active",Bs="fade",Ws="show",zs=".dropdown-toggle",Rs=`:not(${zs})`,qs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Vs=`.nav-link${Rs}, .list-group-item${Rs}, [role="tab"]${Rs}, ${qs}`,Ys=`.${Hs}[data-bs-toggle="tab"], .${Hs}[data-bs-toggle="pill"], .${Hs}[data-bs-toggle="list"]`;class Ks extends ve{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),fe.on(this._element,Ds,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?fe.trigger(e,Os,{relatedTarget:t}):null;fe.trigger(t,ks,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Hs),this._activate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),fe.trigger(t,Ls,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Bs)))}_deactivate(t,e){t&&(t.classList.remove(Hs),t.blur(),this._deactivate(we.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),fe.trigger(t,xs,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Bs)))}_keydown(t){if(![Is,Ns,Ps,Ms,js,Fs].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!Wt(t)));let i;if([js,Fs].includes(t.key))i=e[t.key===js?0:e.length-1];else{const n=[Ns,Ms].includes(t.key);i=Gt(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Ks.getOrCreateInstance(i).show())}_getChildren(){return we.find(Vs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=we.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=we.findOne(t,i);s&&s.classList.toggle(n,e)};n(zs,Hs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Hs)}_getInnerElement(t){return t.matches(Vs)?t:we.findOne(Vs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Ks.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}fe.on(document,Ss,qs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),Wt(this)||Ks.getOrCreateInstance(this).show()})),fe.on(window,$s,(()=>{for(const t of we.find(Ys))Ks.getOrCreateInstance(t)})),Qt(Ks);const Qs=".bs.toast",Xs=`mouseover${Qs}`,Us=`mouseout${Qs}`,Gs=`focusin${Qs}`,Js=`focusout${Qs}`,Zs=`hide${Qs}`,to=`hidden${Qs}`,eo=`show${Qs}`,io=`shown${Qs}`,no="hide",so="show",oo="showing",ro={animation:"boolean",autohide:"boolean",delay:"number"},ao={animation:!0,autohide:!0,delay:5e3};class lo extends ve{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return ao}static get DefaultType(){return ro}static get NAME(){return"toast"}show(){fe.trigger(this._element,eo).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(no),qt(this._element),this._element.classList.add(so,oo),this._queueCallback((()=>{this._element.classList.remove(oo),fe.trigger(this._element,io),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(fe.trigger(this._element,Zs).defaultPrevented||(this._element.classList.add(oo),this._queueCallback((()=>{this._element.classList.add(no),this._element.classList.remove(oo,so),fe.trigger(this._element,to)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(so),super.dispose()}isShown(){return this._element.classList.contains(so)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){fe.on(this._element,Xs,(t=>this._onInteraction(t,!0))),fe.on(this._element,Us,(t=>this._onInteraction(t,!1))),fe.on(this._element,Gs,(t=>this._onInteraction(t,!0))),fe.on(this._element,Js,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=lo.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}function co(t){"loading"!=document.readyState?t():document.addEventListener("DOMContentLoaded",t)}Ee(lo),Qt(lo),co((function(){[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map((function(t){return new hs(t,{delay:{show:500,hide:100}})}))})),co((function(){document.getElementById("pst-back-to-top").addEventListener("click",(function(){document.body.scrollTop=0,document.documentElement.scrollTop=0}))})),co((function(){var t=document.getElementById("pst-back-to-top"),e=document.getElementsByClassName("bd-header")[0].getBoundingClientRect();window.addEventListener("scroll",(function(){this.oldScroll>this.scrollY&&this.scrollY>e.bottom?t.style.display="block":t.style.display="none",this.oldScroll=this.scrollY}))})),window.bootstrap=i})(); +//# sourceMappingURL=bootstrap.js.map \ No newline at end of file diff --git a/level-zero/1.10/_static/scripts/bootstrap.js.LICENSE.txt b/level-zero/1.10/_static/scripts/bootstrap.js.LICENSE.txt new file mode 100644 index 0000000..10f979d --- /dev/null +++ b/level-zero/1.10/_static/scripts/bootstrap.js.LICENSE.txt @@ -0,0 +1,5 @@ +/*! + * Bootstrap v5.3.2 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ diff --git a/level-zero/1.10/_static/scripts/bootstrap.js.map b/level-zero/1.10/_static/scripts/bootstrap.js.map new file mode 100644 index 0000000..64e212b --- /dev/null +++ b/level-zero/1.10/_static/scripts/bootstrap.js.map @@ -0,0 +1 @@ +{"version":3,"file":"scripts/bootstrap.js","mappings":"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","sources":["webpack://pydata_sphinx_theme/webpack/bootstrap","webpack://pydata_sphinx_theme/webpack/runtime/define property getters","webpack://pydata_sphinx_theme/webpack/runtime/hasOwnProperty shorthand","webpack://pydata_sphinx_theme/webpack/runtime/make namespace object","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/enums.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/math.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/userAgent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/contains.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/within.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/arrow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getVariation.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/detectOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/flip.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/hide.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/offset.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/getAltAxis.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/orderModifiers.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/createPopper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/debounce.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/utils/mergeByName.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper.js","webpack://pydata_sphinx_theme/./node_modules/@popperjs/core/lib/popper-lite.js","webpack://pydata_sphinx_theme/./node_modules/bootstrap/dist/js/bootstrap.esm.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/mixin.js","webpack://pydata_sphinx_theme/./src/pydata_sphinx_theme/assets/scripts/bootstrap.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export var top = 'top';\nexport var bottom = 'bottom';\nexport var right = 'right';\nexport var left = 'left';\nexport var auto = 'auto';\nexport var basePlacements = [top, bottom, right, left];\nexport var start = 'start';\nexport var end = 'end';\nexport var clippingParents = 'clippingParents';\nexport var viewport = 'viewport';\nexport var popper = 'popper';\nexport var reference = 'reference';\nexport var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nexport var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nexport var beforeRead = 'beforeRead';\nexport var read = 'read';\nexport var afterRead = 'afterRead'; // pure-logic modifiers\n\nexport var beforeMain = 'beforeMain';\nexport var main = 'main';\nexport var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nexport var beforeWrite = 'beforeWrite';\nexport var write = 'write';\nexport var afterWrite = 'afterWrite';\nexport var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];","export default function getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}","export default function getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}","import getWindow from \"./getWindow.js\";\n\nfunction isElement(node) {\n var OwnElement = getWindow(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = getWindow(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = getWindow(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\nexport { isElement, isHTMLElement, isShadowRoot };","import getNodeName from \"../dom-utils/getNodeName.js\";\nimport { isHTMLElement } from \"../dom-utils/instanceOf.js\"; // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!isHTMLElement(element) || !getNodeName(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n};","import { auto } from \"../enums.js\";\nexport default function getBasePlacement(placement) {\n return placement.split('-')[0];\n}","export var max = Math.max;\nexport var min = Math.min;\nexport var round = Math.round;","export default function getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}","import getUAString from \"../utils/userAgent.js\";\nexport default function isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test(getUAString());\n}","import { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport { round } from \"../utils/math.js\";\nimport getWindow from \"./getWindow.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && isHTMLElement(element)) {\n scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = isElement(element) ? getWindow(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !isLayoutViewport() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\"; // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nexport default function getLayoutRect(element) {\n var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}","import { isShadowRoot } from \"./instanceOf.js\";\nexport default function contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && isShadowRoot(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}","import getWindow from \"./getWindow.js\";\nexport default function getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}","import getNodeName from \"./getNodeName.js\";\nexport default function isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0;\n}","import { isElement } from \"./instanceOf.js\";\nexport default function getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}","import getNodeName from \"./getNodeName.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport { isShadowRoot } from \"./instanceOf.js\";\nexport default function getParentNode(element) {\n if (getNodeName(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n isShadowRoot(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n getDocumentElement(element) // fallback\n\n );\n}","import getWindow from \"./getWindow.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isHTMLElement, isShadowRoot } from \"./instanceOf.js\";\nimport isTableElement from \"./isTableElement.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getUAString from \"../utils/userAgent.js\";\n\nfunction getTrueOffsetParent(element) {\n if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837\n getComputedStyle(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test(getUAString());\n var isIE = /Trident/i.test(getUAString());\n\n if (isIE && isHTMLElement(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = getComputedStyle(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = getParentNode(element);\n\n if (isShadowRoot(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) {\n var css = getComputedStyle(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nexport default function getOffsetParent(element) {\n var window = getWindow(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && isTableElement(offsetParent) && getComputedStyle(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}","export default function getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}","import { max as mathMax, min as mathMin } from \"./math.js\";\nexport function within(min, value, max) {\n return mathMax(min, mathMin(value, max));\n}\nexport function withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}","import getFreshSideObject from \"./getFreshSideObject.js\";\nexport default function mergePaddingObject(paddingObject) {\n return Object.assign({}, getFreshSideObject(), paddingObject);\n}","export default function getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}","export default function expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport contains from \"../dom-utils/contains.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport { within } from \"../utils/within.js\";\nimport mergePaddingObject from \"../utils/mergePaddingObject.js\";\nimport expandToHashMap from \"../utils/expandToHashMap.js\";\nimport { left, right, basePlacements, top, bottom } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = getBasePlacement(state.placement);\n var axis = getMainAxisFromPlacement(basePlacement);\n var isVertical = [left, right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = getLayoutRect(arrowElement);\n var minProp = axis === 'y' ? top : left;\n var maxProp = axis === 'y' ? bottom : right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = getOffsetParent(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = within(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!contains(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n};","export default function getVariation(placement) {\n return placement.split('-')[1];\n}","import { top, left, right, bottom, end } from \"../enums.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport getWindow from \"../dom-utils/getWindow.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getComputedStyle from \"../dom-utils/getComputedStyle.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport { round } from \"../utils/math.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: round(x * dpr) / dpr || 0,\n y: round(y * dpr) / dpr || 0\n };\n}\n\nexport function mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = left;\n var sideY = top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = getOffsetParent(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === getWindow(popper)) {\n offsetParent = getDocumentElement(popper);\n\n if (getComputedStyle(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === top || (placement === left || placement === right) && variation === end) {\n sideY = bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === left || (placement === top || placement === bottom) && variation === end) {\n sideX = right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, getWindow(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: getBasePlacement(state.placement),\n variation: getVariation(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n};","import getWindow from \"../dom-utils/getWindow.js\"; // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = getWindow(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n};","var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nexport default function getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}","var hash = {\n start: 'end',\n end: 'start'\n};\nexport default function getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}","import getWindow from \"./getWindow.js\";\nexport default function getWindowScroll(node) {\n var win = getWindow(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nexport default function getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft;\n}","import getComputedStyle from \"./getComputedStyle.js\";\nexport default function isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = getComputedStyle(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}","import getParentNode from \"./getParentNode.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nexport default function getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (isHTMLElement(node) && isScrollParent(node)) {\n return node;\n }\n\n return getScrollParent(getParentNode(node));\n}","import getScrollParent from \"./getScrollParent.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport getWindow from \"./getWindow.js\";\nimport isScrollParent from \"./isScrollParent.js\";\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nexport default function listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = getScrollParent(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = getWindow(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(getParentNode(target)));\n}","export default function rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}","import { viewport } from \"../enums.js\";\nimport getViewportRect from \"./getViewportRect.js\";\nimport getDocumentRect from \"./getDocumentRect.js\";\nimport listScrollParents from \"./listScrollParents.js\";\nimport getOffsetParent from \"./getOffsetParent.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport { isElement, isHTMLElement } from \"./instanceOf.js\";\nimport getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getParentNode from \"./getParentNode.js\";\nimport contains from \"./contains.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport rectToClientRect from \"../utils/rectToClientRect.js\";\nimport { max, min } from \"../utils/math.js\";\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = getBoundingClientRect(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = listScrollParents(getParentNode(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle(element).position) >= 0;\n var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element;\n\n if (!isElement(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nexport default function getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = max(rect.top, accRect.top);\n accRect.right = min(rect.right, accRect.right);\n accRect.bottom = min(rect.bottom, accRect.bottom);\n accRect.left = max(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}","import getWindow from \"./getWindow.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport isLayoutViewport from \"./isLayoutViewport.js\";\nexport default function getViewportRect(element, strategy) {\n var win = getWindow(element);\n var html = getDocumentElement(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = isLayoutViewport();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + getWindowScrollBarX(element),\n y: y\n };\n}","import getDocumentElement from \"./getDocumentElement.js\";\nimport getComputedStyle from \"./getComputedStyle.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getWindowScroll from \"./getWindowScroll.js\";\nimport { max } from \"../utils/math.js\"; // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nexport default function getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = getDocumentElement(element);\n var winScroll = getWindowScroll(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + getWindowScrollBarX(element);\n var y = -winScroll.scrollTop;\n\n if (getComputedStyle(body || html).direction === 'rtl') {\n x += max(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}","import getBasePlacement from \"./getBasePlacement.js\";\nimport getVariation from \"./getVariation.js\";\nimport getMainAxisFromPlacement from \"./getMainAxisFromPlacement.js\";\nimport { top, right, bottom, left, start, end } from \"../enums.js\";\nexport default function computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? getBasePlacement(placement) : null;\n var variation = placement ? getVariation(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}","import getClippingRect from \"../dom-utils/getClippingRect.js\";\nimport getDocumentElement from \"../dom-utils/getDocumentElement.js\";\nimport getBoundingClientRect from \"../dom-utils/getBoundingClientRect.js\";\nimport computeOffsets from \"./computeOffsets.js\";\nimport rectToClientRect from \"./rectToClientRect.js\";\nimport { clippingParents, reference, popper, bottom, top, right, basePlacements, viewport } from \"../enums.js\";\nimport { isElement } from \"../dom-utils/instanceOf.js\";\nimport mergePaddingObject from \"./mergePaddingObject.js\";\nimport expandToHashMap from \"./expandToHashMap.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport default function detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements));\n var altContext = elementContext === popper ? reference : popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = getBoundingClientRect(state.elements.reference);\n var popperOffsets = computeOffsets({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}","import getOppositePlacement from \"../utils/getOppositePlacement.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getOppositeVariationPlacement from \"../utils/getOppositeVariationPlacement.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport computeAutoPlacement from \"../utils/computeAutoPlacement.js\";\nimport { bottom, top, start, right, left, auto } from \"../enums.js\";\nimport getVariation from \"../utils/getVariation.js\"; // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (getBasePlacement(placement) === auto) {\n return [];\n }\n\n var oppositePlacement = getOppositePlacement(placement);\n return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = getBasePlacement(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = getBasePlacement(placement);\n\n var isStartVariation = getVariation(placement) === start;\n var isVertical = [top, bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = getOppositePlacement(mainVariationSide);\n }\n\n var altVariationSide = getOppositePlacement(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n};","import getVariation from \"./getVariation.js\";\nimport { variationPlacements, basePlacements, placements as allPlacements } from \"../enums.js\";\nimport detectOverflow from \"./detectOverflow.js\";\nimport getBasePlacement from \"./getBasePlacement.js\";\nexport default function computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? allPlacements : _options$allowedAutoP;\n var variation = getVariation(placement);\n var placements = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) {\n return getVariation(placement) === variation;\n }) : basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = detectOverflow(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[getBasePlacement(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}","import { top, bottom, left, right } from \"../enums.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [top, right, bottom, left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = detectOverflow(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = detectOverflow(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n};","import getBasePlacement from \"../utils/getBasePlacement.js\";\nimport { top, left, right, placements } from \"../enums.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport function distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = getBasePlacement(placement);\n var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [left, right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n};","import computeOffsets from \"../utils/computeOffsets.js\";\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = computeOffsets({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n};","import { top, left, right, bottom, start } from \"../enums.js\";\nimport getBasePlacement from \"../utils/getBasePlacement.js\";\nimport getMainAxisFromPlacement from \"../utils/getMainAxisFromPlacement.js\";\nimport getAltAxis from \"../utils/getAltAxis.js\";\nimport { within, withinMaxClamp } from \"../utils/within.js\";\nimport getLayoutRect from \"../dom-utils/getLayoutRect.js\";\nimport getOffsetParent from \"../dom-utils/getOffsetParent.js\";\nimport detectOverflow from \"../utils/detectOverflow.js\";\nimport getVariation from \"../utils/getVariation.js\";\nimport getFreshSideObject from \"../utils/getFreshSideObject.js\";\nimport { min as mathMin, max as mathMax } from \"../utils/math.js\";\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = detectOverflow(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = getBasePlacement(state.placement);\n var variation = getVariation(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = getMainAxisFromPlacement(basePlacement);\n var altAxis = getAltAxis(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? top : left;\n var altSide = mainAxis === 'y' ? bottom : right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = within(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = within(tether ? mathMin(min, tetherMin) : min, offset, tether ? mathMax(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? top : left;\n\n var _altSide = mainAxis === 'x' ? bottom : right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [top, left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\nexport default {\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n};","export default function getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}","import getBoundingClientRect from \"./getBoundingClientRect.js\";\nimport getNodeScroll from \"./getNodeScroll.js\";\nimport getNodeName from \"./getNodeName.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getWindowScrollBarX from \"./getWindowScrollBarX.js\";\nimport getDocumentElement from \"./getDocumentElement.js\";\nimport isScrollParent from \"./isScrollParent.js\";\nimport { round } from \"../utils/math.js\";\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = round(rect.width) / element.offsetWidth || 1;\n var scaleY = round(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nexport default function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = isHTMLElement(offsetParent);\n var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent);\n var documentElement = getDocumentElement(offsetParent);\n var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n isScrollParent(documentElement)) {\n scroll = getNodeScroll(offsetParent);\n }\n\n if (isHTMLElement(offsetParent)) {\n offsets = getBoundingClientRect(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = getWindowScrollBarX(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}","import getWindowScroll from \"./getWindowScroll.js\";\nimport getWindow from \"./getWindow.js\";\nimport { isHTMLElement } from \"./instanceOf.js\";\nimport getHTMLElementScroll from \"./getHTMLElementScroll.js\";\nexport default function getNodeScroll(node) {\n if (node === getWindow(node) || !isHTMLElement(node)) {\n return getWindowScroll(node);\n } else {\n return getHTMLElementScroll(node);\n }\n}","export default function getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}","import { modifierPhases } from \"../enums.js\"; // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nexport default function orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}","import getCompositeRect from \"./dom-utils/getCompositeRect.js\";\nimport getLayoutRect from \"./dom-utils/getLayoutRect.js\";\nimport listScrollParents from \"./dom-utils/listScrollParents.js\";\nimport getOffsetParent from \"./dom-utils/getOffsetParent.js\";\nimport orderModifiers from \"./utils/orderModifiers.js\";\nimport debounce from \"./utils/debounce.js\";\nimport mergeByName from \"./utils/mergeByName.js\";\nimport detectOverflow from \"./utils/detectOverflow.js\";\nimport { isElement } from \"./dom-utils/instanceOf.js\";\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nexport function popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [],\n popper: listScrollParents(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'),\n popper: getLayoutRect(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: debounce(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nexport var createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\nexport { detectOverflow };","export default function debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}","export default function mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nimport offset from \"./modifiers/offset.js\";\nimport flip from \"./modifiers/flip.js\";\nimport preventOverflow from \"./modifiers/preventOverflow.js\";\nimport arrow from \"./modifiers/arrow.js\";\nimport hide from \"./modifiers/hide.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow }; // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper as createPopperLite } from \"./popper-lite.js\"; // eslint-disable-next-line import/no-unused-modules\n\nexport * from \"./modifiers/index.js\";","import { popperGenerator, detectOverflow } from \"./createPopper.js\";\nimport eventListeners from \"./modifiers/eventListeners.js\";\nimport popperOffsets from \"./modifiers/popperOffsets.js\";\nimport computeStyles from \"./modifiers/computeStyles.js\";\nimport applyStyles from \"./modifiers/applyStyles.js\";\nvar defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles];\nvar createPopper = /*#__PURE__*/popperGenerator({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\nexport { createPopper, popperGenerator, defaultModifiers, detectOverflow };","/*!\n * Bootstrap v5.3.2 (https://getbootstrap.com/)\n * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\nimport * as Popper from '@popperjs/core';\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/data.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n/**\n * Constants\n */\n\nconst elementMap = new Map();\nconst Data = {\n set(element, key, instance) {\n if (!elementMap.has(element)) {\n elementMap.set(element, new Map());\n }\n const instanceMap = elementMap.get(element);\n\n // make it clear we only want one instance per element\n // can be removed later when multiple key/instances are fine to be used\n if (!instanceMap.has(key) && instanceMap.size !== 0) {\n // eslint-disable-next-line no-console\n console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);\n return;\n }\n instanceMap.set(key, instance);\n },\n get(element, key) {\n if (elementMap.has(element)) {\n return elementMap.get(element).get(key) || null;\n }\n return null;\n },\n remove(element, key) {\n if (!elementMap.has(element)) {\n return;\n }\n const instanceMap = elementMap.get(element);\n instanceMap.delete(key);\n\n // free up element references if there are no instances left for an element\n if (instanceMap.size === 0) {\n elementMap.delete(element);\n }\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000;\nconst MILLISECONDS_MULTIPLIER = 1000;\nconst TRANSITION_END = 'transitionend';\n\n/**\n * Properly escape IDs selectors to handle weird IDs\n * @param {string} selector\n * @returns {string}\n */\nconst parseSelector = selector => {\n if (selector && window.CSS && window.CSS.escape) {\n // document.querySelector needs escaping to handle IDs (html5+) containing for instance /\n selector = selector.replace(/#([^\\s\"#']+)/g, (match, id) => `#${CSS.escape(id)}`);\n }\n return selector;\n};\n\n// Shout-out Angus Croll (https://goo.gl/pxwQGp)\nconst toType = object => {\n if (object === null || object === undefined) {\n return `${object}`;\n }\n return Object.prototype.toString.call(object).match(/\\s([a-z]+)/i)[1].toLowerCase();\n};\n\n/**\n * Public Util API\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID);\n } while (document.getElementById(prefix));\n return prefix;\n};\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0;\n }\n\n // Get transition-duration of the element\n let {\n transitionDuration,\n transitionDelay\n } = window.getComputedStyle(element);\n const floatTransitionDuration = Number.parseFloat(transitionDuration);\n const floatTransitionDelay = Number.parseFloat(transitionDelay);\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0;\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0];\n transitionDelay = transitionDelay.split(',')[0];\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n};\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END));\n};\nconst isElement = object => {\n if (!object || typeof object !== 'object') {\n return false;\n }\n if (typeof object.jquery !== 'undefined') {\n object = object[0];\n }\n return typeof object.nodeType !== 'undefined';\n};\nconst getElement = object => {\n // it's a jQuery object or a node element\n if (isElement(object)) {\n return object.jquery ? object[0] : object;\n }\n if (typeof object === 'string' && object.length > 0) {\n return document.querySelector(parseSelector(object));\n }\n return null;\n};\nconst isVisible = element => {\n if (!isElement(element) || element.getClientRects().length === 0) {\n return false;\n }\n const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';\n // Handle `details` element as its content may falsie appear visible when it is closed\n const closedDetails = element.closest('details:not([open])');\n if (!closedDetails) {\n return elementIsVisible;\n }\n if (closedDetails !== element) {\n const summary = element.closest('summary');\n if (summary && summary.parentNode !== closedDetails) {\n return false;\n }\n if (summary === null) {\n return false;\n }\n }\n return elementIsVisible;\n};\nconst isDisabled = element => {\n if (!element || element.nodeType !== Node.ELEMENT_NODE) {\n return true;\n }\n if (element.classList.contains('disabled')) {\n return true;\n }\n if (typeof element.disabled !== 'undefined') {\n return element.disabled;\n }\n return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';\n};\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null;\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode();\n return root instanceof ShadowRoot ? root : null;\n }\n if (element instanceof ShadowRoot) {\n return element;\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null;\n }\n return findShadowRoot(element.parentNode);\n};\nconst noop = () => {};\n\n/**\n * Trick to restart an element's animation\n *\n * @param {HTMLElement} element\n * @return void\n *\n * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation\n */\nconst reflow = element => {\n element.offsetHeight; // eslint-disable-line no-unused-expressions\n};\n\nconst getjQuery = () => {\n if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return window.jQuery;\n }\n return null;\n};\nconst DOMContentLoadedCallbacks = [];\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n // add listener on the first call when the document is in loading state\n if (!DOMContentLoadedCallbacks.length) {\n document.addEventListener('DOMContentLoaded', () => {\n for (const callback of DOMContentLoadedCallbacks) {\n callback();\n }\n });\n }\n DOMContentLoadedCallbacks.push(callback);\n } else {\n callback();\n }\n};\nconst isRTL = () => document.documentElement.dir === 'rtl';\nconst defineJQueryPlugin = plugin => {\n onDOMContentLoaded(() => {\n const $ = getjQuery();\n /* istanbul ignore if */\n if ($) {\n const name = plugin.NAME;\n const JQUERY_NO_CONFLICT = $.fn[name];\n $.fn[name] = plugin.jQueryInterface;\n $.fn[name].Constructor = plugin;\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT;\n return plugin.jQueryInterface;\n };\n }\n });\n};\nconst execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {\n return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue;\n};\nconst executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {\n if (!waitForTransition) {\n execute(callback);\n return;\n }\n const durationPadding = 5;\n const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;\n let called = false;\n const handler = ({\n target\n }) => {\n if (target !== transitionElement) {\n return;\n }\n called = true;\n transitionElement.removeEventListener(TRANSITION_END, handler);\n execute(callback);\n };\n transitionElement.addEventListener(TRANSITION_END, handler);\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(transitionElement);\n }\n }, emulatedDuration);\n};\n\n/**\n * Return the previous/next element of a list.\n *\n * @param {array} list The list of elements\n * @param activeElement The active element\n * @param shouldGetNext Choose to get next or previous element\n * @param isCycleAllowed\n * @return {Element|elem} The proper element\n */\nconst getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => {\n const listLength = list.length;\n let index = list.indexOf(activeElement);\n\n // if the element does not exist in the list return an element\n // depending on the direction and if cycle is allowed\n if (index === -1) {\n return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0];\n }\n index += shouldGetNext ? 1 : -1;\n if (isCycleAllowed) {\n index = (index + listLength) % listLength;\n }\n return list[Math.max(0, Math.min(index, listLength - 1))];\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/event-handler.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst namespaceRegex = /[^.]*(?=\\..*)\\.|.*/;\nconst stripNameRegex = /\\..*/;\nconst stripUidRegex = /::\\d+$/;\nconst eventRegistry = {}; // Events storage\nlet uidEvent = 1;\nconst customEvents = {\n mouseenter: 'mouseover',\n mouseleave: 'mouseout'\n};\nconst nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']);\n\n/**\n * Private methods\n */\n\nfunction makeEventUid(element, uid) {\n return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++;\n}\nfunction getElementEvents(element) {\n const uid = makeEventUid(element);\n element.uidEvent = uid;\n eventRegistry[uid] = eventRegistry[uid] || {};\n return eventRegistry[uid];\n}\nfunction bootstrapHandler(element, fn) {\n return function handler(event) {\n hydrateObj(event, {\n delegateTarget: element\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, fn);\n }\n return fn.apply(element, [event]);\n };\n}\nfunction bootstrapDelegationHandler(element, selector, fn) {\n return function handler(event) {\n const domElements = element.querySelectorAll(selector);\n for (let {\n target\n } = event; target && target !== this; target = target.parentNode) {\n for (const domElement of domElements) {\n if (domElement !== target) {\n continue;\n }\n hydrateObj(event, {\n delegateTarget: target\n });\n if (handler.oneOff) {\n EventHandler.off(element, event.type, selector, fn);\n }\n return fn.apply(target, [event]);\n }\n }\n };\n}\nfunction findHandler(events, callable, delegationSelector = null) {\n return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector);\n}\nfunction normalizeParameters(originalTypeEvent, handler, delegationFunction) {\n const isDelegated = typeof handler === 'string';\n // TODO: tooltip passes `false` instead of selector, so we need to check\n const callable = isDelegated ? delegationFunction : handler || delegationFunction;\n let typeEvent = getTypeEvent(originalTypeEvent);\n if (!nativeEvents.has(typeEvent)) {\n typeEvent = originalTypeEvent;\n }\n return [isDelegated, callable, typeEvent];\n}\nfunction addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n\n // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position\n // this prevents the handler from being dispatched the same way as mouseover or mouseout does\n if (originalTypeEvent in customEvents) {\n const wrapFunction = fn => {\n return function (event) {\n if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {\n return fn.call(this, event);\n }\n };\n };\n callable = wrapFunction(callable);\n }\n const events = getElementEvents(element);\n const handlers = events[typeEvent] || (events[typeEvent] = {});\n const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null);\n if (previousFunction) {\n previousFunction.oneOff = previousFunction.oneOff && oneOff;\n return;\n }\n const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, ''));\n const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable);\n fn.delegationSelector = isDelegated ? handler : null;\n fn.callable = callable;\n fn.oneOff = oneOff;\n fn.uidEvent = uid;\n handlers[uid] = fn;\n element.addEventListener(typeEvent, fn, isDelegated);\n}\nfunction removeHandler(element, events, typeEvent, handler, delegationSelector) {\n const fn = findHandler(events[typeEvent], handler, delegationSelector);\n if (!fn) {\n return;\n }\n element.removeEventListener(typeEvent, fn, Boolean(delegationSelector));\n delete events[typeEvent][fn.uidEvent];\n}\nfunction removeNamespacedHandlers(element, events, typeEvent, namespace) {\n const storeElementEvent = events[typeEvent] || {};\n for (const [handlerKey, event] of Object.entries(storeElementEvent)) {\n if (handlerKey.includes(namespace)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n}\nfunction getTypeEvent(event) {\n // allow to get the native events from namespaced events ('click.bs.button' --> 'click')\n event = event.replace(stripNameRegex, '');\n return customEvents[event] || event;\n}\nconst EventHandler = {\n on(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, false);\n },\n one(element, event, handler, delegationFunction) {\n addHandler(element, event, handler, delegationFunction, true);\n },\n off(element, originalTypeEvent, handler, delegationFunction) {\n if (typeof originalTypeEvent !== 'string' || !element) {\n return;\n }\n const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction);\n const inNamespace = typeEvent !== originalTypeEvent;\n const events = getElementEvents(element);\n const storeElementEvent = events[typeEvent] || {};\n const isNamespace = originalTypeEvent.startsWith('.');\n if (typeof callable !== 'undefined') {\n // Simplest case: handler is passed, remove that listener ONLY.\n if (!Object.keys(storeElementEvent).length) {\n return;\n }\n removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null);\n return;\n }\n if (isNamespace) {\n for (const elementEvent of Object.keys(events)) {\n removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));\n }\n }\n for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {\n const handlerKey = keyHandlers.replace(stripUidRegex, '');\n if (!inNamespace || originalTypeEvent.includes(handlerKey)) {\n removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);\n }\n }\n },\n trigger(element, event, args) {\n if (typeof event !== 'string' || !element) {\n return null;\n }\n const $ = getjQuery();\n const typeEvent = getTypeEvent(event);\n const inNamespace = event !== typeEvent;\n let jQueryEvent = null;\n let bubbles = true;\n let nativeDispatch = true;\n let defaultPrevented = false;\n if (inNamespace && $) {\n jQueryEvent = $.Event(event, args);\n $(element).trigger(jQueryEvent);\n bubbles = !jQueryEvent.isPropagationStopped();\n nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();\n defaultPrevented = jQueryEvent.isDefaultPrevented();\n }\n const evt = hydrateObj(new Event(event, {\n bubbles,\n cancelable: true\n }), args);\n if (defaultPrevented) {\n evt.preventDefault();\n }\n if (nativeDispatch) {\n element.dispatchEvent(evt);\n }\n if (evt.defaultPrevented && jQueryEvent) {\n jQueryEvent.preventDefault();\n }\n return evt;\n }\n};\nfunction hydrateObj(obj, meta = {}) {\n for (const [key, value] of Object.entries(meta)) {\n try {\n obj[key] = value;\n } catch (_unused) {\n Object.defineProperty(obj, key, {\n configurable: true,\n get() {\n return value;\n }\n });\n }\n }\n return obj;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/manipulator.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nfunction normalizeData(value) {\n if (value === 'true') {\n return true;\n }\n if (value === 'false') {\n return false;\n }\n if (value === Number(value).toString()) {\n return Number(value);\n }\n if (value === '' || value === 'null') {\n return null;\n }\n if (typeof value !== 'string') {\n return value;\n }\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (_unused) {\n return value;\n }\n}\nfunction normalizeDataKey(key) {\n return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`);\n}\nconst Manipulator = {\n setDataAttribute(element, key, value) {\n element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value);\n },\n removeDataAttribute(element, key) {\n element.removeAttribute(`data-bs-${normalizeDataKey(key)}`);\n },\n getDataAttributes(element) {\n if (!element) {\n return {};\n }\n const attributes = {};\n const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig'));\n for (const key of bsKeys) {\n let pureKey = key.replace(/^bs/, '');\n pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length);\n attributes[pureKey] = normalizeData(element.dataset[key]);\n }\n return attributes;\n },\n getDataAttribute(element, key) {\n return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`));\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/config.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Class definition\n */\n\nclass Config {\n // Getters\n static get Default() {\n return {};\n }\n static get DefaultType() {\n return {};\n }\n static get NAME() {\n throw new Error('You have to implement the static method \"NAME\", for each component!');\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n return config;\n }\n _mergeConfigObj(config, element) {\n const jsonConfig = isElement(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse\n\n return {\n ...this.constructor.Default,\n ...(typeof jsonConfig === 'object' ? jsonConfig : {}),\n ...(isElement(element) ? Manipulator.getDataAttributes(element) : {}),\n ...(typeof config === 'object' ? config : {})\n };\n }\n _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {\n for (const [property, expectedTypes] of Object.entries(configTypes)) {\n const value = config[property];\n const valueType = isElement(value) ? 'element' : toType(value);\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option \"${property}\" provided type \"${valueType}\" but expected type \"${expectedTypes}\".`);\n }\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap base-component.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst VERSION = '5.3.2';\n\n/**\n * Class definition\n */\n\nclass BaseComponent extends Config {\n constructor(element, config) {\n super();\n element = getElement(element);\n if (!element) {\n return;\n }\n this._element = element;\n this._config = this._getConfig(config);\n Data.set(this._element, this.constructor.DATA_KEY, this);\n }\n\n // Public\n dispose() {\n Data.remove(this._element, this.constructor.DATA_KEY);\n EventHandler.off(this._element, this.constructor.EVENT_KEY);\n for (const propertyName of Object.getOwnPropertyNames(this)) {\n this[propertyName] = null;\n }\n }\n _queueCallback(callback, element, isAnimated = true) {\n executeAfterTransition(callback, element, isAnimated);\n }\n _getConfig(config) {\n config = this._mergeConfigObj(config, this._element);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n\n // Static\n static getInstance(element) {\n return Data.get(getElement(element), this.DATA_KEY);\n }\n static getOrCreateInstance(element, config = {}) {\n return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null);\n }\n static get VERSION() {\n return VERSION;\n }\n static get DATA_KEY() {\n return `bs.${this.NAME}`;\n }\n static get EVENT_KEY() {\n return `.${this.DATA_KEY}`;\n }\n static eventName(name) {\n return `${name}${this.EVENT_KEY}`;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target');\n if (!selector || selector === '#') {\n let hrefAttribute = element.getAttribute('href');\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) {\n return null;\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) {\n hrefAttribute = `#${hrefAttribute.split('#')[1]}`;\n }\n selector = hrefAttribute && hrefAttribute !== '#' ? parseSelector(hrefAttribute.trim()) : null;\n }\n return selector;\n};\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector));\n },\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector);\n },\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector));\n },\n parents(element, selector) {\n const parents = [];\n let ancestor = element.parentNode.closest(selector);\n while (ancestor) {\n parents.push(ancestor);\n ancestor = ancestor.parentNode.closest(selector);\n }\n return parents;\n },\n prev(element, selector) {\n let previous = element.previousElementSibling;\n while (previous) {\n if (previous.matches(selector)) {\n return [previous];\n }\n previous = previous.previousElementSibling;\n }\n return [];\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling;\n while (next) {\n if (next.matches(selector)) {\n return [next];\n }\n next = next.nextElementSibling;\n }\n return [];\n },\n focusableChildren(element) {\n const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable=\"true\"]'].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',');\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el));\n },\n getSelectorFromElement(element) {\n const selector = getSelector(element);\n if (selector) {\n return SelectorEngine.findOne(selector) ? selector : null;\n }\n return null;\n },\n getElementFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.findOne(selector) : null;\n },\n getMultipleElementsFromSelector(element) {\n const selector = getSelector(element);\n return selector ? SelectorEngine.find(selector) : [];\n }\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/component-functions.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst enableDismissTrigger = (component, method = 'hide') => {\n const clickEvent = `click.dismiss${component.EVENT_KEY}`;\n const name = component.NAME;\n EventHandler.on(document, clickEvent, `[data-bs-dismiss=\"${name}\"]`, function (event) {\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);\n const instance = component.getOrCreateInstance(target);\n\n // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method\n instance[method]();\n });\n};\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$f = 'alert';\nconst DATA_KEY$a = 'bs.alert';\nconst EVENT_KEY$b = `.${DATA_KEY$a}`;\nconst EVENT_CLOSE = `close${EVENT_KEY$b}`;\nconst EVENT_CLOSED = `closed${EVENT_KEY$b}`;\nconst CLASS_NAME_FADE$5 = 'fade';\nconst CLASS_NAME_SHOW$8 = 'show';\n\n/**\n * Class definition\n */\n\nclass Alert extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$f;\n }\n\n // Public\n close() {\n const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);\n if (closeEvent.defaultPrevented) {\n return;\n }\n this._element.classList.remove(CLASS_NAME_SHOW$8);\n const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);\n this._queueCallback(() => this._destroyElement(), this._element, isAnimated);\n }\n\n // Private\n _destroyElement() {\n this._element.remove();\n EventHandler.trigger(this._element, EVENT_CLOSED);\n this.dispose();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Alert.getOrCreateInstance(this);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nenableDismissTrigger(Alert, 'close');\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Alert);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$e = 'button';\nconst DATA_KEY$9 = 'bs.button';\nconst EVENT_KEY$a = `.${DATA_KEY$9}`;\nconst DATA_API_KEY$6 = '.data-api';\nconst CLASS_NAME_ACTIVE$3 = 'active';\nconst SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle=\"button\"]';\nconst EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;\n\n/**\n * Class definition\n */\n\nclass Button extends BaseComponent {\n // Getters\n static get NAME() {\n return NAME$e;\n }\n\n // Public\n toggle() {\n // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method\n this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3));\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Button.getOrCreateInstance(this);\n if (config === 'toggle') {\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => {\n event.preventDefault();\n const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);\n const data = Button.getOrCreateInstance(button);\n data.toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Button);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/swipe.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$d = 'swipe';\nconst EVENT_KEY$9 = '.bs.swipe';\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`;\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`;\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`;\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`;\nconst POINTER_TYPE_TOUCH = 'touch';\nconst POINTER_TYPE_PEN = 'pen';\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event';\nconst SWIPE_THRESHOLD = 40;\nconst Default$c = {\n endCallback: null,\n leftCallback: null,\n rightCallback: null\n};\nconst DefaultType$c = {\n endCallback: '(function|null)',\n leftCallback: '(function|null)',\n rightCallback: '(function|null)'\n};\n\n/**\n * Class definition\n */\n\nclass Swipe extends Config {\n constructor(element, config) {\n super();\n this._element = element;\n if (!element || !Swipe.isSupported()) {\n return;\n }\n this._config = this._getConfig(config);\n this._deltaX = 0;\n this._supportPointerEvents = Boolean(window.PointerEvent);\n this._initEvents();\n }\n\n // Getters\n static get Default() {\n return Default$c;\n }\n static get DefaultType() {\n return DefaultType$c;\n }\n static get NAME() {\n return NAME$d;\n }\n\n // Public\n dispose() {\n EventHandler.off(this._element, EVENT_KEY$9);\n }\n\n // Private\n _start(event) {\n if (!this._supportPointerEvents) {\n this._deltaX = event.touches[0].clientX;\n return;\n }\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX;\n }\n }\n _end(event) {\n if (this._eventIsPointerPenTouch(event)) {\n this._deltaX = event.clientX - this._deltaX;\n }\n this._handleSwipe();\n execute(this._config.endCallback);\n }\n _move(event) {\n this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX;\n }\n _handleSwipe() {\n const absDeltaX = Math.abs(this._deltaX);\n if (absDeltaX <= SWIPE_THRESHOLD) {\n return;\n }\n const direction = absDeltaX / this._deltaX;\n this._deltaX = 0;\n if (!direction) {\n return;\n }\n execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback);\n }\n _initEvents() {\n if (this._supportPointerEvents) {\n EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event));\n EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event));\n this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n } else {\n EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event));\n EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event));\n EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event));\n }\n }\n _eventIsPointerPenTouch(event) {\n return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH);\n }\n\n // Static\n static isSupported() {\n return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$c = 'carousel';\nconst DATA_KEY$8 = 'bs.carousel';\nconst EVENT_KEY$8 = `.${DATA_KEY$8}`;\nconst DATA_API_KEY$5 = '.data-api';\nconst ARROW_LEFT_KEY$1 = 'ArrowLeft';\nconst ARROW_RIGHT_KEY$1 = 'ArrowRight';\nconst TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next';\nconst ORDER_PREV = 'prev';\nconst DIRECTION_LEFT = 'left';\nconst DIRECTION_RIGHT = 'right';\nconst EVENT_SLIDE = `slide${EVENT_KEY$8}`;\nconst EVENT_SLID = `slid${EVENT_KEY$8}`;\nconst EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`;\nconst EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`;\nconst EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`;\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`;\nconst EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`;\nconst CLASS_NAME_CAROUSEL = 'carousel';\nconst CLASS_NAME_ACTIVE$2 = 'active';\nconst CLASS_NAME_SLIDE = 'slide';\nconst CLASS_NAME_END = 'carousel-item-end';\nconst CLASS_NAME_START = 'carousel-item-start';\nconst CLASS_NAME_NEXT = 'carousel-item-next';\nconst CLASS_NAME_PREV = 'carousel-item-prev';\nconst SELECTOR_ACTIVE = '.active';\nconst SELECTOR_ITEM = '.carousel-item';\nconst SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM;\nconst SELECTOR_ITEM_IMG = '.carousel-item img';\nconst SELECTOR_INDICATORS = '.carousel-indicators';\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]';\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]';\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT\n};\nconst Default$b = {\n interval: 5000,\n keyboard: true,\n pause: 'hover',\n ride: false,\n touch: true,\n wrap: true\n};\nconst DefaultType$b = {\n interval: '(number|boolean)',\n // TODO:v6 remove boolean support\n keyboard: 'boolean',\n pause: '(string|boolean)',\n ride: '(boolean|string)',\n touch: 'boolean',\n wrap: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._interval = null;\n this._activeElement = null;\n this._isSliding = false;\n this.touchTimeout = null;\n this._swipeHelper = null;\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element);\n this._addEventListeners();\n if (this._config.ride === CLASS_NAME_CAROUSEL) {\n this.cycle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$b;\n }\n static get DefaultType() {\n return DefaultType$b;\n }\n static get NAME() {\n return NAME$c;\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT);\n }\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next();\n }\n }\n prev() {\n this._slide(ORDER_PREV);\n }\n pause() {\n if (this._isSliding) {\n triggerTransitionEnd(this._element);\n }\n this._clearInterval();\n }\n cycle() {\n this._clearInterval();\n this._updateInterval();\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval);\n }\n _maybeEnableCycle() {\n if (!this._config.ride) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.cycle());\n return;\n }\n this.cycle();\n }\n to(index) {\n const items = this._getItems();\n if (index > items.length - 1 || index < 0) {\n return;\n }\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index));\n return;\n }\n const activeIndex = this._getItemIndex(this._getActive());\n if (activeIndex === index) {\n return;\n }\n const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV;\n this._slide(order, items[index]);\n }\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose();\n }\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval;\n return config;\n }\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event));\n }\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause());\n EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle());\n }\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners();\n }\n }\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault());\n }\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return;\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause();\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout);\n }\n this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval);\n };\n const swipeConfig = {\n leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)),\n rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)),\n endCallback: endCallBack\n };\n this._swipeHelper = new Swipe(this._element, swipeConfig);\n }\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return;\n }\n const direction = KEY_TO_DIRECTION[event.key];\n if (direction) {\n event.preventDefault();\n this._slide(this._directionToOrder(direction));\n }\n }\n _getItemIndex(element) {\n return this._getItems().indexOf(element);\n }\n _setActiveIndicatorElement(index) {\n if (!this._indicatorsElement) {\n return;\n }\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement);\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2);\n activeIndicator.removeAttribute('aria-current');\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${index}\"]`, this._indicatorsElement);\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2);\n newActiveIndicator.setAttribute('aria-current', 'true');\n }\n }\n _updateInterval() {\n const element = this._activeElement || this._getActive();\n if (!element) {\n return;\n }\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10);\n this._config.interval = elementInterval || this._config.defaultInterval;\n }\n _slide(order, element = null) {\n if (this._isSliding) {\n return;\n }\n const activeElement = this._getActive();\n const isNext = order === ORDER_NEXT;\n const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap);\n if (nextElement === activeElement) {\n return;\n }\n const nextElementIndex = this._getItemIndex(nextElement);\n const triggerEvent = eventName => {\n return EventHandler.trigger(this._element, eventName, {\n relatedTarget: nextElement,\n direction: this._orderToDirection(order),\n from: this._getItemIndex(activeElement),\n to: nextElementIndex\n });\n };\n const slideEvent = triggerEvent(EVENT_SLIDE);\n if (slideEvent.defaultPrevented) {\n return;\n }\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n // TODO: change tests that use empty divs to avoid this check\n return;\n }\n const isCycling = Boolean(this._interval);\n this.pause();\n this._isSliding = true;\n this._setActiveIndicatorElement(nextElementIndex);\n this._activeElement = nextElement;\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END;\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV;\n nextElement.classList.add(orderClassName);\n reflow(nextElement);\n activeElement.classList.add(directionalClassName);\n nextElement.classList.add(directionalClassName);\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName);\n nextElement.classList.add(CLASS_NAME_ACTIVE$2);\n activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName);\n this._isSliding = false;\n triggerEvent(EVENT_SLID);\n };\n this._queueCallback(completeCallBack, activeElement, this._isAnimated());\n if (isCycling) {\n this.cycle();\n }\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_SLIDE);\n }\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element);\n }\n _getItems() {\n return SelectorEngine.find(SELECTOR_ITEM, this._element);\n }\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval);\n this._interval = null;\n }\n }\n _directionToOrder(direction) {\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT;\n }\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV;\n }\n _orderToDirection(order) {\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT;\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Carousel.getOrCreateInstance(this, config);\n if (typeof config === 'number') {\n data.to(config);\n return;\n }\n if (typeof config === 'string') {\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return;\n }\n event.preventDefault();\n const carousel = Carousel.getOrCreateInstance(target);\n const slideIndex = this.getAttribute('data-bs-slide-to');\n if (slideIndex) {\n carousel.to(slideIndex);\n carousel._maybeEnableCycle();\n return;\n }\n if (Manipulator.getDataAttribute(this, 'slide') === 'next') {\n carousel.next();\n carousel._maybeEnableCycle();\n return;\n }\n carousel.prev();\n carousel._maybeEnableCycle();\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$3, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE);\n for (const carousel of carousels) {\n Carousel.getOrCreateInstance(carousel);\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$b = 'collapse';\nconst DATA_KEY$7 = 'bs.collapse';\nconst EVENT_KEY$7 = `.${DATA_KEY$7}`;\nconst DATA_API_KEY$4 = '.data-api';\nconst EVENT_SHOW$6 = `show${EVENT_KEY$7}`;\nconst EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`;\nconst EVENT_HIDE$6 = `hide${EVENT_KEY$7}`;\nconst EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`;\nconst EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`;\nconst CLASS_NAME_SHOW$7 = 'show';\nconst CLASS_NAME_COLLAPSE = 'collapse';\nconst CLASS_NAME_COLLAPSING = 'collapsing';\nconst CLASS_NAME_COLLAPSED = 'collapsed';\nconst CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`;\nconst CLASS_NAME_HORIZONTAL = 'collapse-horizontal';\nconst WIDTH = 'width';\nconst HEIGHT = 'height';\nconst SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing';\nconst SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle=\"collapse\"]';\nconst Default$a = {\n parent: null,\n toggle: true\n};\nconst DefaultType$a = {\n parent: '(null|element)',\n toggle: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Collapse extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isTransitioning = false;\n this._triggerArray = [];\n const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);\n for (const elem of toggleList) {\n const selector = SelectorEngine.getSelectorFromElement(elem);\n const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element);\n if (selector !== null && filterElement.length) {\n this._triggerArray.push(elem);\n }\n }\n this._initializeChildren();\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._triggerArray, this._isShown());\n }\n if (this._config.toggle) {\n this.toggle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$a;\n }\n static get DefaultType() {\n return DefaultType$a;\n }\n static get NAME() {\n return NAME$b;\n }\n\n // Public\n toggle() {\n if (this._isShown()) {\n this.hide();\n } else {\n this.show();\n }\n }\n show() {\n if (this._isTransitioning || this._isShown()) {\n return;\n }\n let activeChildren = [];\n\n // find active children\n if (this._config.parent) {\n activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, {\n toggle: false\n }));\n }\n if (activeChildren.length && activeChildren[0]._isTransitioning) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n for (const activeInstance of activeChildren) {\n activeInstance.hide();\n }\n const dimension = this._getDimension();\n this._element.classList.remove(CLASS_NAME_COLLAPSE);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.style[dimension] = 0;\n this._addAriaAndCollapsedClass(this._triggerArray, true);\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n this._element.style[dimension] = '';\n EventHandler.trigger(this._element, EVENT_SHOWN$6);\n };\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n const scrollSize = `scroll${capitalizedDimension}`;\n this._queueCallback(complete, this._element, true);\n this._element.style[dimension] = `${this._element[scrollSize]}px`;\n }\n hide() {\n if (this._isTransitioning || !this._isShown()) {\n return;\n }\n const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6);\n if (startEvent.defaultPrevented) {\n return;\n }\n const dimension = this._getDimension();\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`;\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_COLLAPSING);\n this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);\n for (const trigger of this._triggerArray) {\n const element = SelectorEngine.getElementFromSelector(trigger);\n if (element && !this._isShown(element)) {\n this._addAriaAndCollapsedClass([trigger], false);\n }\n }\n this._isTransitioning = true;\n const complete = () => {\n this._isTransitioning = false;\n this._element.classList.remove(CLASS_NAME_COLLAPSING);\n this._element.classList.add(CLASS_NAME_COLLAPSE);\n EventHandler.trigger(this._element, EVENT_HIDDEN$6);\n };\n this._element.style[dimension] = '';\n this._queueCallback(complete, this._element, true);\n }\n _isShown(element = this._element) {\n return element.classList.contains(CLASS_NAME_SHOW$7);\n }\n\n // Private\n _configAfterMerge(config) {\n config.toggle = Boolean(config.toggle); // Coerce string values\n config.parent = getElement(config.parent);\n return config;\n }\n _getDimension() {\n return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT;\n }\n _initializeChildren() {\n if (!this._config.parent) {\n return;\n }\n const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);\n for (const element of children) {\n const selected = SelectorEngine.getElementFromSelector(element);\n if (selected) {\n this._addAriaAndCollapsedClass([element], this._isShown(selected));\n }\n }\n }\n _getFirstLevelChildren(selector) {\n const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent);\n // remove children if greater depth\n return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element));\n }\n _addAriaAndCollapsedClass(triggerArray, isOpen) {\n if (!triggerArray.length) {\n return;\n }\n for (const element of triggerArray) {\n element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen);\n element.setAttribute('aria-expanded', isOpen);\n }\n }\n\n // Static\n static jQueryInterface(config) {\n const _config = {};\n if (typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false;\n }\n return this.each(function () {\n const data = Collapse.getOrCreateInstance(this, _config);\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n }\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) {\n // preventDefault only for elements (which change the URL) not inside the collapsible element\n if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') {\n event.preventDefault();\n }\n for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {\n Collapse.getOrCreateInstance(element, {\n toggle: false\n }).toggle();\n }\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Collapse);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$a = 'dropdown';\nconst DATA_KEY$6 = 'bs.dropdown';\nconst EVENT_KEY$6 = `.${DATA_KEY$6}`;\nconst DATA_API_KEY$3 = '.data-api';\nconst ESCAPE_KEY$2 = 'Escape';\nconst TAB_KEY$1 = 'Tab';\nconst ARROW_UP_KEY$1 = 'ArrowUp';\nconst ARROW_DOWN_KEY$1 = 'ArrowDown';\nconst RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE$5 = `hide${EVENT_KEY$6}`;\nconst EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`;\nconst EVENT_SHOW$5 = `show${EVENT_KEY$6}`;\nconst EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`;\nconst EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`;\nconst CLASS_NAME_SHOW$6 = 'show';\nconst CLASS_NAME_DROPUP = 'dropup';\nconst CLASS_NAME_DROPEND = 'dropend';\nconst CLASS_NAME_DROPSTART = 'dropstart';\nconst CLASS_NAME_DROPUP_CENTER = 'dropup-center';\nconst CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center';\nconst SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle=\"dropdown\"]:not(.disabled):not(:disabled)';\nconst SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`;\nconst SELECTOR_MENU = '.dropdown-menu';\nconst SELECTOR_NAVBAR = '.navbar';\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav';\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start';\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end';\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start';\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end';\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start';\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start';\nconst PLACEMENT_TOPCENTER = 'top';\nconst PLACEMENT_BOTTOMCENTER = 'bottom';\nconst Default$9 = {\n autoClose: true,\n boundary: 'clippingParents',\n display: 'dynamic',\n offset: [0, 2],\n popperConfig: null,\n reference: 'toggle'\n};\nconst DefaultType$9 = {\n autoClose: '(boolean|string)',\n boundary: '(string|element)',\n display: 'string',\n offset: '(array|string|function)',\n popperConfig: '(null|object|function)',\n reference: '(string|element|object)'\n};\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._popper = null;\n this._parent = this._element.parentNode; // dropdown wrapper\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent);\n this._inNavbar = this._detectNavbar();\n }\n\n // Getters\n static get Default() {\n return Default$9;\n }\n static get DefaultType() {\n return DefaultType$9;\n }\n static get NAME() {\n return NAME$a;\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show();\n }\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget);\n if (showEvent.defaultPrevented) {\n return;\n }\n this._createPopper();\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n this._element.focus();\n this._element.setAttribute('aria-expanded', true);\n this._menu.classList.add(CLASS_NAME_SHOW$6);\n this._element.classList.add(CLASS_NAME_SHOW$6);\n EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget);\n }\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return;\n }\n const relatedTarget = {\n relatedTarget: this._element\n };\n this._completeHide(relatedTarget);\n }\n dispose() {\n if (this._popper) {\n this._popper.destroy();\n }\n super.dispose();\n }\n update() {\n this._inNavbar = this._detectNavbar();\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n if (this._popper) {\n this._popper.destroy();\n }\n this._menu.classList.remove(CLASS_NAME_SHOW$6);\n this._element.classList.remove(CLASS_NAME_SHOW$6);\n this._element.setAttribute('aria-expanded', 'false');\n Manipulator.removeDataAttribute(this._menu, 'popper');\n EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget);\n }\n _getConfig(config) {\n config = super._getConfig(config);\n if (typeof config.reference === 'object' && !isElement(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME$a.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);\n }\n return config;\n }\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n }\n let referenceElement = this._element;\n if (this._config.reference === 'parent') {\n referenceElement = this._parent;\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference);\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference;\n }\n const popperConfig = this._getPopperConfig();\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig);\n }\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW$6);\n }\n _getPlacement() {\n const parentDropdown = this._parent;\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {\n return PLACEMENT_TOPCENTER;\n }\n if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {\n return PLACEMENT_BOTTOMCENTER;\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end';\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n }\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM;\n }\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null;\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n };\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }];\n }\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _selectMenuItem({\n key,\n target\n }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element));\n if (!items.length) {\n return;\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus();\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) {\n return;\n }\n const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);\n for (const toggle of openToggles) {\n const context = Dropdown.getInstance(toggle);\n if (!context || context._config.autoClose === false) {\n continue;\n }\n const composedPath = event.composedPath();\n const isMenuTarget = composedPath.includes(context._menu);\n if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) {\n continue;\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue;\n }\n const relatedTarget = {\n relatedTarget: context._element\n };\n if (event.type === 'click') {\n relatedTarget.clickEvent = event;\n }\n context._completeHide(relatedTarget);\n }\n }\n static dataApiKeydownHandler(event) {\n // If not an UP | DOWN | ESCAPE key => not a dropdown command\n // If input/textarea && if key is other than ESCAPE => not a dropdown command\n\n const isInput = /input|textarea/i.test(event.target.tagName);\n const isEscapeEvent = event.key === ESCAPE_KEY$2;\n const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key);\n if (!isUpOrDownEvent && !isEscapeEvent) {\n return;\n }\n if (isInput && !isEscapeEvent) {\n return;\n }\n event.preventDefault();\n\n // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/\n const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode);\n const instance = Dropdown.getOrCreateInstance(getToggleButton);\n if (isUpOrDownEvent) {\n event.stopPropagation();\n instance.show();\n instance._selectMenuItem(event);\n return;\n }\n if (instance._isShown()) {\n // else is escape and we check if it is shown\n event.stopPropagation();\n instance.hide();\n getToggleButton.focus();\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus);\nEventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {\n event.preventDefault();\n Dropdown.getOrCreateInstance(this).toggle();\n});\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/backdrop.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$9 = 'backdrop';\nconst CLASS_NAME_FADE$4 = 'fade';\nconst CLASS_NAME_SHOW$5 = 'show';\nconst EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`;\nconst Default$8 = {\n className: 'modal-backdrop',\n clickCallback: null,\n isAnimated: false,\n isVisible: true,\n // if false, we use the backdrop helper without adding any element to the dom\n rootElement: 'body' // give the choice to place backdrop under different elements\n};\n\nconst DefaultType$8 = {\n className: 'string',\n clickCallback: '(function|null)',\n isAnimated: 'boolean',\n isVisible: 'boolean',\n rootElement: '(element|string)'\n};\n\n/**\n * Class definition\n */\n\nclass Backdrop extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isAppended = false;\n this._element = null;\n }\n\n // Getters\n static get Default() {\n return Default$8;\n }\n static get DefaultType() {\n return DefaultType$8;\n }\n static get NAME() {\n return NAME$9;\n }\n\n // Public\n show(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._append();\n const element = this._getElement();\n if (this._config.isAnimated) {\n reflow(element);\n }\n element.classList.add(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n execute(callback);\n });\n }\n hide(callback) {\n if (!this._config.isVisible) {\n execute(callback);\n return;\n }\n this._getElement().classList.remove(CLASS_NAME_SHOW$5);\n this._emulateAnimation(() => {\n this.dispose();\n execute(callback);\n });\n }\n dispose() {\n if (!this._isAppended) {\n return;\n }\n EventHandler.off(this._element, EVENT_MOUSEDOWN);\n this._element.remove();\n this._isAppended = false;\n }\n\n // Private\n _getElement() {\n if (!this._element) {\n const backdrop = document.createElement('div');\n backdrop.className = this._config.className;\n if (this._config.isAnimated) {\n backdrop.classList.add(CLASS_NAME_FADE$4);\n }\n this._element = backdrop;\n }\n return this._element;\n }\n _configAfterMerge(config) {\n // use getElement() with the default \"body\" to get a fresh Element on each instantiation\n config.rootElement = getElement(config.rootElement);\n return config;\n }\n _append() {\n if (this._isAppended) {\n return;\n }\n const element = this._getElement();\n this._config.rootElement.append(element);\n EventHandler.on(element, EVENT_MOUSEDOWN, () => {\n execute(this._config.clickCallback);\n });\n this._isAppended = true;\n }\n _emulateAnimation(callback) {\n executeAfterTransition(callback, this._getElement(), this._config.isAnimated);\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/focustrap.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$8 = 'focustrap';\nconst DATA_KEY$5 = 'bs.focustrap';\nconst EVENT_KEY$5 = `.${DATA_KEY$5}`;\nconst EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`;\nconst EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`;\nconst TAB_KEY = 'Tab';\nconst TAB_NAV_FORWARD = 'forward';\nconst TAB_NAV_BACKWARD = 'backward';\nconst Default$7 = {\n autofocus: true,\n trapElement: null // The element to trap focus inside of\n};\n\nconst DefaultType$7 = {\n autofocus: 'boolean',\n trapElement: 'element'\n};\n\n/**\n * Class definition\n */\n\nclass FocusTrap extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n this._isActive = false;\n this._lastTabNavDirection = null;\n }\n\n // Getters\n static get Default() {\n return Default$7;\n }\n static get DefaultType() {\n return DefaultType$7;\n }\n static get NAME() {\n return NAME$8;\n }\n\n // Public\n activate() {\n if (this._isActive) {\n return;\n }\n if (this._config.autofocus) {\n this._config.trapElement.focus();\n }\n EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop\n EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event));\n EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event));\n this._isActive = true;\n }\n deactivate() {\n if (!this._isActive) {\n return;\n }\n this._isActive = false;\n EventHandler.off(document, EVENT_KEY$5);\n }\n\n // Private\n _handleFocusin(event) {\n const {\n trapElement\n } = this._config;\n if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) {\n return;\n }\n const elements = SelectorEngine.focusableChildren(trapElement);\n if (elements.length === 0) {\n trapElement.focus();\n } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) {\n elements[elements.length - 1].focus();\n } else {\n elements[0].focus();\n }\n }\n _handleKeydown(event) {\n if (event.key !== TAB_KEY) {\n return;\n }\n this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/scrollBar.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\nconst SELECTOR_STICKY_CONTENT = '.sticky-top';\nconst PROPERTY_PADDING = 'padding-right';\nconst PROPERTY_MARGIN = 'margin-right';\n\n/**\n * Class definition\n */\n\nclass ScrollBarHelper {\n constructor() {\n this._element = document.body;\n }\n\n // Public\n getWidth() {\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n const documentWidth = document.documentElement.clientWidth;\n return Math.abs(window.innerWidth - documentWidth);\n }\n hide() {\n const width = this.getWidth();\n this._disableOverFlow();\n // give padding to element to balance the hidden scrollbar width\n this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth\n this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width);\n this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width);\n }\n reset() {\n this._resetElementAttributes(this._element, 'overflow');\n this._resetElementAttributes(this._element, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);\n this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);\n }\n isOverflowing() {\n return this.getWidth() > 0;\n }\n\n // Private\n _disableOverFlow() {\n this._saveInitialAttribute(this._element, 'overflow');\n this._element.style.overflow = 'hidden';\n }\n _setElementAttributes(selector, styleProperty, callback) {\n const scrollbarWidth = this.getWidth();\n const manipulationCallBack = element => {\n if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {\n return;\n }\n this._saveInitialAttribute(element, styleProperty);\n const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);\n element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _saveInitialAttribute(element, styleProperty) {\n const actualValue = element.style.getPropertyValue(styleProperty);\n if (actualValue) {\n Manipulator.setDataAttribute(element, styleProperty, actualValue);\n }\n }\n _resetElementAttributes(selector, styleProperty) {\n const manipulationCallBack = element => {\n const value = Manipulator.getDataAttribute(element, styleProperty);\n // We only want to remove the property if the value is `null`; the value can also be zero\n if (value === null) {\n element.style.removeProperty(styleProperty);\n return;\n }\n Manipulator.removeDataAttribute(element, styleProperty);\n element.style.setProperty(styleProperty, value);\n };\n this._applyManipulationCallback(selector, manipulationCallBack);\n }\n _applyManipulationCallback(selector, callBack) {\n if (isElement(selector)) {\n callBack(selector);\n return;\n }\n for (const sel of SelectorEngine.find(selector, this._element)) {\n callBack(sel);\n }\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$7 = 'modal';\nconst DATA_KEY$4 = 'bs.modal';\nconst EVENT_KEY$4 = `.${DATA_KEY$4}`;\nconst DATA_API_KEY$2 = '.data-api';\nconst ESCAPE_KEY$1 = 'Escape';\nconst EVENT_HIDE$4 = `hide${EVENT_KEY$4}`;\nconst EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`;\nconst EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`;\nconst EVENT_SHOW$4 = `show${EVENT_KEY$4}`;\nconst EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`;\nconst EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`;\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`;\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`;\nconst EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`;\nconst EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`;\nconst CLASS_NAME_OPEN = 'modal-open';\nconst CLASS_NAME_FADE$3 = 'fade';\nconst CLASS_NAME_SHOW$4 = 'show';\nconst CLASS_NAME_STATIC = 'modal-static';\nconst OPEN_SELECTOR$1 = '.modal.show';\nconst SELECTOR_DIALOG = '.modal-dialog';\nconst SELECTOR_MODAL_BODY = '.modal-body';\nconst SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle=\"modal\"]';\nconst Default$6 = {\n backdrop: true,\n focus: true,\n keyboard: true\n};\nconst DefaultType$6 = {\n backdrop: '(boolean|string)',\n focus: 'boolean',\n keyboard: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element);\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._isShown = false;\n this._isTransitioning = false;\n this._scrollBar = new ScrollBarHelper();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$6;\n }\n static get DefaultType() {\n return DefaultType$6;\n }\n static get NAME() {\n return NAME$7;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._isTransitioning = true;\n this._scrollBar.hide();\n document.body.classList.add(CLASS_NAME_OPEN);\n this._adjustDialog();\n this._backdrop.show(() => this._showElement(relatedTarget));\n }\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._isShown = false;\n this._isTransitioning = true;\n this._focustrap.deactivate();\n this._element.classList.remove(CLASS_NAME_SHOW$4);\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());\n }\n dispose() {\n EventHandler.off(window, EVENT_KEY$4);\n EventHandler.off(this._dialog, EVENT_KEY$4);\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n handleUpdate() {\n this._adjustDialog();\n }\n\n // Private\n _initializeBackDrop() {\n return new Backdrop({\n isVisible: Boolean(this._config.backdrop),\n // 'static' option will be translated to true, and booleans will keep their value,\n isAnimated: this._isAnimated()\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element);\n }\n this._element.style.display = 'block';\n this._element.removeAttribute('aria-hidden');\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.scrollTop = 0;\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);\n if (modalBody) {\n modalBody.scrollTop = 0;\n }\n reflow(this._element);\n this._element.classList.add(CLASS_NAME_SHOW$4);\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate();\n }\n this._isTransitioning = false;\n EventHandler.trigger(this._element, EVENT_SHOWN$4, {\n relatedTarget\n });\n };\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated());\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => {\n if (event.key !== ESCAPE_KEY$1) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n this._triggerBackdropTransition();\n });\n EventHandler.on(window, EVENT_RESIZE$1, () => {\n if (this._isShown && !this._isTransitioning) {\n this._adjustDialog();\n }\n });\n EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {\n // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks\n EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => {\n if (this._element !== event.target || this._element !== event2.target) {\n return;\n }\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition();\n return;\n }\n if (this._config.backdrop) {\n this.hide();\n }\n });\n });\n }\n _hideModal() {\n this._element.style.display = 'none';\n this._element.setAttribute('aria-hidden', true);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n this._isTransitioning = false;\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN);\n this._resetAdjustments();\n this._scrollBar.reset();\n EventHandler.trigger(this._element, EVENT_HIDDEN$4);\n });\n }\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE$3);\n }\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1);\n if (hideEvent.defaultPrevented) {\n return;\n }\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const initialOverflowY = this._element.style.overflowY;\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return;\n }\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden';\n }\n this._element.classList.add(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC);\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY;\n }, this._dialog);\n }, this._dialog);\n this._element.focus();\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n const scrollbarWidth = this._scrollBar.getWidth();\n const isBodyOverflowing = scrollbarWidth > 0;\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft';\n this._element.style[property] = `${scrollbarWidth}px`;\n }\n }\n _resetAdjustments() {\n this._element.style.paddingLeft = '';\n this._element.style.paddingRight = '';\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](relatedTarget);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n EventHandler.one(target, EVENT_SHOW$4, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$4, () => {\n if (isVisible(this)) {\n this.focus();\n }\n });\n });\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1);\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide();\n }\n const data = Modal.getOrCreateInstance(target);\n data.toggle(this);\n});\nenableDismissTrigger(Modal);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap offcanvas.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$6 = 'offcanvas';\nconst DATA_KEY$3 = 'bs.offcanvas';\nconst EVENT_KEY$3 = `.${DATA_KEY$3}`;\nconst DATA_API_KEY$1 = '.data-api';\nconst EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst ESCAPE_KEY = 'Escape';\nconst CLASS_NAME_SHOW$3 = 'show';\nconst CLASS_NAME_SHOWING$1 = 'showing';\nconst CLASS_NAME_HIDING = 'hiding';\nconst CLASS_NAME_BACKDROP = 'offcanvas-backdrop';\nconst OPEN_SELECTOR = '.offcanvas.show';\nconst EVENT_SHOW$3 = `show${EVENT_KEY$3}`;\nconst EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`;\nconst EVENT_HIDE$3 = `hide${EVENT_KEY$3}`;\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`;\nconst EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`;\nconst EVENT_RESIZE = `resize${EVENT_KEY$3}`;\nconst EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`;\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`;\nconst SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle=\"offcanvas\"]';\nconst Default$5 = {\n backdrop: true,\n keyboard: true,\n scroll: false\n};\nconst DefaultType$5 = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n scroll: 'boolean'\n};\n\n/**\n * Class definition\n */\n\nclass Offcanvas extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n this._isShown = false;\n this._backdrop = this._initializeBackDrop();\n this._focustrap = this._initializeFocusTrap();\n this._addEventListeners();\n }\n\n // Getters\n static get Default() {\n return Default$5;\n }\n static get DefaultType() {\n return DefaultType$5;\n }\n static get NAME() {\n return NAME$6;\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget);\n }\n show(relatedTarget) {\n if (this._isShown) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, {\n relatedTarget\n });\n if (showEvent.defaultPrevented) {\n return;\n }\n this._isShown = true;\n this._backdrop.show();\n if (!this._config.scroll) {\n new ScrollBarHelper().hide();\n }\n this._element.setAttribute('aria-modal', true);\n this._element.setAttribute('role', 'dialog');\n this._element.classList.add(CLASS_NAME_SHOWING$1);\n const completeCallBack = () => {\n if (!this._config.scroll || this._config.backdrop) {\n this._focustrap.activate();\n }\n this._element.classList.add(CLASS_NAME_SHOW$3);\n this._element.classList.remove(CLASS_NAME_SHOWING$1);\n EventHandler.trigger(this._element, EVENT_SHOWN$3, {\n relatedTarget\n });\n };\n this._queueCallback(completeCallBack, this._element, true);\n }\n hide() {\n if (!this._isShown) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3);\n if (hideEvent.defaultPrevented) {\n return;\n }\n this._focustrap.deactivate();\n this._element.blur();\n this._isShown = false;\n this._element.classList.add(CLASS_NAME_HIDING);\n this._backdrop.hide();\n const completeCallback = () => {\n this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING);\n this._element.removeAttribute('aria-modal');\n this._element.removeAttribute('role');\n if (!this._config.scroll) {\n new ScrollBarHelper().reset();\n }\n EventHandler.trigger(this._element, EVENT_HIDDEN$3);\n };\n this._queueCallback(completeCallback, this._element, true);\n }\n dispose() {\n this._backdrop.dispose();\n this._focustrap.deactivate();\n super.dispose();\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n return;\n }\n this.hide();\n };\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop);\n return new Backdrop({\n className: CLASS_NAME_BACKDROP,\n isVisible,\n isAnimated: true,\n rootElement: this._element.parentNode,\n clickCallback: isVisible ? clickCallback : null\n });\n }\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n });\n }\n _addEventListeners() {\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return;\n }\n if (this._config.keyboard) {\n this.hide();\n return;\n }\n EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);\n });\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Offcanvas.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config](this);\n });\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {\n const target = SelectorEngine.getElementFromSelector(this);\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault();\n }\n if (isDisabled(this)) {\n return;\n }\n EventHandler.one(target, EVENT_HIDDEN$3, () => {\n // focus on trigger when it is closed\n if (isVisible(this)) {\n this.focus();\n }\n });\n\n // avoid conflict when clicking a toggler of an offcanvas, while another is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR);\n if (alreadyOpen && alreadyOpen !== target) {\n Offcanvas.getInstance(alreadyOpen).hide();\n }\n const data = Offcanvas.getOrCreateInstance(target);\n data.toggle(this);\n});\nEventHandler.on(window, EVENT_LOAD_DATA_API$2, () => {\n for (const selector of SelectorEngine.find(OPEN_SELECTOR)) {\n Offcanvas.getOrCreateInstance(selector).show();\n }\n});\nEventHandler.on(window, EVENT_RESIZE, () => {\n for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) {\n if (getComputedStyle(element).position !== 'fixed') {\n Offcanvas.getOrCreateInstance(element).hide();\n }\n }\n});\nenableDismissTrigger(Offcanvas);\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Offcanvas);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n// js-docs-start allow-list\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\nconst DefaultAllowlist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n};\n// js-docs-end allow-list\n\nconst uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']);\n\n/**\n * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation\n * contexts.\n *\n * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38\n */\n// eslint-disable-next-line unicorn/better-regex\nconst SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;\nconst allowedAttribute = (attribute, allowedAttributeList) => {\n const attributeName = attribute.nodeName.toLowerCase();\n if (allowedAttributeList.includes(attributeName)) {\n if (uriAttributes.has(attributeName)) {\n return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));\n }\n return true;\n }\n\n // Check if a regular expression validates the attribute.\n return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName));\n};\nfunction sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {\n if (!unsafeHtml.length) {\n return unsafeHtml;\n }\n if (sanitizeFunction && typeof sanitizeFunction === 'function') {\n return sanitizeFunction(unsafeHtml);\n }\n const domParser = new window.DOMParser();\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n const elements = [].concat(...createdDocument.body.querySelectorAll('*'));\n for (const element of elements) {\n const elementName = element.nodeName.toLowerCase();\n if (!Object.keys(allowList).includes(elementName)) {\n element.remove();\n continue;\n }\n const attributeList = [].concat(...element.attributes);\n const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []);\n for (const attribute of attributeList) {\n if (!allowedAttribute(attribute, allowedAttributes)) {\n element.removeAttribute(attribute.nodeName);\n }\n }\n }\n return createdDocument.body.innerHTML;\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap util/template-factory.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$5 = 'TemplateFactory';\nconst Default$4 = {\n allowList: DefaultAllowlist,\n content: {},\n // { selector : text , selector2 : text2 , }\n extraClass: '',\n html: false,\n sanitize: true,\n sanitizeFn: null,\n template: '
'\n};\nconst DefaultType$4 = {\n allowList: 'object',\n content: 'object',\n extraClass: '(string|function)',\n html: 'boolean',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n template: 'string'\n};\nconst DefaultContentType = {\n entry: '(string|element|function|null)',\n selector: '(string|element)'\n};\n\n/**\n * Class definition\n */\n\nclass TemplateFactory extends Config {\n constructor(config) {\n super();\n this._config = this._getConfig(config);\n }\n\n // Getters\n static get Default() {\n return Default$4;\n }\n static get DefaultType() {\n return DefaultType$4;\n }\n static get NAME() {\n return NAME$5;\n }\n\n // Public\n getContent() {\n return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean);\n }\n hasContent() {\n return this.getContent().length > 0;\n }\n changeContent(content) {\n this._checkContent(content);\n this._config.content = {\n ...this._config.content,\n ...content\n };\n return this;\n }\n toHtml() {\n const templateWrapper = document.createElement('div');\n templateWrapper.innerHTML = this._maybeSanitize(this._config.template);\n for (const [selector, text] of Object.entries(this._config.content)) {\n this._setContent(templateWrapper, text, selector);\n }\n const template = templateWrapper.children[0];\n const extraClass = this._resolvePossibleFunction(this._config.extraClass);\n if (extraClass) {\n template.classList.add(...extraClass.split(' '));\n }\n return template;\n }\n\n // Private\n _typeCheckConfig(config) {\n super._typeCheckConfig(config);\n this._checkContent(config.content);\n }\n _checkContent(arg) {\n for (const [selector, content] of Object.entries(arg)) {\n super._typeCheckConfig({\n selector,\n entry: content\n }, DefaultContentType);\n }\n }\n _setContent(template, content, selector) {\n const templateElement = SelectorEngine.findOne(selector, template);\n if (!templateElement) {\n return;\n }\n content = this._resolvePossibleFunction(content);\n if (!content) {\n templateElement.remove();\n return;\n }\n if (isElement(content)) {\n this._putElementInTemplate(getElement(content), templateElement);\n return;\n }\n if (this._config.html) {\n templateElement.innerHTML = this._maybeSanitize(content);\n return;\n }\n templateElement.textContent = content;\n }\n _maybeSanitize(arg) {\n return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this]);\n }\n _putElementInTemplate(element, templateElement) {\n if (this._config.html) {\n templateElement.innerHTML = '';\n templateElement.append(element);\n return;\n }\n templateElement.textContent = element.textContent;\n }\n}\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$4 = 'tooltip';\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']);\nconst CLASS_NAME_FADE$2 = 'fade';\nconst CLASS_NAME_MODAL = 'modal';\nconst CLASS_NAME_SHOW$2 = 'show';\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`;\nconst EVENT_MODAL_HIDE = 'hide.bs.modal';\nconst TRIGGER_HOVER = 'hover';\nconst TRIGGER_FOCUS = 'focus';\nconst TRIGGER_CLICK = 'click';\nconst TRIGGER_MANUAL = 'manual';\nconst EVENT_HIDE$2 = 'hide';\nconst EVENT_HIDDEN$2 = 'hidden';\nconst EVENT_SHOW$2 = 'show';\nconst EVENT_SHOWN$2 = 'shown';\nconst EVENT_INSERTED = 'inserted';\nconst EVENT_CLICK$1 = 'click';\nconst EVENT_FOCUSIN$1 = 'focusin';\nconst EVENT_FOCUSOUT$1 = 'focusout';\nconst EVENT_MOUSEENTER = 'mouseenter';\nconst EVENT_MOUSELEAVE = 'mouseleave';\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n};\nconst Default$3 = {\n allowList: DefaultAllowlist,\n animation: true,\n boundary: 'clippingParents',\n container: false,\n customClass: '',\n delay: 0,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n html: false,\n offset: [0, 6],\n placement: 'top',\n popperConfig: null,\n sanitize: true,\n sanitizeFn: null,\n selector: false,\n template: '
' + '
' + '
' + '
',\n title: '',\n trigger: 'hover focus'\n};\nconst DefaultType$3 = {\n allowList: 'object',\n animation: 'boolean',\n boundary: '(string|element)',\n container: '(string|element|boolean)',\n customClass: '(string|function)',\n delay: '(number|object)',\n fallbackPlacements: 'array',\n html: 'boolean',\n offset: '(array|string|function)',\n placement: '(string|function)',\n popperConfig: '(null|object|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n selector: '(string|boolean)',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string'\n};\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n }\n super(element, config);\n\n // Private\n this._isEnabled = true;\n this._timeout = 0;\n this._isHovered = null;\n this._activeTrigger = {};\n this._popper = null;\n this._templateFactory = null;\n this._newContent = null;\n\n // Protected\n this.tip = null;\n this._setListeners();\n if (!this._config.selector) {\n this._fixTitle();\n }\n }\n\n // Getters\n static get Default() {\n return Default$3;\n }\n static get DefaultType() {\n return DefaultType$3;\n }\n static get NAME() {\n return NAME$4;\n }\n\n // Public\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n toggleEnabled() {\n this._isEnabled = !this._isEnabled;\n }\n toggle() {\n if (!this._isEnabled) {\n return;\n }\n this._activeTrigger.click = !this._activeTrigger.click;\n if (this._isShown()) {\n this._leave();\n return;\n }\n this._enter();\n }\n dispose() {\n clearTimeout(this._timeout);\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n if (this._element.getAttribute('data-bs-original-title')) {\n this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title'));\n }\n this._disposePopper();\n super.dispose();\n }\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements');\n }\n if (!(this._isWithContent() && this._isEnabled)) {\n return;\n }\n const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2));\n const shadowRoot = findShadowRoot(this._element);\n const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element);\n if (showEvent.defaultPrevented || !isInTheDom) {\n return;\n }\n\n // TODO: v6 remove this or make it optional\n this._disposePopper();\n const tip = this._getTipElement();\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'));\n const {\n container\n } = this._config;\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip);\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED));\n }\n this._popper = this._createPopper(tip);\n tip.classList.add(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop);\n }\n }\n const complete = () => {\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2));\n if (this._isHovered === false) {\n this._leave();\n }\n this._isHovered = false;\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n hide() {\n if (!this._isShown()) {\n return;\n }\n const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2));\n if (hideEvent.defaultPrevented) {\n return;\n }\n const tip = this._getTipElement();\n tip.classList.remove(CLASS_NAME_SHOW$2);\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop);\n }\n }\n this._activeTrigger[TRIGGER_CLICK] = false;\n this._activeTrigger[TRIGGER_FOCUS] = false;\n this._activeTrigger[TRIGGER_HOVER] = false;\n this._isHovered = null; // it is a trick to support manual triggering\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return;\n }\n if (!this._isHovered) {\n this._disposePopper();\n }\n this._element.removeAttribute('aria-describedby');\n EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2));\n };\n this._queueCallback(complete, this.tip, this._isAnimated());\n }\n update() {\n if (this._popper) {\n this._popper.update();\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle());\n }\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._newContent || this._getContentForTemplate());\n }\n return this.tip;\n }\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml();\n\n // TODO: remove this check in v6\n if (!tip) {\n return null;\n }\n tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2);\n // TODO: v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`);\n const tipId = getUID(this.constructor.NAME).toString();\n tip.setAttribute('id', tipId);\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE$2);\n }\n return tip;\n }\n setContent(content) {\n this._newContent = content;\n if (this._isShown()) {\n this._disposePopper();\n this.show();\n }\n }\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content);\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n });\n }\n return this._templateFactory;\n }\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n };\n }\n _getTitle() {\n return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title');\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig());\n }\n _isAnimated() {\n return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2);\n }\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);\n }\n _createPopper(tip) {\n const placement = execute(this._config.placement, [this, tip, this._element]);\n const attachment = AttachmentMap[placement.toUpperCase()];\n return Popper.createPopper(this._element, tip, this._getPopperConfig(attachment));\n }\n _getOffset() {\n const {\n offset\n } = this._config;\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10));\n }\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element);\n }\n return offset;\n }\n _resolvePossibleFunction(arg) {\n return execute(arg, [this._element]);\n }\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [{\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n }, {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }, {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n }, {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n }, {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement);\n }\n }]\n };\n return {\n ...defaultBsPopperConfig,\n ...execute(this._config.popperConfig, [defaultBsPopperConfig])\n };\n }\n _setListeners() {\n const triggers = this._config.trigger.split(' ');\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context.toggle();\n });\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1);\n const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1);\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n context._enter();\n });\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event);\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget);\n context._leave();\n });\n }\n }\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide();\n }\n };\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler);\n }\n _fixTitle() {\n const title = this._element.getAttribute('title');\n if (!title) {\n return;\n }\n if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) {\n this._element.setAttribute('aria-label', title);\n }\n this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility\n this._element.removeAttribute('title');\n }\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true;\n return;\n }\n this._isHovered = true;\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show();\n }\n }, this._config.delay.show);\n }\n _leave() {\n if (this._isWithActiveTrigger()) {\n return;\n }\n this._isHovered = false;\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide();\n }\n }, this._config.delay.hide);\n }\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout);\n this._timeout = setTimeout(handler, timeout);\n }\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true);\n }\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element);\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute];\n }\n }\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n };\n config = this._mergeConfigObj(config);\n config = this._configAfterMerge(config);\n this._typeCheckConfig(config);\n return config;\n }\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container);\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n };\n }\n if (typeof config.title === 'number') {\n config.title = config.title.toString();\n }\n if (typeof config.content === 'number') {\n config.content = config.content.toString();\n }\n return config;\n }\n _getDelegateConfig() {\n const config = {};\n for (const [key, value] of Object.entries(this._config)) {\n if (this.constructor.Default[key] !== value) {\n config[key] = value;\n }\n }\n config.selector = false;\n config.trigger = 'manual';\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config;\n }\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n if (this.tip) {\n this.tip.remove();\n this.tip = null;\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$3 = 'popover';\nconst SELECTOR_TITLE = '.popover-header';\nconst SELECTOR_CONTENT = '.popover-body';\nconst Default$2 = {\n ...Tooltip.Default,\n content: '',\n offset: [0, 8],\n placement: 'right',\n template: '
' + '
' + '

' + '
' + '
',\n trigger: 'click'\n};\nconst DefaultType$2 = {\n ...Tooltip.DefaultType,\n content: '(null|string|element|function)'\n};\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get Default() {\n return Default$2;\n }\n static get DefaultType() {\n return DefaultType$2;\n }\n static get NAME() {\n return NAME$3;\n }\n\n // Overrides\n _isWithContent() {\n return this._getTitle() || this._getContent();\n }\n\n // Private\n _getContentForTemplate() {\n return {\n [SELECTOR_TITLE]: this._getTitle(),\n [SELECTOR_CONTENT]: this._getContent()\n };\n }\n _getContent() {\n return this._resolvePossibleFunction(this._config.content);\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Popover.getOrCreateInstance(this, config);\n if (typeof config !== 'string') {\n return;\n }\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`);\n }\n data[config]();\n });\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Popover);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n\n/**\n * Constants\n */\n\nconst NAME$2 = 'scrollspy';\nconst DATA_KEY$2 = 'bs.scrollspy';\nconst EVENT_KEY$2 = `.${DATA_KEY$2}`;\nconst DATA_API_KEY = '.data-api';\nconst EVENT_ACTIVATE = `activate${EVENT_KEY$2}`;\nconst EVENT_CLICK = `click${EVENT_KEY$2}`;\nconst EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`;\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\nconst CLASS_NAME_ACTIVE$1 = 'active';\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]';\nconst SELECTOR_TARGET_LINKS = '[href]';\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\nconst SELECTOR_NAV_LINKS = '.nav-link';\nconst SELECTOR_NAV_ITEMS = '.nav-item';\nconst SELECTOR_LIST_ITEMS = '.list-group-item';\nconst SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`;\nconst SELECTOR_DROPDOWN = '.dropdown';\nconst SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\nconst Default$1 = {\n offset: null,\n // TODO: v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: '0px 0px -25%',\n smoothScroll: false,\n target: null,\n threshold: [0.1, 0.5, 1]\n};\nconst DefaultType$1 = {\n offset: '(number|null)',\n // TODO v6 @deprecated, keep it for backwards compatibility reasons\n rootMargin: 'string',\n smoothScroll: 'boolean',\n target: 'element',\n threshold: 'array'\n};\n\n/**\n * Class definition\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element, config);\n\n // this._element is the observablesContainer and config.target the menu links wrapper\n this._targetLinks = new Map();\n this._observableSections = new Map();\n this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element;\n this._activeTarget = null;\n this._observer = null;\n this._previousScrollData = {\n visibleEntryTop: 0,\n parentScrollTop: 0\n };\n this.refresh(); // initialize\n }\n\n // Getters\n static get Default() {\n return Default$1;\n }\n static get DefaultType() {\n return DefaultType$1;\n }\n static get NAME() {\n return NAME$2;\n }\n\n // Public\n refresh() {\n this._initializeTargetsAndObservables();\n this._maybeEnableSmoothScroll();\n if (this._observer) {\n this._observer.disconnect();\n } else {\n this._observer = this._getNewObserver();\n }\n for (const section of this._observableSections.values()) {\n this._observer.observe(section);\n }\n }\n dispose() {\n this._observer.disconnect();\n super.dispose();\n }\n\n // Private\n _configAfterMerge(config) {\n // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case\n config.target = getElement(config.target) || document.body;\n\n // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only\n config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin;\n if (typeof config.threshold === 'string') {\n config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value));\n }\n return config;\n }\n _maybeEnableSmoothScroll() {\n if (!this._config.smoothScroll) {\n return;\n }\n\n // unregister any previous listeners\n EventHandler.off(this._config.target, EVENT_CLICK);\n EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => {\n const observableSection = this._observableSections.get(event.target.hash);\n if (observableSection) {\n event.preventDefault();\n const root = this._rootElement || window;\n const height = observableSection.offsetTop - this._element.offsetTop;\n if (root.scrollTo) {\n root.scrollTo({\n top: height,\n behavior: 'smooth'\n });\n return;\n }\n\n // Chrome 60 doesn't support `scrollTo`\n root.scrollTop = height;\n }\n });\n }\n _getNewObserver() {\n const options = {\n root: this._rootElement,\n threshold: this._config.threshold,\n rootMargin: this._config.rootMargin\n };\n return new IntersectionObserver(entries => this._observerCallback(entries), options);\n }\n\n // The logic of selection\n _observerCallback(entries) {\n const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`);\n const activate = entry => {\n this._previousScrollData.visibleEntryTop = entry.target.offsetTop;\n this._process(targetElement(entry));\n };\n const parentScrollTop = (this._rootElement || document.documentElement).scrollTop;\n const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop;\n this._previousScrollData.parentScrollTop = parentScrollTop;\n for (const entry of entries) {\n if (!entry.isIntersecting) {\n this._activeTarget = null;\n this._clearActiveClass(targetElement(entry));\n continue;\n }\n const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop;\n // if we are scrolling down, pick the bigger offsetTop\n if (userScrollsDown && entryIsLowerThanPrevious) {\n activate(entry);\n // if parent isn't scrolled, let's keep the first visible item, breaking the iteration\n if (!parentScrollTop) {\n return;\n }\n continue;\n }\n\n // if we are scrolling up, pick the smallest offsetTop\n if (!userScrollsDown && !entryIsLowerThanPrevious) {\n activate(entry);\n }\n }\n }\n _initializeTargetsAndObservables() {\n this._targetLinks = new Map();\n this._observableSections = new Map();\n const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target);\n for (const anchor of targetLinks) {\n // ensure that the anchor has an id and is not disabled\n if (!anchor.hash || isDisabled(anchor)) {\n continue;\n }\n const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);\n\n // ensure that the observableSection exists & is visible\n if (isVisible(observableSection)) {\n this._targetLinks.set(decodeURI(anchor.hash), anchor);\n this._observableSections.set(anchor.hash, observableSection);\n }\n }\n }\n _process(target) {\n if (this._activeTarget === target) {\n return;\n }\n this._clearActiveClass(this._config.target);\n this._activeTarget = target;\n target.classList.add(CLASS_NAME_ACTIVE$1);\n this._activateParents(target);\n EventHandler.trigger(this._element, EVENT_ACTIVATE, {\n relatedTarget: target\n });\n }\n _activateParents(target) {\n // Activate dropdown parents\n if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);\n return;\n }\n for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) {\n // Set triggered links parents as active\n // With both