| // 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_ |