wgpu: update to v24.0.0

This commit is contained in:
Laytan Laats
2025-02-17 19:55:44 +01:00
parent f0b1357132
commit ae9388c013
20 changed files with 1804 additions and 1345 deletions
+2 -2
View File
@@ -11,8 +11,8 @@ Have a look at the `example/` directory for the rendering of a basic triangle.
## Getting the wgpu-native libraries ## Getting the wgpu-native libraries
For native support (not the browser), some libraries are required. Fortunately this is For native support (not the browser), some libraries are required. Fortunately this is
extremely easy, just download them from the [releases on GitHub](https://github.com/gfx-rs/wgpu-native/releases/tag/v22.1.0.1), extremely easy, just download them from the [releases on GitHub](https://github.com/gfx-rs/wgpu-native/releases/tag/v24.0.1),
the bindings are for v22.1.0.1 at the moment. the bindings are for v24.0.1 at the moment.
These are expected in the `lib` folder under the same name as they are released (just unzipped). These are expected in the `lib` folder under the same name as they are released (just unzipped).
By default it will look for a static release version (`wgpu-OS-ARCH-release.a|lib`), By default it will look for a static release version (`wgpu-OS-ARCH-release.a|lib`),
+9 -9
View File
@@ -35,18 +35,18 @@ main :: proc() {
} }
state.surface = os_get_surface(&state.os, state.instance) state.surface = os_get_surface(&state.os, state.instance)
wgpu.InstanceRequestAdapter(state.instance, &{ compatibleSurface = state.surface }, on_adapter, nil) wgpu.InstanceRequestAdapter(state.instance, &{ compatibleSurface = state.surface }, { callback = on_adapter })
on_adapter :: proc "c" (status: wgpu.RequestAdapterStatus, adapter: wgpu.Adapter, message: cstring, userdata: rawptr) { on_adapter :: proc "c" (status: wgpu.RequestAdapterStatus, adapter: wgpu.Adapter, message: string, userdata1: rawptr, userdata2: rawptr) {
context = state.ctx context = state.ctx
if status != .Success || adapter == nil { if status != .Success || adapter == nil {
fmt.panicf("request adapter failure: [%v] %s", status, message) fmt.panicf("request adapter failure: [%v] %s", status, message)
} }
state.adapter = adapter state.adapter = adapter
wgpu.AdapterRequestDevice(adapter, nil, on_device) wgpu.AdapterRequestDevice(adapter, nil, { callback = on_device })
} }
on_device :: proc "c" (status: wgpu.RequestDeviceStatus, device: wgpu.Device, message: cstring, userdata: rawptr) { on_device :: proc "c" (status: wgpu.RequestDeviceStatus, device: wgpu.Device, message: string, userdata1: rawptr, userdata2: rawptr) {
context = state.ctx context = state.ctx
if status != .Success || device == nil { if status != .Success || device == nil {
fmt.panicf("request device failure: [%v] %s", status, message) fmt.panicf("request device failure: [%v] %s", status, message)
@@ -82,8 +82,8 @@ main :: proc() {
}` }`
state.module = wgpu.DeviceCreateShaderModule(state.device, &{ state.module = wgpu.DeviceCreateShaderModule(state.device, &{
nextInChain = &wgpu.ShaderModuleWGSLDescriptor{ nextInChain = &wgpu.ShaderSourceWGSL{
sType = .ShaderModuleWGSLDescriptor, sType = .ShaderSourceWGSL,
code = shader, code = shader,
}, },
}) })
@@ -130,8 +130,8 @@ frame :: proc "c" (dt: f32) {
surface_texture := wgpu.SurfaceGetCurrentTexture(state.surface) surface_texture := wgpu.SurfaceGetCurrentTexture(state.surface)
switch surface_texture.status { switch surface_texture.status {
case .Success: case .SuccessOptimal, .SuccessSuboptimal:
// All good, could check for `surface_texture.suboptimal` here. // All good, could handle suboptimal here.
case .Timeout, .Outdated, .Lost: case .Timeout, .Outdated, .Lost:
// Skip this frame, and re-configure surface. // Skip this frame, and re-configure surface.
if surface_texture.texture != nil { if surface_texture.texture != nil {
@@ -139,7 +139,7 @@ frame :: proc "c" (dt: f32) {
} }
resize() resize()
return return
case .OutOfMemory, .DeviceLost: case .OutOfMemory, .DeviceLost, .Error:
// Fatal error // Fatal error
fmt.panicf("[triangle] get_current_texture status=%v", surface_texture.status) fmt.panicf("[triangle] get_current_texture status=%v", surface_texture.status)
} }
+1 -1
View File
@@ -23,7 +23,7 @@ os_init :: proc(os: ^OS) {
} }
os_run :: proc(os: ^OS) { os_run :: proc(os: ^OS) {
dt: f32 dt: f32
for !glfw.WindowShouldClose(os.window) { for !glfw.WindowShouldClose(os.window) {
start := time.tick_now() start := time.tick_now()
+2 -2
View File
@@ -30,8 +30,8 @@ os_get_surface :: proc(os: ^OS, instance: wgpu.Instance) -> wgpu.Surface {
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor{ &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromCanvasHTMLSelector{ nextInChain = &wgpu.SurfaceSourceCanvasHTMLSelector{
sType = .SurfaceDescriptorFromCanvasHTMLSelector, sType = .SurfaceSourceCanvasHTMLSelector,
selector = "#wgpu-canvas", selector = "#wgpu-canvas",
}, },
}, },
+9 -9
View File
@@ -35,18 +35,18 @@ main :: proc() {
} }
state.surface = os_get_surface(&state.os, state.instance) state.surface = os_get_surface(&state.os, state.instance)
wgpu.InstanceRequestAdapter(state.instance, &{ compatibleSurface = state.surface }, on_adapter, nil) wgpu.InstanceRequestAdapter(state.instance, &{ compatibleSurface = state.surface }, { callback = on_adapter })
on_adapter :: proc "c" (status: wgpu.RequestAdapterStatus, adapter: wgpu.Adapter, message: cstring, userdata: rawptr) { on_adapter :: proc "c" (status: wgpu.RequestAdapterStatus, adapter: wgpu.Adapter, message: string, userdata1, userdata2: rawptr) {
context = state.ctx context = state.ctx
if status != .Success || adapter == nil { if status != .Success || adapter == nil {
fmt.panicf("request adapter failure: [%v] %s", status, message) fmt.panicf("request adapter failure: [%v] %s", status, message)
} }
state.adapter = adapter state.adapter = adapter
wgpu.AdapterRequestDevice(adapter, nil, on_device) wgpu.AdapterRequestDevice(adapter, nil, { callback = on_device })
} }
on_device :: proc "c" (status: wgpu.RequestDeviceStatus, device: wgpu.Device, message: cstring, userdata: rawptr) { on_device :: proc "c" (status: wgpu.RequestDeviceStatus, device: wgpu.Device, message: string, userdata1, userdata2: rawptr) {
context = state.ctx context = state.ctx
if status != .Success || device == nil { if status != .Success || device == nil {
fmt.panicf("request device failure: [%v] %s", status, message) fmt.panicf("request device failure: [%v] %s", status, message)
@@ -82,8 +82,8 @@ main :: proc() {
}` }`
state.module = wgpu.DeviceCreateShaderModule(state.device, &{ state.module = wgpu.DeviceCreateShaderModule(state.device, &{
nextInChain = &wgpu.ShaderModuleWGSLDescriptor{ nextInChain = &wgpu.ShaderSourceWGSL{
sType = .ShaderModuleWGSLDescriptor, sType = .ShaderSourceWGSL,
code = shader, code = shader,
}, },
}) })
@@ -130,8 +130,8 @@ frame :: proc "c" (dt: f32) {
surface_texture := wgpu.SurfaceGetCurrentTexture(state.surface) surface_texture := wgpu.SurfaceGetCurrentTexture(state.surface)
switch surface_texture.status { switch surface_texture.status {
case .Success: case .SuccessOptimal, .SuccessSuboptimal:
// All good, could check for `surface_texture.suboptimal` here. // All good, could handle suboptimal here.
case .Timeout, .Outdated, .Lost: case .Timeout, .Outdated, .Lost:
// Skip this frame, and re-configure surface. // Skip this frame, and re-configure surface.
if surface_texture.texture != nil { if surface_texture.texture != nil {
@@ -139,7 +139,7 @@ frame :: proc "c" (dt: f32) {
} }
resize() resize()
return return
case .OutOfMemory, .DeviceLost: case .OutOfMemory, .DeviceLost, .Error:
// Fatal error // Fatal error
fmt.panicf("[triangle] get_current_texture status=%v", surface_texture.status) fmt.panicf("[triangle] get_current_texture status=%v", surface_texture.status)
} }
+2 -2
View File
@@ -30,8 +30,8 @@ os_get_surface :: proc(os: ^OS, instance: wgpu.Instance) -> wgpu.Surface {
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor{ &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromCanvasHTMLSelector{ nextInChain = &wgpu.SurfaceSourceCanvasHTMLSelector{
sType = .SurfaceDescriptorFromCanvasHTMLSelector, sType = .SurfaceSourceCanvasHTMLSelector,
selector = "#wgpu-canvas", selector = "#wgpu-canvas",
}, },
}, },
+2 -2
View File
@@ -12,9 +12,9 @@ GetSurface :: proc(instance: wgpu.Instance, window: glfw.WindowHandle) -> wgpu.S
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor{ &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromMetalLayer{ nextInChain = &wgpu.SurfaceSourceMetalLayer{
chain = wgpu.ChainedStruct{ chain = wgpu.ChainedStruct{
sType = .SurfaceDescriptorFromMetalLayer, sType = .SurfaceSourceMetalLayer,
}, },
layer = rawptr(metal_layer), layer = rawptr(metal_layer),
}, },
+4 -4
View File
@@ -11,9 +11,9 @@ GetSurface :: proc(instance: wgpu.Instance, window: glfw.WindowHandle) -> wgpu.S
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor{ &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromWaylandSurface{ nextInChain = &wgpu.SurfaceSourceWaylandSurface{
chain = { chain = {
sType = .SurfaceDescriptorFromWaylandSurface, sType = .SurfaceSourceWaylandSurface,
}, },
display = display, display = display,
surface = surface, surface = surface,
@@ -32,9 +32,9 @@ GetSurface :: proc(instance: wgpu.Instance, window: glfw.WindowHandle) -> wgpu.S
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor{ &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromXlibWindow{ nextInChain = &wgpu.SurfaceSourceXlibWindow{
chain = { chain = {
sType = .SurfaceDescriptorFromXlibWindow, sType = .SurfaceSourceXlibWindow,
}, },
display = display, display = display,
window = u64(window), window = u64(window),
+2 -2
View File
@@ -11,9 +11,9 @@ GetSurface :: proc(instance: wgpu.Instance, window: glfw.WindowHandle) -> wgpu.S
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor{ &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromWindowsHWND{ nextInChain = &wgpu.SurfaceSourceWindowsHWND{
chain = wgpu.ChainedStruct{ chain = wgpu.ChainedStruct{
sType = .SurfaceDescriptorFromWindowsHWND, sType = .SurfaceSourceWindowsHWND,
}, },
hinstance = rawptr(hinstance), hinstance = rawptr(hinstance),
hwnd = rawptr(hwnd), hwnd = rawptr(hwnd),
+2 -2
View File
@@ -14,9 +14,9 @@ GetSurface :: proc(instance: wgpu.Instance, window: ^sdl2.Window) -> wgpu.Surfac
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor{ &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromMetalLayer{ nextInChain = &wgpu.SurfaceSourceMetalLayer{
chain = wgpu.ChainedStruct{ chain = wgpu.ChainedStruct{
sType = .SurfaceDescriptorFromMetalLayer, sType = .SurfaceSourceMetalLayer,
}, },
layer = rawptr(metal_layer), layer = rawptr(metal_layer),
}, },
+4 -4
View File
@@ -14,9 +14,9 @@ GetSurface :: proc(instance: wgpu.Instance, window: ^sdl2.Window) -> wgpu.Surfac
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor{ &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromWaylandSurface{ nextInChain = &wgpu.SurfaceSourceWaylandSurface{
chain = { chain = {
sType = .SurfaceDescriptorFromWaylandSurface, sType = .SurfaceSourceWaylandSurface,
}, },
display = display, display = display,
surface = surface, surface = surface,
@@ -29,9 +29,9 @@ GetSurface :: proc(instance: wgpu.Instance, window: ^sdl2.Window) -> wgpu.Surfac
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor{ &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromXlibWindow{ nextInChain = &wgpu.SurfaceSourceXlibWindow{
chain = { chain = {
sType = .SurfaceDescriptorFromXlibWindow, sType = .SurfaceSourceXlibWindow,
}, },
display = display, display = display,
window = u64(window), window = u64(window),
+2 -2
View File
@@ -13,9 +13,9 @@ GetSurface :: proc(instance: wgpu.Instance, window: ^sdl2.Window) -> wgpu.Surfac
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor{ &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromWindowsHWND{ nextInChain = &wgpu.SurfaceSourceWindowsHWND{
chain = wgpu.ChainedStruct{ chain = wgpu.ChainedStruct{
sType = .SurfaceDescriptorFromWindowsHWND, sType = .SurfaceSourceWindowsHWND,
}, },
hinstance = rawptr(hinstance), hinstance = rawptr(hinstance),
hwnd = rawptr(hwnd), hwnd = rawptr(hwnd),
+9 -6
View File
@@ -4,14 +4,17 @@ import "vendor:sdl3"
import "vendor:wgpu" import "vendor:wgpu"
GetSurface :: proc(instance: wgpu.Instance, window: ^sdl3.Window) -> wgpu.Surface { GetSurface :: proc(instance: wgpu.Instance, window: ^sdl3.Window) -> wgpu.Surface {
view := sdl3.Metal_CreateView(window) view := sdl3.Metal_CreateView(window)
metal_layer := sdl3.Metal_GetLayer(view) layer := sdl3.Metal_GetLayer(view)
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor { &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromMetalLayer { nextInChain = &wgpu.SurfaceSourceMetalLayer{
chain = wgpu.ChainedStruct{sType = .SurfaceDescriptorFromMetalLayer}, chain = wgpu.ChainedStruct{
layer = metal_layer, sType = .SurfaceSourceMetalLayer,
},
layer = layer,
}, },
}, },
) )
+17 -34
View File
@@ -3,52 +3,35 @@ package wgpu_sdl3_glue
import "vendor:sdl3" import "vendor:sdl3"
import "vendor:wgpu" import "vendor:wgpu"
GetSurface :: proc(instance: wgpu.Instance, window: ^sdl3.Window) -> wgpu.Surface { GetSurface :: proc(instance: wgpu.Instance, window: ^sdl3.Window) -> wgpu.Surface {
switch sdl3.GetCurrentVideoDriver() { switch sdl3.GetCurrentVideoDriver() {
case "x11": case "wayland":
display := sdl3.GetPointerProperty(
sdl3.GetWindowProperties(window),
sdl3.PROP_WINDOW_X11_DISPLAY_POINTER,
nil,
)
x_window := sdl3.GetNumberProperty(
sdl3.GetWindowProperties(window),
sdl3.PROP_WINDOW_X11_WINDOW_NUMBER,
0,
)
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor { &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromXlibWindow { nextInChain = &wgpu.SurfaceSourceWaylandSurface{
chain = {sType = .SurfaceDescriptorFromXlibWindow}, chain = {
display = display, sType = .SurfaceSourceWaylandSurface,
window = u64(x_window), },
display = sdl3.GetPointerProperty(sdl3.GetWindowProperties(window), sdl3.PROP_WINDOW_WAYLAND_DISPLAY_POINTER, nil),
surface = sdl3.GetPointerProperty(sdl3.GetWindowProperties(window), sdl3.PROP_WINDOW_WAYLAND_SURFACE_POINTER, nil),
}, },
}, },
) )
case "wayland": case "x11":
display := sdl3.GetPointerProperty(
sdl3.GetWindowProperties(window),
sdl3.PROP_WINDOW_WAYLAND_DISPLAY_POINTER,
nil,
)
w_surface := sdl3.GetPointerProperty(
sdl3.GetWindowProperties(window),
sdl3.PROP_WINDOW_WAYLAND_SURFACE_POINTER,
nil,
)
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor { &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromWaylandSurface { nextInChain = &wgpu.SurfaceSourceXlibWindow{
chain = {sType = .SurfaceDescriptorFromWaylandSurface}, chain = {
display = display, sType = .SurfaceSourceXlibWindow,
surface = w_surface, },
display = sdl3.GetPointerProperty(sdl3.GetWindowProperties(window), sdl3.PROP_WINDOW_X11_DISPLAY_POINTER, nil),
window = cast(u64)sdl3.GetNumberProperty(sdl3.GetWindowProperties(window), sdl3.PROP_WINDOW_X11_WINDOW_NUMBER, 0),
}, },
}, },
) )
case: case:
panic("wgpu sdl3 glue: unsupported platform, expected Wayland or X11") panic("wgpu sdl3 glue: unsupported video driver, expected Wayland or X11")
} }
} }
+7 -17
View File
@@ -1,28 +1,18 @@
package wgpu_sdl3_glue package wgpu_sdl3_glue
import win "core:sys/windows"
import "vendor:sdl3" import "vendor:sdl3"
import "vendor:wgpu" import "vendor:wgpu"
GetSurface :: proc(instance: wgpu.Instance, window: ^sdl3.Window) -> wgpu.Surface { GetSurface :: proc(instance: wgpu.Instance, window: ^sdl3.Window) -> wgpu.Surface {
hwnd := sdl3.GetPointerProperty(
sdl3.GetWindowProperties(window),
sdl3.PROP_WINDOW_WIN32_HWND_POINTER,
nil,
)
hinstance := sdl3.GetPointerProperty(
sdl3.GetWindowProperties(window),
sdl3.PROP_WINDOW_WIN32_INSTANCE_POINTER,
nil,
)
return wgpu.InstanceCreateSurface( return wgpu.InstanceCreateSurface(
instance, instance,
&wgpu.SurfaceDescriptor { &wgpu.SurfaceDescriptor{
nextInChain = &wgpu.SurfaceDescriptorFromWindowsHWND { nextInChain = &wgpu.SurfaceSourceWindowsHWND{
chain = wgpu.ChainedStruct{sType = .SurfaceDescriptorFromWindowsHWND}, chain = wgpu.ChainedStruct{
hinstance = hinstance, sType = .SurfaceSourceWindowsHWND,
hwnd = hwnd, },
hinstance = sdl3.GetPointerProperty(sdl3.GetWindowProperties(window), sdl3.PROP_WINDOW_WIN32_INSTANCE_POINTER, nil),
hwnd = sdl3.GetPointerProperty(sdl3.GetWindowProperties(window), sdl3.PROP_WINDOW_WIN32_HWND_POINTER, nil),
}, },
}, },
) )
+1021 -664
View File
File diff suppressed because it is too large Load Diff
+582 -505
View File
File diff suppressed because it is too large Load Diff
+57
View File
@@ -0,0 +1,57 @@
#+build !js
package wgpu
@(link_prefix="wgpu")
foreign libwgpu {
@(link_name="wgpuGenerateReport")
RawGenerateReport :: proc(instance: Instance, report: ^GlobalReport) ---
@(link_name="wgpuInstanceEnumerateAdapters")
RawInstanceEnumerateAdapters :: proc(instance: Instance, /* NULLABLE */ options: /* const */ ^InstanceEnumerateAdapterOptions, adapters: [^]Adapter) -> uint ---
@(link_name="wgpuQueueSubmitForIndex")
RawQueueSubmitForIndex :: proc(queue: Queue, commandCount: uint, commands: [^]CommandBuffer) -> SubmissionIndex ---
// Returns true if the queue is empty, or false if there are more queue submissions still in flight.
DevicePoll :: proc(device: Device, wait: b32, /* NULLABLE */ wrappedSubmissionIndex: /* const */ ^SubmissionIndex = nil) -> b32 ---
DeviceCreateShaderModuleSpirV :: proc(device: Device, descriptor: ^ShaderModuleDescriptorSpirV) -> ShaderModule ---
SetLogCallback :: proc(callback: LogCallback, userdata: rawptr) ---
SetLogLevel :: proc(level: LogLevel) ---
GetVersion :: proc() -> u32 ---
RenderPassEncoderSetPushConstants :: proc(encoder: RenderPassEncoder, stages: ShaderStageFlags, offset: u32, sizeBytes: u32, data: rawptr) ---
ComputePassEncoderSetPushConstants :: proc(encoder: ComputePassEncoder, offset: u32, sizeBytes: u32, data: rawptr) ---
RenderBundleEncoderSetPushConstants :: proc(encoder: RenderBundleEncoder, stages: ShaderStageFlags, offset: u32, sizeBytes: u32, data: rawptr) ---
RenderPassEncoderMultiDrawIndirect :: proc(encoder: RenderPassEncoder, buffer: Buffer, offset: u64, count: u32) ---
RenderPassEncoderMultiDrawIndexedIndirect :: proc(encoder: RenderPassEncoder, buffer: Buffer, offset: u64, count: u32) ---
RenderPassEncoderMultiDrawIndirectCount :: proc(encoder: RenderPassEncoder, buffer: Buffer, offset: u64, count_buffer: Buffer, count_buffer_offset: u64, max_count: u32) ---
RenderPassEncoderMultiDrawIndexedIndirectCount :: proc(encoder: RenderPassEncoder, buffer: Buffer, offset: u64, count_buffer: Buffer, count_buffer_offset: u64, max_count: u32) ---
ComputePassEncoderBeginPipelineStatisticsQuery :: proc(computePassEncoder: ComputePassEncoder, querySet: QuerySet, queryIndex: u32) ---
ComputePassEncoderEndPipelineStatisticsQuery :: proc(computePassEncoder: ComputePassEncoder) ---
RenderPassEncoderBeginPipelineStatisticsQuery :: proc(renderPassEncoder: RenderPassEncoder, querySet: QuerySet, queryIndex: u32) ---
RenderPassEncoderEndPipelineStatisticsQuery :: proc(renderPassEncoder: RenderPassEncoder) ---
ComputePassEncoderWriteTimestamp :: proc(computePassEncoder: ComputePassEncoder, querySet: QuerySet, queryIndex: u32) ---
RenderPassEncoderWriteTimestamp :: proc(renderPassEncoder: RenderPassEncoder, querySet: QuerySet, queryIndex: u32) ---
}
GenerateReport :: proc "c" (instance: Instance) -> (report: GlobalReport) {
RawGenerateReport(instance, &report)
return
}
InstanceEnumerateAdapters :: proc(instance: Instance, options: ^InstanceEnumerateAdapterOptions = nil, allocator := context.allocator) -> (adapters: []Adapter) {
count := RawInstanceEnumerateAdapters(instance, options, nil)
adapters = make([]Adapter, count, allocator)
RawInstanceEnumerateAdapters(instance, options, raw_data(adapters))
return
}
QueueSubmitForIndex :: proc "c" (queue: Queue, commands: []CommandBuffer) -> SubmissionIndex {
return RawQueueSubmitForIndex(queue, len(commands), raw_data(commands))
}
+20 -28
View File
@@ -2,6 +2,9 @@ package wgpu
import "base:runtime" import "base:runtime"
BINDINGS_VERSION :: [4]u8{24, 0, 1, 0}
BINDINGS_VERSION_STRING :: "24.0.1"
LogLevel :: enum i32 { LogLevel :: enum i32 {
Off, Off,
Error, Error,
@@ -59,30 +62,21 @@ InstanceExtras :: struct {
flags: InstanceFlags, flags: InstanceFlags,
dx12ShaderCompiler: Dx12Compiler, dx12ShaderCompiler: Dx12Compiler,
gles3MinorVersion: Gles3MinorVersion, gles3MinorVersion: Gles3MinorVersion,
dxilPath: cstring, dxilPath: StringView,
dxcPath: cstring, dxcPath: StringView,
} }
DeviceExtras :: struct { DeviceExtras :: struct {
using chain: ChainedStruct, using chain: ChainedStruct,
tracePath: cstring, tracePath: StringView,
} }
NativeLimits :: struct { NativeLimits :: struct {
chain: ChainedStructOut,
maxPushConstantSize: u32, maxPushConstantSize: u32,
maxNonSamplerBindings: u32, maxNonSamplerBindings: u32,
} }
RequiredLimitsExtras :: struct {
using chain: ChainedStruct,
limits: NativeLimits,
}
SupportedLimitsExtras :: struct {
using chain: ChainedStructOut,
limits: NativeLimits,
}
PushConstantRange :: struct { PushConstantRange :: struct {
stages: ShaderStageFlags, stages: ShaderStageFlags,
start: u32, start: u32,
@@ -97,29 +91,29 @@ PipelineLayoutExtras :: struct {
SubmissionIndex :: distinct u64 SubmissionIndex :: distinct u64
WrappedSubmissionIndex :: struct {
queue: Queue,
submissionIndex: SubmissionIndex,
}
ShaderDefine :: struct { ShaderDefine :: struct {
name: cstring, name: StringView,
value: cstring, value: StringView,
} }
ShaderModuleGLSLDescriptor :: struct { ShaderModuleGLSLDescriptor :: struct {
using chain: ChainedStruct, using chain: ChainedStruct,
stage: ShaderStage, stage: ShaderStage,
code: cstring, code: StringView,
defineCount: uint, defineCount: uint,
defines: [^]ShaderDefine `fmt:"v,defineCount"`, defines: [^]ShaderDefine `fmt:"v,defineCount"`,
} }
ShaderModuleDescriptorSpirV :: struct {
label: StringView,
sourceSize: u32,
source: [^]u32 `fmt:"v,sourceSize"`,
}
RegistryReport :: struct { RegistryReport :: struct {
numAllocated: uint, numAllocated: uint,
numKeptFromUser: uint, numKeptFromUser: uint,
numReleasedFromUser: uint, numReleasedFromUser: uint,
numErrors: uint,
elementSize: uint, elementSize: uint,
} }
@@ -135,6 +129,7 @@ HubReport :: struct {
renderBundles: RegistryReport, renderBundles: RegistryReport,
renderPipelines: RegistryReport, renderPipelines: RegistryReport,
computePipelines: RegistryReport, computePipelines: RegistryReport,
pipelineCaches: RegistryReport,
querySets: RegistryReport, querySets: RegistryReport,
buffers: RegistryReport, buffers: RegistryReport,
textures: RegistryReport, textures: RegistryReport,
@@ -144,11 +139,7 @@ HubReport :: struct {
GlobalReport :: struct { GlobalReport :: struct {
surfaces: RegistryReport, surfaces: RegistryReport,
backendType: BackendType, hub: HubReport,
vulkan: HubReport,
metal: HubReport,
dx12: HubReport,
gl: HubReport,
} }
InstanceEnumerateAdapterOptions :: struct { InstanceEnumerateAdapterOptions :: struct {
@@ -182,7 +173,7 @@ SurfaceConfigurationExtras :: struct {
desiredMaximumFrameLatency: i32, desiredMaximumFrameLatency: i32,
} }
LogCallback :: #type proc "c" (level: LogLevel, message: cstring, userdata: rawptr) LogCallback :: #type proc "c" (level: LogLevel, message: StringView, userdata: rawptr)
// Wrappers // Wrappers
@@ -210,3 +201,4 @@ ConvertLogLevel :: proc {
ConvertOdinToWGPULogLevel, ConvertOdinToWGPULogLevel,
ConvertWGPUToOdinLogLevel, ConvertWGPUToOdinLogLevel,
} }