// Copyright 2025 International Digital Economy Academy
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

///|
#declaration_only
declare pub fn get_version() -> UInt

///|
#declaration_only
declare pub fn native_available() -> Bool

///|
#declaration_only
declare pub fn native_supported() -> Bool

///|
#declaration_only
declare pub fn native_static_linked() -> Bool

///|
#declaration_only
declare pub fn native_expected_release_tag() -> String

///|
#declaration_only
declare pub fn native_resolved_lib_path() -> String

///|
#declaration_only
declare pub fn native_diagnostic() -> String

///|
#declaration_only
declare pub fn native_recovery_hint() -> String

///|
#declaration_only
declare pub fn set_log_level(level : UInt) -> Unit

///|
#declaration_only
declare pub fn get_instance_capabilities() -> InstanceCapabilities

///|
#declaration_only
declare pub fn set_debug_labels_enabled(enabled : Bool) -> Unit

///|
#declaration_only
declare pub fn set_pipeline_async_enabled(enabled : Bool) -> Unit

///|
#declaration_only
declare pub fn pipeline_async_enabled() -> Bool

///|
#declaration_only
declare pub fn pipeline_async_availability_kind_u32() -> UInt

///|
#declaration_only
declare pub fn pipeline_async_available() -> Bool

///|
#declaration_only
declare pub fn set_compilation_info_enabled(enabled : Bool) -> Unit

///|
#declaration_only
declare pub fn compilation_info_enabled() -> Bool

///|
#declaration_only
declare pub fn compilation_info_availability_kind_u32() -> UInt

///|
#declaration_only
declare pub fn compilation_info_available() -> Bool

///|
#declaration_only
declare pub fn Instance::create() -> Instance raise WgpuError

///|
#declaration_only
declare pub fn Instance::create_ptr(
  descriptor : @c.WGPUInstanceDescriptorPtr,
) -> Instance raise WgpuError

///|
#declaration_only
declare pub fn Instance::create_with_extras_u32(
  backends_u64? : UInt64 = INSTANCE_BACKEND_ALL,
  flags_u32? : UInt = INSTANCE_FLAG_DEFAULT,
  dx12_shader_compiler_u32? : UInt = DX12_COMPILER_UNDEFINED,
  gles3_minor_version_u32? : UInt = GLES3_MINOR_VERSION_AUTOMATIC,
  gl_fence_behaviour_u32? : UInt = GL_FENCE_BEHAVIOUR_NORMAL,
  dxc_max_shader_model_u32? : UInt = DXC_MAX_SHADER_MODEL_V6_0,
  dx12_presentation_system_u32? : UInt = DX12_SWAPCHAIN_KIND_UNDEFINED,
  dxc_path? : String = "",
) -> Instance raise WgpuError

///|
#declaration_only
declare pub fn Instance::request_adapter_sync(
  self : Instance,
) -> Adapter raise WgpuError

///|
#declaration_only
declare pub fn Instance::request_adapter_sync_ptr(
  self : Instance,
  options : @c.WGPURequestAdapterOptionsPtr,
) -> Adapter raise WgpuError

///|
#declaration_only
declare pub fn Instance::with_device_queue_sync(
  self : Instance,
  run : (Device, Queue) -> Unit raise Error,
) -> Unit raise Error

///|
#declaration_only
declare pub fn Instance::with_device_queue_auto_release(
  self : Instance,
  run : (Device, Queue, AutoReleasePool) -> Unit raise Error,
) -> Unit raise Error

///|
#declaration_only
declare pub fn with_default_device_queue_sync(
  run : (Instance, Device, Queue) -> Unit raise Error,
) -> Unit raise Error

///|
#declaration_only
declare pub fn with_default_device_queue_auto_release(
  run : (Instance, Device, Queue, AutoReleasePool) -> Unit raise Error,
) -> Unit raise Error

///|
#declaration_only
declare pub fn Instance::with_device_queue_managed(
  self : Instance,
  run : (ManagedDevice, ManagedQueue) -> Unit raise Error,
) -> Unit raise Error

///|
#declaration_only
declare pub fn with_default_device_queue_managed(
  run : (Instance, ManagedDevice, ManagedQueue) -> Unit raise Error,
) -> Unit raise Error

///|
#declaration_only
declare pub fn AutoReleasePool::new() -> AutoReleasePool

///|
#declaration_only
declare pub fn AutoReleasePool::release(self : AutoReleasePool) -> Unit

///|
#declaration_only
declare pub fn AutoReleasePool::track_buffer(
  self : AutoReleasePool,
  buffer : Buffer,
) -> Buffer

///|
#declaration_only
declare pub fn AutoReleasePool::track_shader_module(
  self : AutoReleasePool,
  shader : ShaderModule,
) -> ShaderModule

///|
#declaration_only
declare pub fn AutoReleasePool::track_compute_pipeline(
  self : AutoReleasePool,
  pipeline : ComputePipeline,
) -> ComputePipeline

///|
#declaration_only
declare pub fn AutoReleasePool::track_texture(
  self : AutoReleasePool,
  texture : Texture,
) -> Texture

///|
#declaration_only
declare pub fn AutoReleasePool::track_texture_view(
  self : AutoReleasePool,
  view : TextureView,
) -> TextureView

///|
#declaration_only
declare pub fn AutoReleasePool::track_surface(
  self : AutoReleasePool,
  surface : Surface,
) -> Surface

///|
#declaration_only
declare pub fn AutoReleasePool::track_sampler(
  self : AutoReleasePool,
  sampler : Sampler,
) -> Sampler

///|
#declaration_only
declare pub fn AutoReleasePool::track_render_pipeline(
  self : AutoReleasePool,
  pipeline : RenderPipeline,
) -> RenderPipeline

///|
#declaration_only
declare pub fn AutoReleasePool::track_render_bundle_encoder(
  self : AutoReleasePool,
  encoder : RenderBundleEncoder,
) -> RenderBundleEncoder

///|
#declaration_only
declare pub fn AutoReleasePool::track_render_bundle(
  self : AutoReleasePool,
  bundle : RenderBundle,
) -> RenderBundle

///|
#declaration_only
declare pub fn AutoReleasePool::track_bind_group_layout(
  self : AutoReleasePool,
  layout : BindGroupLayout,
) -> BindGroupLayout

///|
#declaration_only
declare pub fn AutoReleasePool::track_bind_group(
  self : AutoReleasePool,
  group : BindGroup,
) -> BindGroup

///|
#declaration_only
declare pub fn AutoReleasePool::track_pipeline_layout(
  self : AutoReleasePool,
  layout : PipelineLayout,
) -> PipelineLayout

///|
#declaration_only
declare pub fn AutoReleasePool::track_query_set(
  self : AutoReleasePool,
  query_set : QuerySet,
) -> QuerySet

///|
#declaration_only
declare pub fn AutoReleasePool::track_command_encoder(
  self : AutoReleasePool,
  encoder : CommandEncoder,
) -> CommandEncoder

///|
#declaration_only
declare pub fn AutoReleasePool::track_command_buffer(
  self : AutoReleasePool,
  command_buffer : CommandBuffer,
) -> CommandBuffer

///|
#declaration_only
declare pub fn AutoReleasePool::track_compute_pass(
  self : AutoReleasePool,
  pass : ComputePass,
) -> ComputePass

///|
#declaration_only
declare pub fn AutoReleasePool::track_render_pass(
  self : AutoReleasePool,
  pass : RenderPass,
) -> RenderPass

///|
#declaration_only
declare pub fn ManagedDevice::create_buffer(
  self : ManagedDevice,
  size~ : UInt64,
  usage~ : BufferUsage,
  mapped_at_creation? : Bool = false,
) -> ManagedBuffer

///|
#declaration_only
declare pub fn ManagedDevice::create_shader_module_wgsl(
  self : ManagedDevice,
  code : String,
) -> ManagedShaderModule

///|
#declaration_only
declare pub fn ManagedDevice::create_texture_rgba8_2d(
  self : ManagedDevice,
  width : UInt,
  height : UInt,
) -> ManagedTexture

///|
#declaration_only
declare pub fn ManagedDevice::create_compute_pipeline(
  self : ManagedDevice,
  shader_module : ManagedShaderModule,
) -> ManagedComputePipeline

///|
#declaration_only
declare pub fn ManagedDevice::create_render_pipeline_rgba8(
  self : ManagedDevice,
  shader_module : ManagedShaderModule,
) -> ManagedRenderPipeline

///|
#declaration_only
declare pub fn ManagedDevice::create_command_encoder(
  self : ManagedDevice,
) -> ManagedCommandEncoder

///|
#declaration_only
declare pub fn ManagedDevice::poll(
  self : ManagedDevice,
  wait? : Bool = false,
) -> Bool

///|
#declaration_only
declare pub fn ManagedBuffer::size(self : ManagedBuffer) -> UInt64

///|
#declaration_only
declare pub fn ManagedBuffer::readback(
  self : ManagedBuffer,
  instance : Instance,
  offset : UInt64,
  size : UInt64,
) -> Bytes

///|
#declaration_only
declare pub fn ManagedTexture::create_view(
  self : ManagedTexture,
) -> ManagedTextureView

///|
#declaration_only
declare pub fn ManagedQueue::submit_one(
  self : ManagedQueue,
  cmd : ManagedCommandBuffer,
) -> Unit

///|
#declaration_only
declare pub fn ManagedCommandEncoder::begin_compute_pass(
  self : ManagedCommandEncoder,
) -> ManagedComputePass

///|
#declaration_only
declare pub fn ManagedCommandEncoder::begin_render_pass_color(
  self : ManagedCommandEncoder,
  view : ManagedTextureView,
) -> ManagedRenderPass

///|
#declaration_only
declare pub fn ManagedCommandEncoder::copy_texture_to_buffer_rgba8(
  self : ManagedCommandEncoder,
  texture : ManagedTexture,
  buffer : ManagedBuffer,
  width : UInt,
  height : UInt,
) -> Unit

///|
#declaration_only
declare pub fn ManagedCommandEncoder::finish(
  self : ManagedCommandEncoder,
) -> ManagedCommandBuffer

///|
#declaration_only
declare pub fn ManagedComputePass::set_pipeline(
  self : ManagedComputePass,
  pipeline : ManagedComputePipeline,
) -> Unit

///|
#declaration_only
declare pub fn ManagedComputePass::dispatch_workgroups(
  self : ManagedComputePass,
  x : UInt,
  y : UInt,
  z : UInt,
) -> Unit

///|
#declaration_only
declare pub fn ManagedComputePass::end(self : ManagedComputePass) -> Unit

