| // Copyright 2021 The IREE Authors |
| // |
| // Licensed under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| // See iree/base/api.h for documentation on the API conventions used. |
| |
| #ifndef IREE_HAL_DRIVERS_WEBGPU_API_H_ |
| #define IREE_HAL_DRIVERS_WEBGPU_API_H_ |
| |
| #include "experimental/webgpu/platform/webgpu.h" |
| #include "iree/base/api.h" |
| #include "iree/hal/api.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif // __cplusplus |
| |
| //===----------------------------------------------------------------------===// |
| // iree_hal_webgpu_device_t |
| //===----------------------------------------------------------------------===// |
| |
| // TODO(benvanik): replace with flag list (easier to version). |
| enum iree_hal_webgpu_device_flag_bits_t { |
| IREE_HAL_WEBGPU_DEVICE_RESERVED = 0u, |
| }; |
| typedef uint32_t iree_hal_webgpu_device_flags_t; |
| |
| typedef struct iree_hal_webgpu_device_options_t { |
| // Flags controlling device behavior. |
| iree_hal_webgpu_device_flags_t flags; |
| |
| // Size of the per-queue uniform staging buffer. |
| // Larger buffer sizes will result in fewer flushes in large command buffers. |
| iree_device_size_t queue_uniform_buffer_size; |
| } iree_hal_webgpu_device_options_t; |
| |
| IREE_API_EXPORT void iree_hal_webgpu_device_options_initialize( |
| iree_hal_webgpu_device_options_t* out_options); |
| |
| IREE_API_EXPORT iree_status_t iree_hal_webgpu_wrap_device( |
| iree_string_view_t identifier, |
| const iree_hal_webgpu_device_options_t* options, WGPUDevice handle, |
| iree_allocator_t host_allocator, iree_hal_device_t** out_device); |
| |
| //===----------------------------------------------------------------------===// |
| // iree_hal_webgpu_driver_t |
| //===----------------------------------------------------------------------===// |
| |
| typedef enum iree_hal_webgpu_driver_backend_e { |
| IREE_HAL_WEBGPU_DRIVER_BACKEND_ANY = 0u, |
| IREE_HAL_WEBGPU_DRIVER_BACKEND_D3D12 = 1u, |
| IREE_HAL_WEBGPU_DRIVER_BACKEND_METAL = 2u, |
| IREE_HAL_WEBGPU_DRIVER_BACKEND_VULKAN = 3u, |
| } iree_hal_webgpu_driver_backend_t; |
| |
| typedef enum iree_hal_webgpu_driver_log_level_e { |
| IREE_HAL_WEBGPU_DRIVER_LOG_LEVEL_OFF = 0u, |
| IREE_HAL_WEBGPU_DRIVER_LOG_LEVEL_ERROR = 1u, |
| IREE_HAL_WEBGPU_DRIVER_LOG_LEVEL_WARNING = 2u, |
| IREE_HAL_WEBGPU_DRIVER_LOG_LEVEL_INFO = 3u, |
| IREE_HAL_WEBGPU_DRIVER_LOG_LEVEL_DEBUG = 4u, |
| IREE_HAL_WEBGPU_DRIVER_LOG_LEVEL_TRACE = 5u, |
| } iree_hal_webgpu_driver_log_level_t; |
| |
| // WebGPU native driver creation options. |
| typedef struct iree_hal_webgpu_driver_options_t { |
| // Logging level for messages logged to stderr. Disabled by default. |
| iree_hal_webgpu_driver_log_level_t log_level; |
| |
| // Preferred backend - ignored if backend is not available. |
| iree_hal_webgpu_driver_backend_t backend_preference; |
| |
| // TODO(benvanik): remove this single setting - it would be nice instead to |
| // pass a list to force device enumeration/matrix expansion or omit entirely |
| // to have auto-discovered options based on capabilities. Right now this |
| // forces all devices - even if from different vendors - to have the same |
| // options. |
| // Options to use for all devices created by the driver. |
| iree_hal_webgpu_device_options_t device_options; |
| |
| // Controls adapter selection when multiple exist in the system having |
| // different power characteristics (such as integrated vs discrete GPUs). |
| WGPUPowerPreference power_preference; |
| } iree_hal_webgpu_driver_options_t; |
| |
| IREE_API_EXPORT void iree_hal_webgpu_driver_options_initialize( |
| iree_hal_webgpu_driver_options_t* out_options); |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif // __cplusplus |
| |
| #endif // IREE_HAL_DRIVERS_WEBGPU_API_H_ |