///|
#declaration_only
declare pub fn ManagedRenderPass::set_pipeline(
  self : ManagedRenderPass,
  pipeline : ManagedRenderPipeline,
) -> Unit

///|
#declaration_only
declare pub fn ManagedRenderPass::draw(
  self : ManagedRenderPass,
  vertex_count : UInt,
  instance_count : UInt,
  first_vertex : UInt,
  first_instance : UInt,
) -> Unit

///|
#declaration_only
declare pub fn ManagedRenderPass::end(self : ManagedRenderPass) -> Unit

///|
#declaration_only
declare pub fn Instance::request_adapter_future_id_u64(
  self : Instance,
  options? : @c.WGPURequestAdapterOptionsPtr = @c.null_request_adapter_options_ptr(),
) -> UInt64

///|
#declaration_only
declare pub fn Instance::request_adapter_async_status_u32(
  self : Instance,
  future_id : UInt64,
) -> UInt

///|
#declaration_only
declare pub fn Instance::request_adapter_async_adapter(
  self : Instance,
  future_id : UInt64,
) -> Adapter

///|
#declaration_only
declare pub fn Instance::request_adapter_async_message(
  self : Instance,
  future_id : UInt64,
) -> String

///|
#declaration_only
declare pub fn Instance::request_adapter_async_clear(
  self : Instance,
  future_id : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn Instance::request_adapter_async_take_or_raise(
  self : Instance,
  future_id : UInt64,
) -> Adapter raise WgpuError

///|
#declaration_only
declare pub fn Instance::process_events(self : Instance) -> Unit

///|
#declaration_only
declare pub fn Instance::wait_any_one(
  self : Instance,
  future_id : UInt64,
  timeout_ns? : UInt64 = 0UL,
) -> WaitAnyResult

///|
#declaration_only
declare pub fn Instance::wait_any_one_or_raise(
  self : Instance,
  future_id : UInt64,
  timeout_ns? : UInt64 = 0UL,
) -> WaitAnyResult raise WaitAnyError

///|
#declaration_only
declare pub fn Instance::enumerate_adapters_count_metal(
  self : Instance,
) -> UInt64

///|
#declaration_only
declare pub fn Instance::wgsl_language_features_count_u64(
  self : Instance,
) -> UInt64

///|
#declaration_only
declare pub fn Instance::generate_report(self : Instance) -> GlobalReport

///|
#declaration_only
declare pub fn Instance::create_surface_metal_layer(self : Instance) -> Surface

///|
#declaration_only
declare pub fn Instance::create_surface_macos_ns_view(
  self : Instance,
  ns_view : @c.OpaquePtr,
) -> Surface raise SurfaceCreateError

///|
#declaration_only
declare pub fn Instance::create_surface_from_window_handles(
  self : Instance,
  window_handle : @windowing.WindowHandle,
  display_handle : @windowing.DisplayHandle,
) -> Surface raise SurfaceCreateError

///|
#declaration_only
declare pub fn[T : @windowing.HasWindowHandle + @windowing.HasDisplayHandle] Instance::create_surface_from_window(
  self : Instance,
  window : T,
) -> Surface raise SurfaceCreateError

///|
#declaration_only
declare pub fn Instance::create_surface_wayland(
  self : Instance,
  display : @c.OpaquePtr,
  surface : @c.OpaquePtr,
) -> Surface

///|
#declaration_only
declare pub fn Instance::create_surface_xcb(
  self : Instance,
  connection : @c.OpaquePtr,
  window : UInt,
) -> Surface

///|
#declaration_only
declare pub fn Instance::create_surface_xlib(
  self : Instance,
  display : @c.OpaquePtr,
  window : UInt64,
) -> Surface

///|
#declaration_only
declare pub fn Instance::create_surface_android_native_window(
  self : Instance,
  window : @c.OpaquePtr,
) -> Surface

///|
#declaration_only
declare pub fn Instance::create_surface_swap_chain_panel(
  self : Instance,
  panel_native : @c.OpaquePtr,
) -> Surface

///|
#declaration_only
declare pub fn Instance::create_surface_windows_hwnd(
  self : Instance,
  hinstance : @c.OpaquePtr,
  hwnd : @c.OpaquePtr,
) -> Surface

///|
#declaration_only
declare pub fn Instance::release(self : Instance) -> Unit

///|
declare pub fn surface_descriptor_metal_layer_new(
  layer : @c.OpaquePtr,
) -> @c.WGPUSurfaceDescriptorPtr

///|
declare pub fn surface_descriptor_wayland_new(
  display : @c.OpaquePtr,
  surface : @c.OpaquePtr,
) -> @c.WGPUSurfaceDescriptorPtr

///|
declare pub fn surface_descriptor_windows_hwnd_new(
  hinstance : @c.OpaquePtr,
  hwnd : @c.OpaquePtr,
) -> @c.WGPUSurfaceDescriptorPtr

///|
declare pub fn surface_descriptor_xcb_new(
  connection : @c.OpaquePtr,
  window : UInt,
) -> @c.WGPUSurfaceDescriptorPtr

///|
declare pub fn surface_descriptor_xlib_new(
  display : @c.OpaquePtr,
  window : UInt64,
) -> @c.WGPUSurfaceDescriptorPtr

///|
declare pub fn surface_descriptor_android_native_window_new(
  window : @c.OpaquePtr,
) -> @c.WGPUSurfaceDescriptorPtr

///|
declare pub fn surface_descriptor_swap_chain_panel_new(
  panel_native : @c.OpaquePtr,
) -> @c.WGPUSurfaceDescriptorPtr

///|
declare pub fn surface_descriptor_free(
  desc : @c.WGPUSurfaceDescriptorPtr,
) -> Unit

///|
declare pub fn surface_configuration_ptr_new(
  device : Device,
  config : SurfaceConfiguration,
) -> @c.WGPUSurfaceConfigurationPtr

///|
declare pub fn surface_configuration_ptr_free(
  config : @c.WGPUSurfaceConfigurationPtr,
) -> Unit

///|
#declaration_only
declare pub fn Surface::configure_ptr(
  self : Surface,
  config : @c.WGPUSurfaceConfigurationPtr,
) -> Unit

///|
#declaration_only
declare pub fn Surface::sync_macos_ns_view_layer(
  self : Surface,
  ns_view : @c.OpaquePtr,
) -> Unit raise SurfaceCreateError

///|
#declaration_only
declare pub fn Surface::sync_macos_window_handle(
  self : Surface,
  window_handle : @windowing.WindowHandle,
) -> Unit raise SurfaceCreateError

///|
declare pub fn SurfaceConfiguration::new(
  width : UInt,
  height : UInt,
  usage : TextureUsage,
  format : TextureFormat,
  present_mode : PresentMode,
  alpha_mode : CompositeAlphaMode,
) -> SurfaceConfiguration

///|
#declaration_only
declare pub fn SurfaceConfiguration::with_view_formats(
  self : SurfaceConfiguration,
  view_formats : Array[TextureFormat],
) -> SurfaceConfiguration

///|
#declaration_only
declare pub fn SurfaceConfiguration::with_desired_maximum_frame_latency(
  self : SurfaceConfiguration,
  desired_maximum_frame_latency : UInt,
) -> SurfaceConfiguration

///|
#declaration_only
declare pub fn Surface::configure_default(
  self : Surface,
  adapter : Adapter,
  device : Device,
  width : UInt,
  height : UInt,
  usage : TextureUsage,
  desired_maximum_frame_latency? : UInt = SURFACE_DEFAULT_DESIRED_MAXIMUM_FRAME_LATENCY,
) -> TextureFormat

///|
#declaration_only
declare pub fn Surface::configure_with(
  self : Surface,
  adapter : Adapter,
  device : Device,
  config : SurfaceConfiguration,
) -> Bool

///|
#declaration_only
declare pub fn Surface::configure_with_or_raise(
  self : Surface,
  adapter : Adapter,
  device : Device,
  config : SurfaceConfiguration,
) -> Unit raise SurfaceConfigureError

///|
#declaration_only
declare pub fn Surface::configure_u32(
  self : Surface,
  adapter : Adapter,
  device : Device,
  width : UInt,
  height : UInt,
  usage : TextureUsage,
  format : TextureFormat,
  present_mode_u32 : UInt,
  alpha_mode_u32 : UInt,
  desired_maximum_frame_latency? : UInt = SURFACE_DEFAULT_DESIRED_MAXIMUM_FRAME_LATENCY,
) -> Bool

///|
#declaration_only
declare pub fn Surface::configure_u32_or_raise(
  self : Surface,
  adapter : Adapter,
  device : Device,
  width : UInt,
  height : UInt,
  usage : TextureUsage,
  format : TextureFormat,
  present_mode_u32 : UInt,
  alpha_mode_u32 : UInt,
  desired_maximum_frame_latency? : UInt = SURFACE_DEFAULT_DESIRED_MAXIMUM_FRAME_LATENCY,
) -> Unit raise SurfaceConfigureError

///|
#declaration_only
declare pub fn Surface::configure_view_formats_u32(
  self : Surface,
  adapter : Adapter,
  device : Device,
  width : UInt,
  height : UInt,
  usage : TextureUsage,
  format : TextureFormat,
  present_mode_u32 : UInt,
  alpha_mode_u32 : UInt,
  view_formats : Array[TextureFormat],
  desired_maximum_frame_latency? : UInt = SURFACE_DEFAULT_DESIRED_MAXIMUM_FRAME_LATENCY,
) -> Bool

///|
#declaration_only
declare pub fn Surface::configure_view_formats_u32_or_raise(
  self : Surface,
  adapter : Adapter,
  device : Device,
  width : UInt,
  height : UInt,
  usage : TextureUsage,
  format : TextureFormat,
  present_mode_u32 : UInt,
  alpha_mode_u32 : UInt,
  view_formats : Array[TextureFormat],
  desired_maximum_frame_latency? : UInt = SURFACE_DEFAULT_DESIRED_MAXIMUM_FRAME_LATENCY,
) -> Unit raise SurfaceConfigureError

///|
#declaration_only
declare pub fn Surface::get_current_texture(self : Surface) -> SurfaceTexture

///|
#declaration_only
declare pub fn Surface::get_current_texture_or_raise(
  self : Surface,
) -> SurfaceTexture raise SurfaceTextureError

///|
#declaration_only
declare pub fn Surface::get_current_frame_or_raise(
  self : Surface,
) -> SurfaceFrame raise SurfaceTextureError

///|
#declaration_only
declare pub fn SurfaceTexture::status(self : SurfaceTexture) -> UInt

///|
#declaration_only
declare pub fn SurfaceTexture::require_success(
  self : SurfaceTexture,
) -> Unit raise SurfaceTextureError

///|
#declaration_only
declare pub fn SurfaceTexture::take_texture(self : SurfaceTexture) -> Texture

///|
#declaration_only
declare pub fn SurfaceTexture::take_texture_or_raise(
  self : SurfaceTexture,
) -> Texture raise SurfaceTextureError

///|
#declaration_only
declare pub fn SurfaceFrame::present(self : SurfaceFrame) -> UInt

///|
#declaration_only
declare pub fn SurfaceFrame::present_or_raise(
  self : SurfaceFrame,
) -> Unit raise SurfacePresentError

///|
#declaration_only
declare pub fn SurfaceFrame::release(self : SurfaceFrame) -> Unit

///|
#declaration_only
declare pub fn SurfaceTexture::is_success(self : SurfaceTexture) -> Bool

///|
#declaration_only
declare pub fn GlobalReport::surfaces_num_allocated(
  self : GlobalReport,
) -> UInt64

///|
#declaration_only
declare pub fn GlobalReport::surfaces_element_size(
  self : GlobalReport,
) -> UInt64

///|
#declaration_only
declare pub fn GlobalReport::hub_devices_num_allocated(
  self : GlobalReport,
) -> UInt64

///|
#declaration_only
declare pub fn GlobalReport::hub_devices_element_size(
  self : GlobalReport,
) -> UInt64

///|
#declaration_only
declare pub fn GlobalReport::release(self : GlobalReport) -> Unit

///|
#declaration_only
declare pub fn Surface::present(self : Surface) -> UInt

///|
#declaration_only
declare pub fn Surface::present_or_raise(
  self : Surface,
) -> Unit raise SurfacePresentError

///|
#declaration_only
declare pub fn Surface::unconfigure(self : Surface) -> Unit

///|
#declaration_only
declare pub fn Surface::capabilities_formats_count_u64(
  self : Surface,
  adapter : Adapter,
) -> UInt64

///|
#declaration_only
declare pub fn Surface::capabilities_present_modes_count_u64(
  self : Surface,
  adapter : Adapter,
) -> UInt64

///|
#declaration_only
declare pub fn Surface::capabilities_alpha_modes_count_u64(
  self : Surface,
  adapter : Adapter,
) -> UInt64

///|
#declaration_only
declare pub fn Surface::capabilities_format_u32_at(
  self : Surface,
  adapter : Adapter,
  index : UInt64,
) -> TextureFormat

///|
#declaration_only
declare pub fn Surface::capabilities_present_mode_u32_at(
  self : Surface,
  adapter : Adapter,
  index : UInt64,
) -> UInt

///|
#declaration_only
declare pub fn Surface::capabilities_alpha_mode_u32_at(
  self : Surface,
  adapter : Adapter,
  index : UInt64,
) -> UInt

///|
#declaration_only
declare pub fn Surface::capabilities_formats(
  self : Surface,
  adapter : Adapter,
) -> Array[TextureFormat]

///|
#declaration_only
declare pub fn Surface::capabilities_present_modes(
  self : Surface,
  adapter : Adapter,
) -> Array[UInt]

///|
#declaration_only
declare pub fn Surface::capabilities_alpha_modes(
  self : Surface,
  adapter : Adapter,
) -> Array[UInt]

///|
#declaration_only
declare pub fn Adapter::request_device_sync(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_ptr(
  self : Adapter,
  instance : Instance,
  descriptor : @c.WGPUDeviceDescriptorPtr,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_with_features(
  self : Adapter,
  instance : Instance,
  required_features_u32 : Array[UInt],
  label? : String = "",
  queue_label? : String = "",
  trace_path? : String = "",
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_with_features_and_limits(
  self : Adapter,
  instance : Instance,
  required_features_u32 : Array[UInt],
  max_bind_groups_u32? : UInt = 0U,
  max_dynamic_uniform_buffers_u32? : UInt = 0U,
  max_uniform_buffer_binding_size? : UInt64 = 0UL,
  max_storage_buffer_binding_size? : UInt64 = 0UL,
  max_sampled_textures_per_shader_stage_u32? : UInt = 0U,
  max_samplers_per_shader_stage_u32? : UInt = 0U,
  max_immediate_size_u32? : UInt = 0U,
  max_non_sampler_bindings_u32? : UInt = 0U,
  max_binding_array_elements_per_shader_stage_u32? : UInt = 0U,
  max_binding_array_sampler_elements_per_shader_stage_u32? : UInt = 0U,
  label? : String = "",
  queue_label? : String = "",
  trace_path? : String = "",
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_future_id_u64(
  self : Adapter,
  descriptor? : @c.WGPUDeviceDescriptorPtr = @c.null_device_descriptor_ptr(),
) -> UInt64

///|
#declaration_only
declare pub fn Adapter::request_device_async_status_u32(
  self : Adapter,
  future_id : UInt64,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::request_device_async_device(
  self : Adapter,
  future_id : UInt64,
) -> Device

///|
#declaration_only
declare pub fn Adapter::request_device_async_message(
  self : Adapter,
  future_id : UInt64,
) -> String

///|
#declaration_only
declare pub fn Adapter::request_device_async_clear(
  self : Adapter,
  future_id : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn Adapter::request_device_async_take_or_raise(
  self : Adapter,
  future_id : UInt64,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_timestamp_query(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_timestamp_query_inside_encoders(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_timestamp_query_inside_passes(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_immediates(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_texture_binding_array(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_clear_texture(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_multiview(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_pipeline_statistics_query(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_spirv_shader_passthrough(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_native_feature(
  self : Adapter,
  instance : Instance,
  native_feature_u32 : UInt,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_buffer_binding_array(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_storage_resource_binding_array(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_partially_bound_binding_array(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_storage_texture_array_non_uniform_indexing(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_sampled_texture_and_storage_buffer_array_non_uniform_indexing(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_vertex_writable_storage(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_multi_draw_indirect_count(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_mappable_primary_buffers(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_texture_format16bit_norm(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_texture_compression_astc_hdr(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_polygon_mode_line(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_polygon_mode_point(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_conservative_rasterization(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_texture_format_nv12(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_vertex_attribute64bit(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_ray_query(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_shader_f64(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_shader_i16(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_shader_int64(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_shader_primitive_index(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_shader_early_depth_test(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_subgroup(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_subgroup_vertex(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_subgroup_barrier(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::request_device_sync_texture_adapter_specific_format_features(
  self : Adapter,
  instance : Instance,
) -> Device raise WgpuError

///|
#declaration_only
declare pub fn Adapter::release(self : Adapter) -> Unit

///|
#declaration_only
declare pub fn Adapter::has_feature_timestamp_query(self : Adapter) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_u32(
  self : Adapter,
  native_feature_u32 : UInt,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_timestamp_query_inside_encoders(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_timestamp_query_inside_passes(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_immediates(self : Adapter) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_pipeline_statistics_query(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_clear_texture(self : Adapter) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_multiview(self : Adapter) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_spirv_shader_passthrough(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_texture_binding_array(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_experimental_mesh_shader(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_experimental_mesh_shader_points(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_buffer_binding_array(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_storage_resource_binding_array(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_partially_bound_binding_array(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_storage_texture_array_non_uniform_indexing(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_sampled_texture_and_storage_buffer_array_non_uniform_indexing(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_vertex_writable_storage(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_multi_draw_indirect_count(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_mappable_primary_buffers(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_texture_format16bit_norm(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_texture_compression_astc_hdr(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_polygon_mode_line(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_polygon_mode_point(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_conservative_rasterization(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_texture_format_nv12(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_vertex_attribute64bit(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_ray_query(self : Adapter) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_shader_f64(self : Adapter) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_shader_i16(self : Adapter) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_shader_int64(self : Adapter) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_shader_primitive_index(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_shader_early_depth_test(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_subgroup(self : Adapter) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_subgroup_vertex(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_subgroup_barrier(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::has_feature_native_texture_adapter_specific_format_features(
  self : Adapter,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::info_backend_type_u32(self : Adapter) -> UInt

///|
#declaration_only
declare pub fn Adapter::info_adapter_type_u32(self : Adapter) -> UInt

///|
#declaration_only
declare pub fn Adapter::info_vendor_id_u32(self : Adapter) -> UInt

///|
#declaration_only
declare pub fn Adapter::info_device_id_u32(self : Adapter) -> UInt

///|
#declaration_only
declare pub fn Adapter::info_vendor(self : Adapter) -> String

///|
#declaration_only
declare pub fn Adapter::info_architecture(self : Adapter) -> String

///|
#declaration_only
declare pub fn Adapter::info_device(self : Adapter) -> String

///|
#declaration_only
declare pub fn Adapter::info_description(self : Adapter) -> String

///|
declare pub fn Adapter::limits_max_texture_dimension_1d_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_texture_dimension_2d_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_texture_dimension_3d_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_texture_array_layers_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_bind_groups_u32(self : Adapter) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_bind_groups_plus_vertex_buffers_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_bindings_per_bind_group_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_dynamic_uniform_buffers_per_pipeline_layout_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_dynamic_storage_buffers_per_pipeline_layout_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_sampled_textures_per_shader_stage_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_samplers_per_shader_stage_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_storage_buffers_per_shader_stage_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_storage_textures_per_shader_stage_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_uniform_buffers_per_shader_stage_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_uniform_buffer_binding_size_u64(
  self : Adapter,
) -> UInt64

///|
#declaration_only
declare pub fn Adapter::limits_max_storage_buffer_binding_size_u64(
  self : Adapter,
) -> UInt64

///|
#declaration_only
declare pub fn Adapter::limits_min_uniform_buffer_offset_alignment_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_min_storage_buffer_offset_alignment_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_vertex_buffers_u32(self : Adapter) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_buffer_size_u64(self : Adapter) -> UInt64

///|
#declaration_only
declare pub fn Adapter::limits_max_vertex_attributes_u32(self : Adapter) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_vertex_buffer_array_stride_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_inter_stage_shader_variables_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_color_attachments_u32(self : Adapter) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_color_attachment_bytes_per_sample_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_compute_workgroup_storage_size_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_compute_invocations_per_workgroup_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_immediate_size_u32(self : Adapter) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_compute_workgroup_size_x_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_compute_workgroup_size_y_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_compute_workgroup_size_z_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_compute_workgroups_per_dimension_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_non_sampler_bindings_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_binding_array_elements_per_shader_stage_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::limits_max_binding_array_sampler_elements_per_shader_stage_u32(
  self : Adapter,
) -> UInt

///|
#declaration_only
declare pub fn Adapter::supported_features_count_u64(self : Adapter) -> UInt64

///|
#declaration_only
declare pub fn Adapter::supported_features_contains_u32(
  self : Adapter,
  feature_u32 : UInt,
) -> Bool

///|
#declaration_only
declare pub fn Adapter::supported_feature_u32_at(
  self : Adapter,
  index : UInt64,
) -> UInt

///|
#declaration_only
declare pub fn Device::queue(self : Device) -> Queue

///|
#declaration_only
declare pub fn Device::create_command_encoder(self : Device) -> CommandEncoder

///|
#declaration_only
declare pub fn Device::push_error_scope(
  self : Device,
  filter_u32 : UInt,
) -> Unit

///|
#declaration_only
declare pub fn Device::pop_error_scope_sync(
  self : Device,
  instance : Instance,
) -> UInt

///|
#declaration_only
declare pub fn Device::pop_error_scope_sync_result(
  self : Device,
  instance : Instance,
) -> ErrorScopeResult

///|
#declaration_only
declare pub fn Device::supported_features_count_u64(self : Device) -> UInt64

///|
#declaration_only
declare pub fn Device::supported_features_contains_u32(
  self : Device,
  feature_u32 : UInt,
) -> Bool

///|
#declaration_only
declare pub fn Device::supported_feature_u32_at(
  self : Device,
  index : UInt64,
) -> UInt

///|
#declaration_only
declare pub fn Device::has_feature_u32(
  self : Device,
  feature_u32 : UInt,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_timestamp_query(self : Device) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_u32(
  self : Device,
  native_feature_u32 : UInt,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_timestamp_query_inside_encoders(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_timestamp_query_inside_passes(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_immediates(self : Device) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_pipeline_statistics_query(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_clear_texture(self : Device) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_multiview(self : Device) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_spirv_shader_passthrough(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_texture_binding_array(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_experimental_mesh_shader(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_experimental_mesh_shader_points(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_buffer_binding_array(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_storage_resource_binding_array(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_partially_bound_binding_array(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_storage_texture_array_non_uniform_indexing(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_sampled_texture_and_storage_buffer_array_non_uniform_indexing(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_vertex_writable_storage(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_multi_draw_indirect_count(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_mappable_primary_buffers(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_texture_format16bit_norm(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_texture_compression_astc_hdr(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_polygon_mode_line(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_polygon_mode_point(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_conservative_rasterization(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_texture_format_nv12(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_vertex_attribute64bit(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_ray_query(self : Device) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_shader_f64(self : Device) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_shader_i16(self : Device) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_shader_int64(self : Device) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_shader_primitive_index(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_shader_early_depth_test(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_subgroup(self : Device) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_subgroup_vertex(self : Device) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_subgroup_barrier(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::has_feature_native_texture_adapter_specific_format_features(
  self : Device,
) -> Bool

///|
#declaration_only
declare pub fn Device::info_backend_type_u32(self : Device) -> UInt

///|
#declaration_only
declare pub fn Device::info_adapter_type_u32(self : Device) -> UInt

///|
#declaration_only
declare pub fn Device::info_vendor_id_u32(self : Device) -> UInt

///|
#declaration_only
declare pub fn Device::info_device_id_u32(self : Device) -> UInt

///|
#declaration_only
declare pub fn Device::info_vendor(self : Device) -> String

///|
#declaration_only
declare pub fn Device::info_architecture(self : Device) -> String

///|
#declaration_only
declare pub fn Device::info_device(self : Device) -> String

///|
#declaration_only
declare pub fn Device::info_description(self : Device) -> String

///|
#declaration_only
declare pub fn Device::limits_max_texture_dimension_1d_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_texture_dimension_2d_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_texture_dimension_3d_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_texture_array_layers_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_bind_groups_u32(self : Device) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_bind_groups_plus_vertex_buffers_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_bindings_per_bind_group_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_dynamic_uniform_buffers_per_pipeline_layout_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_dynamic_storage_buffers_per_pipeline_layout_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_sampled_textures_per_shader_stage_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_samplers_per_shader_stage_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_storage_buffers_per_shader_stage_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::supports_read_only_storage_buffer_binding(
  self : Device,
  required_storage_buffers_per_shader_stage : UInt,
) -> Bool

///|
#declaration_only
declare pub fn Device::get_supported_read_only_binding_type_u32(
  self : Device,
  required_storage_buffers_per_shader_stage : UInt,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_storage_textures_per_shader_stage_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_uniform_buffers_per_shader_stage_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_uniform_buffer_binding_size_u64(
  self : Device,
) -> UInt64

///|
#declaration_only
declare pub fn Device::limits_max_storage_buffer_binding_size_u64(
  self : Device,
) -> UInt64

///|
#declaration_only
declare pub fn Device::limits_min_uniform_buffer_offset_alignment_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_min_storage_buffer_offset_alignment_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_vertex_buffers_u32(self : Device) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_buffer_size_u64(self : Device) -> UInt64

///|
#declaration_only
declare pub fn Device::limits_max_vertex_attributes_u32(self : Device) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_vertex_buffer_array_stride_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_inter_stage_shader_variables_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_color_attachments_u32(self : Device) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_color_attachment_bytes_per_sample_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_compute_workgroup_storage_size_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_compute_invocations_per_workgroup_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_immediate_size_u32(self : Device) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_compute_workgroup_size_x_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_compute_workgroup_size_y_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_compute_workgroup_size_z_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_compute_workgroups_per_dimension_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_non_sampler_bindings_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_binding_array_elements_per_shader_stage_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::limits_max_binding_array_sampler_elements_per_shader_stage_u32(
  self : Device,
) -> UInt

///|
#declaration_only
declare pub fn Device::create_buffer(
  self : Device,
  size~ : UInt64,
  usage~ : BufferUsage,
  mapped_at_creation? : Bool = false,
) -> Buffer

///|
#declaration_only
declare pub fn Device::create_buffer_init(
  self : Device,
  usage~ : BufferUsage,
  data : Bytes,
) -> Buffer

///|
#declaration_only
declare pub fn Device::create_query_set_occlusion(
  self : Device,
  count : UInt,
) -> QuerySet

///|
#declaration_only
declare pub fn Device::create_query_set_timestamp(
  self : Device,
  count : UInt,
) -> QuerySet

///|
#declaration_only
declare pub fn Device::create_query_set_pipeline_statistics(
  self : Device,
  count : UInt,
  statistic_name : UInt,
) -> QuerySet

///|
#declaration_only
declare pub fn Device::create_query_set_pipeline_statistics_many(
  self : Device,
  count : UInt,
  first_statistic_name_u32 : UInt,
  other_statistic_names_u32 : Array[UInt],
) -> QuerySet

///|
#declaration_only
declare pub fn Device::create_shader_module_wgsl(
  self : Device,
  code : String,
) -> ShaderModule

///|
#declaration_only
declare pub fn Device::create_shader_module_glsl(
  self : Device,
  stage_u64 : UInt64,
  code : String,
) -> ShaderModule

///|
#declaration_only
declare pub fn Device::create_shader_module_spirv(
  self : Device,
  spirv_le_bytes : Bytes,
) -> ShaderModule

///|
#declaration_only
declare pub fn Device::create_compute_pipeline(
  self : Device,
  shader_module : ShaderModule,
) -> ComputePipeline

///|
#declaration_only
declare pub fn Device::create_compute_pipeline_entry(
  self : Device,
  shader_module : ShaderModule,
  entry_point : String,
) -> ComputePipeline raise ComputePipelineDescError

///|
#declaration_only
declare pub fn Device::create_compute_pipeline_with_layout(
  self : Device,
  layout : PipelineLayout,
  shader_module : ShaderModule,
) -> ComputePipeline

///|
#declaration_only
declare pub fn Device::create_compute_pipeline_with_layout_entry(
  self : Device,
  layout : PipelineLayout,
  shader_module : ShaderModule,
  entry_point : String,
) -> ComputePipeline raise ComputePipelineDescError

///|
#declaration_only
declare pub fn Device::create_texture_rgba8_2d(
  self : Device,
  width : UInt,
  height : UInt,
) -> Texture

///|
#declaration_only
declare pub fn Device::create_texture_depth24plus_2d(
  self : Device,
  width : UInt,
  height : UInt,
) -> Texture

///|
#declaration_only
declare pub fn Device::create_texture_rgba8_2d_with_usage(
  self : Device,
  width : UInt,
  height : UInt,
  usage : TextureUsage,
) -> Texture

///|
#declaration_only
declare pub fn Device::create_texture_rgba8_2d_array(
  self : Device,
  width : UInt,
  height : UInt,
  layers : UInt,
  mip_level_count : UInt,
) -> Texture

///|
#declaration_only
declare pub fn Device::create_texture_rgba8_2d_array_with_usage(
  self : Device,
  width : UInt,
  height : UInt,
  layers : UInt,
  mip_level_count : UInt,
  usage : TextureUsage,
) -> Texture

///|
#declaration_only
declare pub fn Device::create_texture_u32(
  self : Device,
  width : UInt,
  height : UInt,
  depth_or_array_layers : UInt,
  usage : TextureUsage,
  dimension : TextureDimension,
  format : TextureFormat,
  mip_level_count? : UInt = 1U,
  sample_count? : UInt = 1U,
  view_formats? : Array[TextureFormat] = [],
) -> Texture

///|
#declaration_only
declare pub fn Texture::create_view(self : Texture) -> TextureView

///|
#declaration_only
declare pub fn Texture::create_view_u32(
  self : Texture,
  format : TextureFormat,
  view_dimension_u32 : UInt,
  aspect_u32 : UInt,
  base_array_layer : UInt,
  array_layer_count : UInt,
  base_mip_level : UInt,
  mip_level_count : UInt,
) -> TextureView

///|
#declaration_only
declare pub fn Texture::create_view_2d(
  self : Texture,
  base_mip_level : UInt,
  mip_level_count : UInt,
) -> TextureView

///|
#declaration_only
declare pub fn Texture::create_view_2d_array(
  self : Texture,
  base_array_layer : UInt,
  array_layer_count : UInt,
  base_mip_level : UInt,
  mip_level_count : UInt,
) -> TextureView

///|
#declaration_only
declare pub fn Texture::width_u32(self : Texture) -> UInt

///|
#declaration_only
declare pub fn Texture::height_u32(self : Texture) -> UInt

///|
#declaration_only
declare pub fn Texture::depth_or_array_layers_u32(self : Texture) -> UInt

///|
#declaration_only
declare pub fn Texture::mip_level_count_u32(self : Texture) -> UInt

///|
#declaration_only
declare pub fn Texture::sample_count_u32(self : Texture) -> UInt

///|
#declaration_only
declare pub fn Texture::dimension_u32(self : Texture) -> TextureDimension

///|
#declaration_only
declare pub fn Texture::format_u32(self : Texture) -> TextureFormat

///|
#declaration_only
declare pub fn Texture::usage_u64(self : Texture) -> TextureUsage

///|
#declaration_only
declare pub fn Device::create_sampler_nearest_clamp(self : Device) -> Sampler

///|
#declaration_only
declare pub fn Device::create_sampler_linear_clamp(self : Device) -> Sampler

///|
#declaration_only
declare pub fn Device::create_sampler_nearest_repeat(self : Device) -> Sampler

///|
#declaration_only
declare pub fn Device::create_sampler_linear_repeat(self : Device) -> Sampler

///|
#declaration_only
declare pub fn Device::create_sampler_nearest_mirror_repeat(
  self : Device,
) -> Sampler

///|
#declaration_only
declare pub fn Device::create_sampler_linear_mirror_repeat(
  self : Device,
) -> Sampler

///|
#declaration_only
declare pub fn Device::create_sampler_u32(
  self : Device,
  address_mode_u_u32 : UInt,
  address_mode_v_u32 : UInt,
  address_mode_w_u32 : UInt,
  mag_filter_u32 : UInt,
  min_filter_u32 : UInt,
  mipmap_filter_u32 : UInt,
  lod_min_clamp_f32? : Float = 0.0,
  lod_max_clamp_f32? : Float = 32.0,
  compare_u32? : UInt = COMPARE_FUNCTION_UNDEFINED,
  max_anisotropy_u32? : UInt = 1U,
) -> Sampler

///|
#declaration_only
declare pub fn Device::create_render_pipeline_rgba8(
  self : Device,
  shader_module : ShaderModule,
) -> RenderPipeline

///|
#declaration_only
declare pub fn Device::create_render_pipeline_color_format(
  self : Device,
  shader_module : ShaderModule,
  format : TextureFormat,
) -> RenderPipeline

///|
#declaration_only
declare pub fn Device::create_render_pipeline_color_format_alpha_blend(
  self : Device,
  shader_module : ShaderModule,
  format : TextureFormat,
) -> RenderPipeline

///|
#declaration_only
declare pub fn Device::create_render_pipeline_rgba8_mrt2(
  self : Device,
  shader_module : ShaderModule,
) -> RenderPipeline

///|
#declaration_only
declare pub fn Device::create_render_pipeline_rgba8_alpha_blend(
  self : Device,
  shader_module : ShaderModule,
) -> RenderPipeline

///|
#declaration_only
declare pub fn Device::create_render_pipeline_rgba8_depth(
  self : Device,
  shader_module : ShaderModule,
) -> RenderPipeline

///|
#declaration_only
declare pub fn Device::create_render_bundle_encoder_rgba8(
  self : Device,
) -> RenderBundleEncoder

///|
#declaration_only
declare pub fn Device::create_render_pipeline_rgba8_with_layout(
  self : Device,
  layout : PipelineLayout,
  shader_module : ShaderModule,
) -> RenderPipeline

///|
#declaration_only
declare pub fn Device::create_render_pipeline_rgba8_pos2(
  self : Device,
  shader_module : ShaderModule,
) -> RenderPipeline

///|
#declaration_only
declare pub fn Device::create_render_pipeline_rgba8_pos2_with_layout(
  self : Device,
  layout : PipelineLayout,
  shader_module : ShaderModule,
) -> RenderPipeline

///|
#declaration_only
declare pub fn Device::create_bind_group_layout_empty(
  self : Device,
) -> BindGroupLayout

///|
#declaration_only
declare pub fn Device::create_bind_group_layout_uniform_buffer(
  self : Device,
) -> BindGroupLayout

///|
#declaration_only
declare pub fn Device::create_bind_group_layout_uniform_buffer_dynamic(
  self : Device,
) -> BindGroupLayout

///|
#declaration_only
declare pub fn Device::create_bind_group_uniform_buffer(
  self : Device,
  bind_group_layout : BindGroupLayout,
  buffer : Buffer,
) -> BindGroup

///|
#declaration_only
declare pub fn Device::create_bind_group_uniform_buffer_16(
  self : Device,
  bind_group_layout : BindGroupLayout,
  buffer : Buffer,
) -> BindGroup

///|
#declaration_only
declare pub fn Device::create_bind_group_layout_storage_buffer(
  self : Device,
) -> BindGroupLayout

///|
#declaration_only
declare pub fn Device::create_bind_group_layout_storage_texture_rgba8_writeonly(
  self : Device,
) -> BindGroupLayout

///|
#declaration_only
declare pub fn Device::create_bind_group_storage_buffer(
  self : Device,
  bind_group_layout : BindGroupLayout,
  buffer : Buffer,
) -> BindGroup

///|
#declaration_only
declare pub fn Device::create_bind_group_storage_texture_2d(
  self : Device,
  bind_group_layout : BindGroupLayout,
  view : TextureView,
) -> BindGroup

///|
#declaration_only
declare pub fn Device::create_bind_group_layout_sampler_texture_2d(
  self : Device,
) -> BindGroupLayout

///|
#declaration_only
declare pub fn Device::create_bind_group_layout_sampler_filtering(
  self : Device,
) -> BindGroupLayout

///|
#declaration_only
declare pub fn Device::create_bind_group_layout_texture_2d_float(
  self : Device,
) -> BindGroupLayout

///|
#declaration_only
declare pub fn Device::create_bind_group_sampler_texture_2d(
  self : Device,
  bind_group_layout : BindGroupLayout,
  sampler : Sampler,
  view : TextureView,
) -> BindGroup

///|
#declaration_only
declare pub fn Device::create_bind_group_sampler(
  self : Device,
  bind_group_layout : BindGroupLayout,
  sampler : Sampler,
) -> BindGroup

///|
#declaration_only
declare pub fn Device::create_bind_group_texture_2d(
  self : Device,
  bind_group_layout : BindGroupLayout,
  view : TextureView,
) -> BindGroup

///|
#declaration_only
declare pub fn BindGroupLayoutBuilder::new(
  max_entries~ : UInt64,
) -> BindGroupLayoutBuilder

///|
#declaration_only
declare pub fn BindGroupLayoutBuilder::add_buffer(
  self : BindGroupLayoutBuilder,
  binding : UInt,
  visibility : ShaderStage,
  type_u32 : UInt,
  has_dynamic_offset? : Bool = false,
  min_binding_size? : UInt64 = 0UL,
  count? : UInt = 1U,
) -> Bool

///|
#declaration_only
declare pub fn BindGroupLayoutBuilder::add_sampler(
  self : BindGroupLayoutBuilder,
  binding : UInt,
  visibility : ShaderStage,
  type_u32 : UInt,
  count? : UInt = 1U,
) -> Bool

///|
#declaration_only
declare pub fn BindGroupLayoutBuilder::add_texture(
  self : BindGroupLayoutBuilder,
  binding : UInt,
  visibility : ShaderStage,
  sample_type_u32 : UInt,
  view_dimension_u32 : UInt,
  multisampled? : Bool = false,
  count? : UInt = 1U,
) -> Bool

///|
#declaration_only
declare pub fn BindGroupLayoutBuilder::add_storage_texture(
  self : BindGroupLayoutBuilder,
  binding : UInt,
  visibility : ShaderStage,
  access_u32 : UInt,
  format : TextureFormat,
  view_dimension_u32 : UInt,
  count? : UInt = 1U,
) -> Bool

///|
#declaration_only
declare pub fn BindGroupLayoutBuilder::finish(
  self : BindGroupLayoutBuilder,
  device : Device,
  label? : String = "",
) -> BindGroupLayout

///|
#declaration_only
declare pub fn BindGroupLayoutBuilder::free(
  self : BindGroupLayoutBuilder,
) -> Unit

///|
#declaration_only
declare pub fn BindGroupBuilder::new(max_entries~ : UInt64) -> BindGroupBuilder

///|
#declaration_only
declare pub fn BindGroupBuilder::add_buffer(
  self : BindGroupBuilder,
  binding : UInt,
  buffer : Buffer,
  offset? : UInt64 = 0UL,
  size? : UInt64 = WHOLE_SIZE,
) -> Bool

///|
#declaration_only
declare pub fn BindGroupBuilder::add_buffer_array(
  self : BindGroupBuilder,
  binding : UInt,
  buffers : Array[Buffer],
  offset? : UInt64 = 0UL,
  size? : UInt64 = WHOLE_SIZE,
) -> Bool

///|
#declaration_only
declare pub fn BindGroupBuilder::add_sampler(
  self : BindGroupBuilder,
  binding : UInt,
  sampler : Sampler,
) -> Bool

///|
#declaration_only
declare pub fn BindGroupBuilder::add_sampler_array(
  self : BindGroupBuilder,
  binding : UInt,
  samplers : Array[Sampler],
) -> Bool

///|
#declaration_only
declare pub fn BindGroupBuilder::add_texture_view(
  self : BindGroupBuilder,
  binding : UInt,
  view : TextureView,
) -> Bool

///|
#declaration_only
declare pub fn BindGroupBuilder::add_texture_view_array(
  self : BindGroupBuilder,
  binding : UInt,
  views : Array[TextureView],
) -> Bool

///|
#declaration_only
declare pub fn BindGroupBuilder::finish(
  self : BindGroupBuilder,
  device : Device,
  layout : BindGroupLayout,
  label? : String = "",
) -> BindGroup

///|
#declaration_only
declare pub fn BindGroupBuilder::free(self : BindGroupBuilder) -> Unit

///|
#declaration_only
declare pub fn ComputePipelineDescBuilder::new(
  shader_module : ShaderModule,
  layout? : PipelineLayout = { raw: @c.null_pipeline_layout() },
) -> ComputePipelineDescBuilder raise ComputePipelineDescError

///|
#declaration_only
declare pub fn ComputePipelineDescBuilder::set_entry_point(
  self : ComputePipelineDescBuilder,
  entry_point : String,
) -> Unit raise ComputePipelineDescError

///|
#declaration_only
declare pub fn ComputePipelineDescBuilder::finish_descriptor_ptr(
  self : ComputePipelineDescBuilder,
) -> @c.WGPUComputePipelineDescriptorPtr raise ComputePipelineDescError

///|
#declaration_only
declare pub fn ComputePipelineDescBuilder::create_pipeline(
  self : ComputePipelineDescBuilder,
  device : Device,
) -> ComputePipeline raise ComputePipelineDescError

///|
#declaration_only
declare pub fn ComputePipelineDescBuilder::free(
  self : ComputePipelineDescBuilder,
) -> Unit

///|
#declaration_only
declare pub fn ComputePipelineDescBuilder::last_error(
  self : ComputePipelineDescBuilder,
) -> ComputePipelineDescError

///|
#declaration_only
declare pub fn ComputePipelineDescError::message(
  self : ComputePipelineDescError,
) -> String

///|
#declaration_only
declare pub fn RenderPassDescBuilder::new(
  color_attachment_count : UInt,
) -> RenderPassDescBuilder raise RenderPassDescError

///|
#declaration_only
declare pub fn RenderPassDescBuilder::set_color_attachment(
  self : RenderPassDescBuilder,
  index_u32 : UInt,
  view : TextureView,
  load_op_u32? : UInt = LOAD_OP_CLEAR,
  store_op_u32? : UInt = STORE_OP_STORE,
  clear_r_f32? : Float = 0.0,
  clear_g_f32? : Float = 0.0,
  clear_b_f32? : Float = 0.0,
  clear_a_f32? : Float = 1.0,
) -> Unit raise RenderPassDescError

///|
#declaration_only
declare pub fn RenderPassDescBuilder::set_color_attachment_resolve_target(
  self : RenderPassDescBuilder,
  index_u32 : UInt,
  resolve_target : TextureView,
) -> Unit raise RenderPassDescError

///|
#declaration_only
declare pub fn RenderPassDescBuilder::clear_color_attachment_resolve_target(
  self : RenderPassDescBuilder,
  index_u32 : UInt,
) -> Unit raise RenderPassDescError

///|
#declaration_only
declare pub fn RenderPassDescBuilder::set_depth_stencil_attachment(
  self : RenderPassDescBuilder,
  depth_view : TextureView,
  depth_load_op_u32? : UInt = LOAD_OP_CLEAR,
  depth_store_op_u32? : UInt = STORE_OP_STORE,
  depth_clear_value_f32? : Float = 1.0,
  stencil_load_op_u32? : UInt = LOAD_OP_UNDEFINED,
  stencil_store_op_u32? : UInt = STORE_OP_UNDEFINED,
  stencil_clear_value_u32? : UInt = 0U,
  depth_read_only? : Bool = false,
  stencil_read_only? : Bool = false,
) -> Unit raise RenderPassDescError

///|
#declaration_only
declare pub fn RenderPassDescBuilder::clear_depth_stencil_attachment(
  self : RenderPassDescBuilder,
) -> Unit raise RenderPassDescError

///|
#declaration_only
declare pub fn RenderPassDescBuilder::finish_descriptor_ptr(
  self : RenderPassDescBuilder,
) -> @c.WGPURenderPassDescriptorPtr raise RenderPassDescError

///|
#declaration_only
declare pub fn RenderPassDescBuilder::begin(
  self : RenderPassDescBuilder,
  encoder : CommandEncoder,
) -> RenderPass raise RenderPassDescError

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_desc_builder(
  self : CommandEncoder,
  builder : RenderPassDescBuilder,
) -> RenderPass raise RenderPassDescError

///|
#declaration_only
declare pub fn RenderPassDescBuilder::free(self : RenderPassDescBuilder) -> Unit

///|
#declaration_only
declare pub fn RenderPassDescBuilder::last_error(
  self : RenderPassDescBuilder,
) -> RenderPassDescError

///|
#declaration_only
declare pub fn RenderPassDescError::message(
  self : RenderPassDescError,
) -> String

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::new(
  shader_module : ShaderModule,
  layout? : PipelineLayout = { raw: @c.null_pipeline_layout() },
) -> RenderPipelineDescBuilder raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_entry_points(
  self : RenderPipelineDescBuilder,
  vs_entry : String,
  fs_entry : String,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_color_target_format(
  self : RenderPipelineDescBuilder,
  format : TextureFormat,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_color_target_count(
  self : RenderPipelineDescBuilder,
  count_u32 : UInt,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_color_target_format_at(
  self : RenderPipelineDescBuilder,
  index_u32 : UInt,
  format : TextureFormat,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_color_target_unused_at(
  self : RenderPipelineDescBuilder,
  index_u32 : UInt,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_color_target_write_mask(
  self : RenderPipelineDescBuilder,
  write_mask_u64 : UInt64,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_color_target_write_mask_at(
  self : RenderPipelineDescBuilder,
  index_u32 : UInt,
  write_mask_u64 : UInt64,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_blend_components(
  self : RenderPipelineDescBuilder,
  color_src_factor_u32 : UInt,
  color_dst_factor_u32 : UInt,
  color_operation_u32 : UInt,
  alpha_src_factor_u32 : UInt,
  alpha_dst_factor_u32 : UInt,
  alpha_operation_u32 : UInt,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::enable_alpha_blend(
  self : RenderPipelineDescBuilder,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::disable_blend(
  self : RenderPipelineDescBuilder,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_vertex_buffer_layout(
  self : RenderPipelineDescBuilder,
  array_stride : UInt64,
  step_mode_u32 : UInt,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::add_vertex_buffer_layout(
  self : RenderPipelineDescBuilder,
  array_stride : UInt64,
  step_mode_u32 : UInt,
) -> UInt raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::add_vertex_attribute(
  self : RenderPipelineDescBuilder,
  format_u32 : UInt,
  offset : UInt64,
  shader_location : UInt,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_topology_u32(
  self : RenderPipelineDescBuilder,
  topology_u32 : UInt,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_strip_index_format_u32(
  self : RenderPipelineDescBuilder,
  index_format_u32 : UInt,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_cull_mode_u32(
  self : RenderPipelineDescBuilder,
  cull_mode_u32 : UInt,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_unclipped_depth(
  self : RenderPipelineDescBuilder,
  unclipped_depth : Bool,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_vertex_module(
  self : RenderPipelineDescBuilder,
  shader_module : ShaderModule,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_fragment_module(
  self : RenderPipelineDescBuilder,
  shader_module : ShaderModule,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::clear_fragment(
  self : RenderPipelineDescBuilder,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_polygon_mode_u32(
  self : RenderPipelineDescBuilder,
  polygon_mode_u32 : UInt,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_conservative_rasterization(
  self : RenderPipelineDescBuilder,
  conservative : Bool,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::clear_primitive_extras(
  self : RenderPipelineDescBuilder,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_depth_stencil(
  self : RenderPipelineDescBuilder,
  depth_format : TextureFormat,
  depth_write_enabled? : Bool = true,
  depth_compare_u32? : UInt = COMPARE_FUNCTION_LESS,
  depth_bias? : Int = 0,
  depth_bias_slope_scale? : Float = 0.0,
  depth_bias_clamp? : Float = 0.0,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::set_multisample(
  self : RenderPipelineDescBuilder,
  count_u32 : UInt,
  mask_u32? : UInt = 0xFFFFFFFFU,
  alpha_to_coverage_enabled? : Bool = false,
) -> Unit raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::finish_descriptor_ptr(
  self : RenderPipelineDescBuilder,
) -> @c.WGPURenderPipelineDescriptorPtr raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::create_pipeline(
  self : RenderPipelineDescBuilder,
  device : Device,
) -> RenderPipeline raise RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::free(
  self : RenderPipelineDescBuilder,
) -> Unit

///|
#declaration_only
declare pub fn RenderPipelineDescBuilder::last_error(
  self : RenderPipelineDescBuilder,
) -> RenderPipelineDescError

///|
#declaration_only
declare pub fn RenderPipelineDescError::message(
  self : RenderPipelineDescError,
) -> String

///|
#declaration_only
declare pub fn Device::create_pipeline_layout_1(
  self : Device,
  bind_group_layout : BindGroupLayout,
) -> PipelineLayout

///|
#declaration_only
declare pub fn Device::create_pipeline_layout_2(
  self : Device,
  bind_group_layout0 : BindGroupLayout,
  bind_group_layout1 : BindGroupLayout,
) -> PipelineLayout

///|
#declaration_only
declare pub fn Device::create_pipeline_layout_many(
  self : Device,
  bind_group_layouts : Array[BindGroupLayout],
) -> PipelineLayout

///|
#declaration_only
declare pub fn Device::create_pipeline_layout_immediates(
  self : Device,
  stages : ShaderStage,
  start : UInt,
  end : UInt,
) -> PipelineLayout

///|
#declaration_only
declare pub fn Device::create_pipeline_layout_immediates_many(
  self : Device,
  first_stages : ShaderStage,
  first_start : UInt,
  first_end : UInt,
  other_ranges : Array[(ShaderStage, UInt, UInt)],
) -> PipelineLayout

///|
#declaration_only
declare pub fn Device::create_pipeline_layout_with_immediates(
  self : Device,
  bind_group_layouts : Array[BindGroupLayout],
  ranges : Array[(ShaderStage, UInt, UInt)],
) -> PipelineLayout

///|
#declaration_only
declare pub fn Device::release(self : Device) -> Unit

///|
#declaration_only
declare pub fn Device::poll(self : Device, wait? : Bool = false) -> Bool

///|
#declaration_only
declare pub fn Device::take_lost_reason(self : Device) -> UInt

///|
#declaration_only
declare pub fn Device::wait_lost_reason_sync(
  self : Device,
  instance : Instance,
) -> UInt

///|
#declaration_only
declare pub fn Device::destroy(self : Device) -> Unit

///|
#declaration_only
declare pub fn Queue::submit_one(self : Queue, cmd : CommandBuffer) -> Unit

///|
#declaration_only
declare pub fn Queue::submit_one_for_index(
  self : Queue,
  cmd : CommandBuffer,
) -> UInt64

///|
#declaration_only
declare pub fn Queue::submit(self : Queue, cmds : Array[CommandBuffer]) -> Unit

///|
#declaration_only
declare pub fn Queue::submit_for_index(
  self : Queue,
  cmds : Array[CommandBuffer],
) -> UInt64

///|
#declaration_only
declare pub fn Queue::on_submitted_work_done_sync(
  self : Queue,
  instance : Instance,
) -> UInt

///|
#declaration_only
declare pub fn Queue::on_submitted_work_done_sync_or_raise(
  self : Queue,
  instance : Instance,
) -> Unit raise QueueWorkDoneError

///|
#declaration_only
declare pub fn Queue::on_submitted_work_done_future_id_u64(
  self : Queue,
) -> UInt64

///|
#declaration_only
declare pub fn Queue::on_submitted_work_done_async_status_u32(
  self : Queue,
  future_id : UInt64,
) -> UInt

///|
#declaration_only
declare pub fn Queue::on_submitted_work_done_async_clear(
  self : Queue,
  future_id : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn Queue::submit_one_and_map_read_async(
  self : Queue,
  cmd : CommandBuffer,
  buffer : Buffer,
  offset : UInt64,
  size : UInt64,
) -> UInt64

///|
#declaration_only
declare pub fn Queue::map_read_async_status_u32(
  self : Queue,
  future_id : UInt64,
) -> UInt

///|
#declaration_only
declare pub fn Queue::map_read_async_read(
  self : Queue,
  future_id : UInt64,
) -> Bytes

///|
#declaration_only
declare pub fn Queue::map_read_async_clear(
  self : Queue,
  future_id : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn Queue::on_submitted_work_done_async_take_or_raise(
  self : Queue,
  future_id : UInt64,
) -> Unit raise QueueWorkDoneError

///|
#declaration_only
declare pub fn Queue::on_submitted_work_done_wait_or_raise(
  self : Queue,
  instance : Instance,
  timeout_ns? : UInt64 = 0UL,
) -> Unit raise QueueWorkDoneWaitError

///|
#declaration_only
declare pub fn Queue::timestamp_period(self : Queue) -> Float

///|
#declaration_only
declare pub fn Queue::write_buffer(
  self : Queue,
  buffer : Buffer,
  buffer_offset : UInt64,
  data : Bytes,
) -> Unit

///|
#declaration_only
declare pub fn Queue::write_texture_rgba8_2d(
  self : Queue,
  texture : Texture,
  width : UInt,
  height : UInt,
  data : Bytes,
) -> Unit

///|
#declaration_only
declare pub fn Queue::write_texture_rgba8_2d_mip_layer(
  self : Queue,
  texture : Texture,
  mip_level : UInt,
  array_layer : UInt,
  width : UInt,
  height : UInt,
  data : Bytes,
) -> Unit

///|
#declaration_only
declare pub fn Queue::write_texture_ptr(
  self : Queue,
  destination : @c.WGPUTexelCopyTextureInfoPtr,
  data : Bytes,
  data_layout : @c.WGPUTexelCopyBufferLayoutPtr,
  write_size : @c.WGPUExtent3DPtr,
  data_size? : UInt64 = 0UL,
) -> Unit

///|
#declaration_only
declare pub fn Queue::release(self : Queue) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::begin_compute_pass(
  self : CommandEncoder,
) -> ComputePass

///|
#declaration_only
declare pub fn CommandEncoder::set_label(
  self : CommandEncoder,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::insert_debug_marker(
  self : CommandEncoder,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::push_debug_group(
  self : CommandEncoder,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::pop_debug_group(self : CommandEncoder) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_color(
  self : CommandEncoder,
  view : TextureView,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_color2(
  self : CommandEncoder,
  view0 : TextureView,
  view1 : TextureView,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_color2_depth(
  self : CommandEncoder,
  color0_view : TextureView,
  color1_view : TextureView,
  depth_view : TextureView,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_color2_depth_sparse_u32(
  self : CommandEncoder,
  color0_view : TextureView,
  color1_view : TextureView,
  depth_view : TextureView,
  color0_load_op_u32? : UInt,
  color0_store_op_u32? : UInt,
  color0_clear_r_f32? : Float,
  color0_clear_g_f32? : Float,
  color0_clear_b_f32? : Float,
  color0_clear_a_f32? : Float,
  color1_load_op_u32? : UInt,
  color1_store_op_u32? : UInt,
  color1_clear_r_f32? : Float,
  color1_clear_g_f32? : Float,
  color1_clear_b_f32? : Float,
  color1_clear_a_f32? : Float,
  depth_load_op_u32? : UInt,
  depth_store_op_u32? : UInt,
  depth_clear_value_f32? : Float,
  depth_read_only? : Bool,
  stencil_load_op_u32? : UInt,
  stencil_store_op_u32? : UInt,
  stencil_clear_value_u32? : UInt,
  stencil_read_only? : Bool,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_color1_depth_u32(
  self : CommandEncoder,
  color1_view : TextureView,
  depth_view : TextureView,
  color1_load_op_u32? : UInt,
  color1_store_op_u32? : UInt,
  color1_clear_r_f32? : Float,
  color1_clear_g_f32? : Float,
  color1_clear_b_f32? : Float,
  color1_clear_a_f32? : Float,
  depth_load_op_u32? : UInt,
  depth_store_op_u32? : UInt,
  depth_clear_value_f32? : Float,
  depth_read_only? : Bool,
  stencil_load_op_u32? : UInt,
  stencil_store_op_u32? : UInt,
  stencil_clear_value_u32? : UInt,
  stencil_read_only? : Bool,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_color2_depth_u32(
  self : CommandEncoder,
  color0_view : TextureView,
  color1_view : TextureView,
  depth_view : TextureView,
  color0_load_op_u32? : UInt,
  color0_store_op_u32? : UInt,
  color0_clear_r_f32? : Float,
  color0_clear_g_f32? : Float,
  color0_clear_b_f32? : Float,
  color0_clear_a_f32? : Float,
  color1_load_op_u32? : UInt,
  color1_store_op_u32? : UInt,
  color1_clear_r_f32? : Float,
  color1_clear_g_f32? : Float,
  color1_clear_b_f32? : Float,
  color1_clear_a_f32? : Float,
  depth_load_op_u32? : UInt,
  depth_store_op_u32? : UInt,
  depth_clear_value_f32? : Float,
  depth_read_only? : Bool,
  stencil_load_op_u32? : UInt,
  stencil_store_op_u32? : UInt,
  stencil_clear_value_u32? : UInt,
  stencil_read_only? : Bool,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_depth(
  self : CommandEncoder,
  depth_view : TextureView,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_depth_u32(
  self : CommandEncoder,
  depth_view : TextureView,
  depth_load_op_u32? : UInt,
  depth_store_op_u32? : UInt,
  depth_clear_value_f32? : Float,
  depth_read_only? : Bool,
  stencil_load_op_u32? : UInt,
  stencil_store_op_u32? : UInt,
  stencil_clear_value_u32? : UInt,
  stencil_read_only? : Bool,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_color_occlusion(
  self : CommandEncoder,
  view : TextureView,
  query_set : QuerySet,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_color_load(
  self : CommandEncoder,
  view : TextureView,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_color_clear(
  self : CommandEncoder,
  view : TextureView,
  r : Float,
  g : Float,
  b : Float,
  a : Float,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_color_depth(
  self : CommandEncoder,
  color_view : TextureView,
  depth_view : TextureView,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::begin_render_pass_color_depth_u32(
  self : CommandEncoder,
  color_view : TextureView,
  depth_view : TextureView,
  color_load_op_u32? : UInt,
  color_store_op_u32? : UInt,
  color_clear_r_f32? : Float,
  color_clear_g_f32? : Float,
  color_clear_b_f32? : Float,
  color_clear_a_f32? : Float,
  depth_load_op_u32? : UInt,
  depth_store_op_u32? : UInt,
  depth_clear_value_f32? : Float,
  depth_read_only? : Bool,
  stencil_load_op_u32? : UInt,
  stencil_store_op_u32? : UInt,
  stencil_clear_value_u32? : UInt,
  stencil_read_only? : Bool,
) -> RenderPass

///|
#declaration_only
declare pub fn CommandEncoder::copy_buffer_to_buffer(
  self : CommandEncoder,
  source : Buffer,
  source_offset : UInt64,
  destination : Buffer,
  destination_offset : UInt64,
  size : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::copy_buffer_to_texture_ptr(
  self : CommandEncoder,
  source : @c.WGPUTexelCopyBufferInfoPtr,
  destination : @c.WGPUTexelCopyTextureInfoPtr,
  copy_size : @c.WGPUExtent3DPtr,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::copy_texture_to_buffer_ptr(
  self : CommandEncoder,
  source : @c.WGPUTexelCopyTextureInfoPtr,
  destination : @c.WGPUTexelCopyBufferInfoPtr,
  copy_size : @c.WGPUExtent3DPtr,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::copy_texture_to_texture_ptr(
  self : CommandEncoder,
  source : @c.WGPUTexelCopyTextureInfoPtr,
  destination : @c.WGPUTexelCopyTextureInfoPtr,
  copy_size : @c.WGPUExtent3DPtr,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::copy_texture_to_buffer_rgba8(
  self : CommandEncoder,
  texture : Texture,
  buffer : Buffer,
  width : UInt,
  height : UInt,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::copy_texture_to_buffer_rgba8_mip_layer(
  self : CommandEncoder,
  texture : Texture,
  mip_level : UInt,
  array_layer : UInt,
  buffer : Buffer,
  width : UInt,
  height : UInt,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::copy_buffer_to_texture_rgba8(
  self : CommandEncoder,
  buffer : Buffer,
  texture : Texture,
  width : UInt,
  height : UInt,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::copy_buffer_to_texture_rgba8_mip_layer(
  self : CommandEncoder,
  buffer : Buffer,
  texture : Texture,
  mip_level : UInt,
  array_layer : UInt,
  width : UInt,
  height : UInt,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::copy_texture_to_texture_rgba8(
  self : CommandEncoder,
  src : Texture,
  dst : Texture,
  width : UInt,
  height : UInt,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::copy_texture_to_texture_rgba8_mip_layer(
  self : CommandEncoder,
  src : Texture,
  src_mip_level : UInt,
  src_array_layer : UInt,
  dst : Texture,
  dst_mip_level : UInt,
  dst_array_layer : UInt,
  width : UInt,
  height : UInt,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::resolve_query_set(
  self : CommandEncoder,
  query_set : QuerySet,
  first_query : UInt,
  query_count : UInt,
  destination : Buffer,
  destination_offset : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::write_timestamp(
  self : CommandEncoder,
  query_set : QuerySet,
  query_index : UInt,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::finish(self : CommandEncoder) -> CommandBuffer

///|
#declaration_only
declare pub fn CommandEncoder::clear_buffer(
  self : CommandEncoder,
  buffer : Buffer,
  offset : UInt64,
  size : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn CommandEncoder::release(self : CommandEncoder) -> Unit

///|
#declaration_only
declare pub fn CommandBuffer::release(self : CommandBuffer) -> Unit

///|
#declaration_only
declare pub fn ComputePass::set_pipeline(
  self : ComputePass,
  pipeline : ComputePipeline,
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::set_immediates(
  self : ComputePass,
  offset : UInt,
  data : Bytes,
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::set_bind_group0(
  self : ComputePass,
  group : BindGroup,
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::set_bind_group(
  self : ComputePass,
  index : UInt,
  group : BindGroup,
  dynamic_offsets : Array[UInt],
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::dispatch_workgroups(
  self : ComputePass,
  x : UInt,
  y : UInt,
  z : UInt,
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::dispatch_workgroups_indirect(
  self : ComputePass,
  indirect_buffer : Buffer,
  indirect_offset : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::write_timestamp(
  self : ComputePass,
  query_set : QuerySet,
  query_index : UInt,
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::begin_pipeline_statistics_query(
  self : ComputePass,
  query_set : QuerySet,
  query_index : UInt,
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::end_pipeline_statistics_query(
  self : ComputePass,
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::end(self : ComputePass) -> Unit

///|
#declaration_only
declare pub fn ComputePass::release(self : ComputePass) -> Unit

///|
#declaration_only
declare pub fn ComputePass::set_label(
  self : ComputePass,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::insert_debug_marker(
  self : ComputePass,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::push_debug_group(
  self : ComputePass,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn ComputePass::pop_debug_group(self : ComputePass) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_pipeline(
  self : RenderPass,
  pipeline : RenderPipeline,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_immediates(
  self : RenderPass,
  stages : ShaderStage,
  offset : UInt,
  data : Bytes,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::execute_bundles(
  self : RenderPass,
  bundles : Array[RenderBundle],
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_bind_group0(
  self : RenderPass,
  group : BindGroup,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_bind_group(
  self : RenderPass,
  index : UInt,
  group : BindGroup,
  dynamic_offsets : Array[UInt],
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_vertex_buffer(
  self : RenderPass,
  slot : UInt,
  buffer : Buffer,
  offset : UInt64,
  size : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_index_buffer_u16(
  self : RenderPass,
  buffer : Buffer,
  offset : UInt64,
  size : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_index_buffer_u32(
  self : RenderPass,
  buffer : Buffer,
  offset : UInt64,
  size : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_viewport(
  self : RenderPass,
  x : Float,
  y : Float,
  width : Float,
  height : Float,
  min_depth : Float,
  max_depth : Float,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_scissor_rect(
  self : RenderPass,
  x : UInt,
  y : UInt,
  width : UInt,
  height : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::draw(
  self : RenderPass,
  vertex_count : UInt,
  instance_count : UInt,
  first_vertex : UInt,
  first_instance : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::draw_indexed(
  self : RenderPass,
  index_count : UInt,
  instance_count : UInt,
  first_index : UInt,
  base_vertex : Int,
  first_instance : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::draw_indirect(
  self : RenderPass,
  indirect_buffer : Buffer,
  indirect_offset : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::draw_indexed_indirect(
  self : RenderPass,
  indirect_buffer : Buffer,
  indirect_offset : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::multi_draw_indirect(
  self : RenderPass,
  indirect_buffer : Buffer,
  indirect_offset : UInt64,
  count : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::multi_draw_indexed_indirect(
  self : RenderPass,
  indirect_buffer : Buffer,
  indirect_offset : UInt64,
  count : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::multi_draw_indirect_count(
  self : RenderPass,
  indirect_buffer : Buffer,
  indirect_offset : UInt64,
  count_buffer : Buffer,
  count_buffer_offset : UInt64,
  max_count : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::multi_draw_indexed_indirect_count(
  self : RenderPass,
  indirect_buffer : Buffer,
  indirect_offset : UInt64,
  count_buffer : Buffer,
  count_buffer_offset : UInt64,
  max_count : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::begin_occlusion_query(
  self : RenderPass,
  query_index : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::write_timestamp(
  self : RenderPass,
  query_set : QuerySet,
  query_index : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::begin_pipeline_statistics_query(
  self : RenderPass,
  query_set : QuerySet,
  query_index : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::end_pipeline_statistics_query(
  self : RenderPass,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::end_occlusion_query(self : RenderPass) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_stencil_reference(
  self : RenderPass,
  reference : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::end(self : RenderPass) -> Unit

///|
#declaration_only
declare pub fn RenderPass::release(self : RenderPass) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_label(self : RenderPass, label : String) -> Unit

///|
#declaration_only
declare pub fn RenderPass::insert_debug_marker(
  self : RenderPass,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::push_debug_group(
  self : RenderPass,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn RenderPass::pop_debug_group(self : RenderPass) -> Unit

///|
#declaration_only
declare pub fn RenderPass::set_blend_constant_rgba(
  self : RenderPass,
  r : Double,
  g : Double,
  b : Double,
  a : Double,
) -> Unit

///|
#declaration_only
declare pub fn Buffer::size(self : Buffer) -> UInt64

///|
#declaration_only
declare pub fn Buffer::usage_u64(self : Buffer) -> BufferUsage

///|
#declaration_only
declare pub fn Buffer::destroy(self : Buffer) -> Unit

///|
#declaration_only
declare pub fn Buffer::readback(
  self : Buffer,
  instance : Instance,
  offset : UInt64,
  size : UInt64,
) -> Bytes

///|
#declaration_only
declare pub fn Buffer::readback_or_raise(
  self : Buffer,
  instance : Instance,
  offset : UInt64,
  size : UInt64,
) -> Bytes raise BufferSyncError

///|
#declaration_only
declare pub fn Buffer::map_read_sync(
  self : Buffer,
  instance : Instance,
  offset : UInt64,
  size : UInt64,
) -> Bytes

///|
#declaration_only
declare pub fn Buffer::map_read_sync_or_raise(
  self : Buffer,
  instance : Instance,
  offset : UInt64,
  size : UInt64,
) -> Bytes raise BufferSyncError

///|
#declaration_only
declare pub fn Buffer::map_write_sync(
  self : Buffer,
  instance : Instance,
  offset : UInt64,
  data : Bytes,
) -> Unit

///|
#declaration_only
declare pub fn Buffer::map_write_sync_or_raise(
  self : Buffer,
  instance : Instance,
  offset : UInt64,
  data : Bytes,
) -> Unit raise BufferSyncError

///|
#declaration_only
declare pub fn Buffer::unmap(self : Buffer) -> Unit

///|
#declaration_only
declare pub fn Buffer::release(self : Buffer) -> Unit

///|
#declaration_only
declare pub fn ShaderModule::is_null(self : ShaderModule) -> Bool

///|
#declaration_only
declare pub fn ShaderModule::release(self : ShaderModule) -> Unit

///|
#declaration_only
declare pub fn Sampler::release(self : Sampler) -> Unit

///|
#declaration_only
declare pub fn TextureView::null() -> TextureView

///|
#declaration_only
declare pub fn TextureView::release(self : TextureView) -> Unit

///|
#declaration_only
declare pub fn Texture::destroy(self : Texture) -> Unit

///|
#declaration_only
declare pub fn Texture::release(self : Texture) -> Unit

///|
#declaration_only
declare pub fn SurfaceTexture::release(self : SurfaceTexture) -> Unit

///|
#declaration_only
declare pub fn Surface::release(self : Surface) -> Unit

///|
#declaration_only
declare pub fn RenderPipeline::release(self : RenderPipeline) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::set_pipeline(
  self : RenderBundleEncoder,
  pipeline : RenderPipeline,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::set_immediates(
  self : RenderBundleEncoder,
  stages : ShaderStage,
  offset : UInt,
  data : Bytes,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::draw(
  self : RenderBundleEncoder,
  vertex_count : UInt,
  instance_count : UInt,
  first_vertex : UInt,
  first_instance : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::draw_indexed(
  self : RenderBundleEncoder,
  index_count : UInt,
  instance_count : UInt,
  first_index : UInt,
  base_vertex : Int,
  first_instance : UInt,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::draw_indirect(
  self : RenderBundleEncoder,
  indirect_buffer : Buffer,
  indirect_offset : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::draw_indexed_indirect(
  self : RenderBundleEncoder,
  indirect_buffer : Buffer,
  indirect_offset : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::set_bind_group0(
  self : RenderBundleEncoder,
  group : BindGroup,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::set_bind_group(
  self : RenderBundleEncoder,
  index : UInt,
  group : BindGroup,
  dynamic_offsets : Array[UInt],
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::set_vertex_buffer(
  self : RenderBundleEncoder,
  slot : UInt,
  buffer : Buffer,
  offset : UInt64,
  size : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::set_index_buffer_u16(
  self : RenderBundleEncoder,
  buffer : Buffer,
  offset : UInt64,
  size : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::set_index_buffer_u32(
  self : RenderBundleEncoder,
  buffer : Buffer,
  offset : UInt64,
  size : UInt64,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::insert_debug_marker(
  self : RenderBundleEncoder,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::push_debug_group(
  self : RenderBundleEncoder,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::pop_debug_group(
  self : RenderBundleEncoder,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::finish(
  self : RenderBundleEncoder,
) -> RenderBundle

///|
#declaration_only
declare pub fn RenderBundleEncoder::release(self : RenderBundleEncoder) -> Unit

///|
#declaration_only
declare pub fn RenderBundle::release(self : RenderBundle) -> Unit

///|
#declaration_only
declare pub fn ComputePipeline::release(self : ComputePipeline) -> Unit

///|
#declaration_only
declare pub fn BindGroupLayout::release(self : BindGroupLayout) -> Unit

///|
#declaration_only
declare pub fn BindGroup::release(self : BindGroup) -> Unit

///|
#declaration_only
declare pub fn PipelineLayout::release(self : PipelineLayout) -> Unit

///|
#declaration_only
declare pub fn QuerySet::release(self : QuerySet) -> Unit

///|
#declaration_only
declare pub fn BindGroupLayout::set_label(
  self : BindGroupLayout,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn BindGroup::set_label(self : BindGroup, label : String) -> Unit

///|
#declaration_only
declare pub fn Buffer::set_label(self : Buffer, label : String) -> Unit

///|
#declaration_only
declare pub fn CommandBuffer::set_label(
  self : CommandBuffer,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn ComputePipeline::set_label(
  self : ComputePipeline,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn Device::set_label(self : Device, label : String) -> Unit

///|
#declaration_only
declare pub fn PipelineLayout::set_label(
  self : PipelineLayout,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn QuerySet::set_label(self : QuerySet, label : String) -> Unit

///|
#declaration_only
declare pub fn Queue::set_label(self : Queue, label : String) -> Unit

///|
#declaration_only
declare pub fn RenderBundleEncoder::set_label(
  self : RenderBundleEncoder,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn RenderBundle::set_label(
  self : RenderBundle,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn RenderPipeline::set_label(
  self : RenderPipeline,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn Sampler::set_label(self : Sampler, label : String) -> Unit

///|
#declaration_only
declare pub fn ShaderModule::set_label(
  self : ShaderModule,
  label : String,
) -> Unit

///|
#declaration_only
declare pub fn Surface::set_label(self : Surface, label : String) -> Unit

///|
#declaration_only
declare pub fn Texture::set_label(self : Texture, label : String) -> Unit

///|
#declaration_only
declare pub fn TextureView::set_label(
  self : TextureView,
  label : String,
) -> Unit