summaryrefslogtreecommitdiffstats
path: root/gfx/wgpu_bindings
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/wgpu_bindings')
-rw-r--r--gfx/wgpu_bindings/Cargo.toml16
-rw-r--r--gfx/wgpu_bindings/moz.yaml4
-rw-r--r--gfx/wgpu_bindings/src/client.rs108
-rw-r--r--gfx/wgpu_bindings/src/command.rs207
-rw-r--r--gfx/wgpu_bindings/src/lib.rs4
-rw-r--r--gfx/wgpu_bindings/src/server.rs22
6 files changed, 162 insertions, 199 deletions
diff --git a/gfx/wgpu_bindings/Cargo.toml b/gfx/wgpu_bindings/Cargo.toml
index d22253deed..233ea4c92a 100644
--- a/gfx/wgpu_bindings/Cargo.toml
+++ b/gfx/wgpu_bindings/Cargo.toml
@@ -17,7 +17,7 @@ default = []
[dependencies.wgc]
package = "wgpu-core"
git = "https://github.com/gfx-rs/wgpu"
-rev = "0c5bebca514eb06d9387f87666c1c658f3f673b4"
+rev = "d5d683d3c491ec8cd2f5cdb43ac61e526cb7c231"
# TODO: remove the replay feature on the next update containing https://github.com/gfx-rs/wgpu/pull/5182
features = ["serde", "replay", "trace", "strict_asserts", "wgsl", "api_log_info"]
@@ -26,37 +26,37 @@ features = ["serde", "replay", "trace", "strict_asserts", "wgsl", "api_log_info"
[target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.wgc]
package = "wgpu-core"
git = "https://github.com/gfx-rs/wgpu"
-rev = "0c5bebca514eb06d9387f87666c1c658f3f673b4"
+rev = "d5d683d3c491ec8cd2f5cdb43ac61e526cb7c231"
features = ["metal"]
# We want the wgpu-core Direct3D backends on Windows.
[target.'cfg(windows)'.dependencies.wgc]
package = "wgpu-core"
git = "https://github.com/gfx-rs/wgpu"
-rev = "0c5bebca514eb06d9387f87666c1c658f3f673b4"
+rev = "d5d683d3c491ec8cd2f5cdb43ac61e526cb7c231"
features = ["dx12"]
# We want the wgpu-core Vulkan backend on Linux and Windows.
[target.'cfg(any(windows, all(unix, not(any(target_os = "macos", target_os = "ios")))))'.dependencies.wgc]
package = "wgpu-core"
git = "https://github.com/gfx-rs/wgpu"
-rev = "0c5bebca514eb06d9387f87666c1c658f3f673b4"
+rev = "d5d683d3c491ec8cd2f5cdb43ac61e526cb7c231"
features = ["vulkan"]
[dependencies.wgt]
package = "wgpu-types"
git = "https://github.com/gfx-rs/wgpu"
-rev = "0c5bebca514eb06d9387f87666c1c658f3f673b4"
+rev = "d5d683d3c491ec8cd2f5cdb43ac61e526cb7c231"
[dependencies.wgh]
package = "wgpu-hal"
git = "https://github.com/gfx-rs/wgpu"
-rev = "0c5bebca514eb06d9387f87666c1c658f3f673b4"
-features = ["windows_rs"]
+rev = "d5d683d3c491ec8cd2f5cdb43ac61e526cb7c231"
+features = ["windows_rs", "oom_panic", "device_lost_panic", "internal_error_panic"]
[target.'cfg(windows)'.dependencies.d3d12]
git = "https://github.com/gfx-rs/wgpu"
-rev = "0c5bebca514eb06d9387f87666c1c658f3f673b4"
+rev = "d5d683d3c491ec8cd2f5cdb43ac61e526cb7c231"
[target.'cfg(windows)'.dependencies]
winapi = "0.3"
diff --git a/gfx/wgpu_bindings/moz.yaml b/gfx/wgpu_bindings/moz.yaml
index 2f688461b7..cd1aaaaf33 100644
--- a/gfx/wgpu_bindings/moz.yaml
+++ b/gfx/wgpu_bindings/moz.yaml
@@ -20,11 +20,11 @@ origin:
# Human-readable identifier for this version/release
# Generally "version NNN", "tag SSS", "bookmark SSS"
- release: 0c5bebca514eb06d9387f87666c1c658f3f673b4 (2024-04-02T20:12:28Z).
+ release: d5d683d3c491ec8cd2f5cdb43ac61e526cb7c231 (2024-05-06T10:53:03Z).
# Revision to pull in
# Must be a long or short commit SHA (long preferred)
- revision: 0c5bebca514eb06d9387f87666c1c658f3f673b4
+ revision: d5d683d3c491ec8cd2f5cdb43ac61e526cb7c231
license: ['MIT', 'Apache-2.0']
diff --git a/gfx/wgpu_bindings/src/client.rs b/gfx/wgpu_bindings/src/client.rs
index ae1a5ef5ea..15c41a2264 100644
--- a/gfx/wgpu_bindings/src/client.rs
+++ b/gfx/wgpu_bindings/src/client.rs
@@ -13,7 +13,6 @@ use crate::SwapChainId;
use wgc::{id, identity::IdentityManager};
use wgt::{Backend, TextureFormat};
-pub use wgc::command::{compute_ffi::*, render_ffi::*};
use wgc::id::markers;
use parking_lot::Mutex;
@@ -38,16 +37,38 @@ fn make_byte_buf<T: serde::Serialize>(data: &T) -> ByteBuf {
}
#[repr(C)]
+pub struct ConstantEntry {
+ key: RawString,
+ value: f64,
+}
+
+#[repr(C)]
pub struct ProgrammableStageDescriptor {
module: id::ShaderModuleId,
entry_point: RawString,
+ constants: *const ConstantEntry,
+ constants_length: usize,
}
impl ProgrammableStageDescriptor {
fn to_wgpu(&self) -> wgc::pipeline::ProgrammableStageDescriptor {
+ let constants = make_slice(self.constants, self.constants_length)
+ .iter()
+ .map(|ce| {
+ (
+ unsafe { std::ffi::CStr::from_ptr(ce.key) }
+ .to_str()
+ .unwrap()
+ .to_string(),
+ ce.value,
+ )
+ })
+ .collect();
wgc::pipeline::ProgrammableStageDescriptor {
module: self.module,
entry_point: cow_label(&self.entry_point),
+ constants: Cow::Owned(constants),
+ zero_initialize_workgroup_memory: true,
}
}
}
@@ -525,17 +546,9 @@ pub extern "C" fn wgpu_client_make_buffer_id(
}
#[no_mangle]
-pub extern "C" fn wgpu_client_free_buffer_id(
- client: &Client,
- id: id::BufferId,
-) {
+pub extern "C" fn wgpu_client_free_buffer_id(client: &Client, id: id::BufferId) {
let backend = id.backend();
- client
- .identities
- .lock()
- .select(backend)
- .buffers
- .free(id)
+ client.identities.lock().select(backend).buffers.free(id)
}
#[no_mangle]
@@ -569,20 +582,11 @@ pub extern "C" fn wgpu_client_create_texture(
}
#[no_mangle]
-pub extern "C" fn wgpu_client_free_texture_id(
- client: &Client,
- id: id::TextureId,
-) {
+pub extern "C" fn wgpu_client_free_texture_id(client: &Client, id: id::TextureId) {
let backend = id.backend();
- client
- .identities
- .lock()
- .select(backend)
- .textures
- .free(id)
+ client.identities.lock().select(backend).textures.free(id)
}
-
#[no_mangle]
pub extern "C" fn wgpu_client_create_texture_view(
client: &Client,
@@ -619,10 +623,7 @@ pub extern "C" fn wgpu_client_create_texture_view(
}
#[no_mangle]
-pub extern "C" fn wgpu_client_free_texture_view_id(
- client: &Client,
- id: id::TextureViewId,
-) {
+pub extern "C" fn wgpu_client_free_texture_view_id(client: &Client, id: id::TextureViewId) {
let backend = id.backend();
client
.identities
@@ -667,17 +668,9 @@ pub extern "C" fn wgpu_client_create_sampler(
}
#[no_mangle]
-pub extern "C" fn wgpu_client_free_sampler_id(
- client: &Client,
- id: id::SamplerId,
-) {
+pub extern "C" fn wgpu_client_free_sampler_id(client: &Client, id: id::SamplerId) {
let backend = id.backend();
- client
- .identities
- .lock()
- .select(backend)
- .samplers
- .free(id)
+ client.identities.lock().select(backend).samplers.free(id)
}
#[no_mangle]
@@ -692,24 +685,20 @@ pub extern "C" fn wgpu_client_make_encoder_id(
.select(backend)
.command_buffers
.process(backend)
- .transmute()
+ .into_command_encoder_id()
}
#[no_mangle]
-pub extern "C" fn wgpu_client_free_command_encoder_id(
- client: &Client,
- id: id::CommandEncoderId,
-) {
+pub extern "C" fn wgpu_client_free_command_encoder_id(client: &Client, id: id::CommandEncoderId) {
let backend = id.backend();
client
.identities
.lock()
.select(backend)
.command_buffers
- .free(id.transmute())
+ .free(id.into_command_buffer_id())
}
-
#[no_mangle]
pub extern "C" fn wgpu_client_create_command_encoder(
client: &Client,
@@ -726,7 +715,7 @@ pub extern "C" fn wgpu_client_create_command_encoder(
.select(backend)
.command_buffers
.process(backend)
- .transmute();
+ .into_command_encoder_id();
let action = DeviceAction::CreateCommandEncoder(id, desc.map_label(|_| label));
*bb = make_byte_buf(&action);
@@ -772,7 +761,6 @@ pub extern "C" fn wgpu_device_create_render_bundle_encoder(
}
}
-
#[no_mangle]
pub unsafe extern "C" fn wgpu_render_bundle_encoder_destroy(
pass: *mut wgc::command::RenderBundleEncoder,
@@ -829,10 +817,7 @@ pub unsafe extern "C" fn wgpu_client_create_render_bundle_error(
}
#[no_mangle]
-pub extern "C" fn wgpu_client_free_render_bundle_id(
- client: &Client,
- id: id::RenderBundleId,
-) {
+pub extern "C" fn wgpu_client_free_render_bundle_id(client: &Client, id: id::RenderBundleId) {
let backend = id.backend();
client
.identities
@@ -1160,10 +1145,7 @@ pub unsafe extern "C" fn wgpu_client_create_pipeline_layout(
}
#[no_mangle]
-pub extern "C" fn wgpu_client_free_pipeline_layout_id(
- client: &Client,
- id: id::PipelineLayoutId,
-) {
+pub extern "C" fn wgpu_client_free_pipeline_layout_id(client: &Client, id: id::PipelineLayoutId) {
let backend = id.backend();
client
.identities
@@ -1221,10 +1203,7 @@ pub unsafe extern "C" fn wgpu_client_create_bind_group(
}
#[no_mangle]
-pub extern "C" fn wgpu_client_free_bind_group_id(
- client: &Client,
- id: id::BindGroupId,
-) {
+pub extern "C" fn wgpu_client_free_bind_group_id(client: &Client, id: id::BindGroupId) {
let backend = id.backend();
client
.identities
@@ -1249,10 +1228,7 @@ pub extern "C" fn wgpu_client_make_shader_module_id(
}
#[no_mangle]
-pub extern "C" fn wgpu_client_free_shader_module_id(
- client: &Client,
- id: id::ShaderModuleId,
-) {
+pub extern "C" fn wgpu_client_free_shader_module_id(client: &Client, id: id::ShaderModuleId) {
let backend = id.backend();
client
.identities
@@ -1304,10 +1280,7 @@ pub unsafe extern "C" fn wgpu_client_create_compute_pipeline(
}
#[no_mangle]
-pub extern "C" fn wgpu_client_free_compute_pipeline_id(
- client: &Client,
- id: id::ComputePipelineId,
-) {
+pub extern "C" fn wgpu_client_free_compute_pipeline_id(client: &Client, id: id::ComputePipelineId) {
let backend = id.backend();
client
.identities
@@ -1361,10 +1334,7 @@ pub unsafe extern "C" fn wgpu_client_create_render_pipeline(
}
#[no_mangle]
-pub extern "C" fn wgpu_client_free_render_pipeline_id(
- client: &Client,
- id: id::RenderPipelineId,
-) {
+pub extern "C" fn wgpu_client_free_render_pipeline_id(client: &Client, id: id::RenderPipelineId) {
let backend = id.backend();
client
.identities
diff --git a/gfx/wgpu_bindings/src/command.rs b/gfx/wgpu_bindings/src/command.rs
index acba975c13..51da50f3a2 100644
--- a/gfx/wgpu_bindings/src/command.rs
+++ b/gfx/wgpu_bindings/src/command.rs
@@ -4,11 +4,18 @@
use crate::{id, RawString};
use std::{borrow::Cow, ffi, slice};
-use wgc::{command::{compute_ffi, render_ffi, ComputePassDescriptor, ComputePassTimestampWrites, RenderPassColorAttachment, RenderPassDepthStencilAttachment, RenderPassDescriptor, RenderPassTimestampWrites}, id::CommandEncoderId};
+use wgc::{
+ command::{
+ compute_commands as compute_ffi, render_commands as render_ffi, ComputePassDescriptor,
+ ComputePassTimestampWrites, RenderPassColorAttachment, RenderPassDepthStencilAttachment,
+ RenderPassDescriptor, RenderPassTimestampWrites,
+ },
+ id::CommandEncoderId,
+};
use wgt::{BufferAddress, BufferSize, Color, DynamicOffset, IndexFormat};
-use serde::{Serialize, Deserialize};
use arrayvec::ArrayVec;
+use serde::{Deserialize, Serialize};
/// A stream of commands for a render pass or compute pass.
///
@@ -22,8 +29,7 @@ use arrayvec::ArrayVec;
/// [`SetBindGroup`]: RenderCommand::SetBindGroup
/// [`InsertDebugMarker`]: RenderCommand::InsertDebugMarker
#[doc(hidden)]
-#[derive(Debug)]
-#[derive(serde::Serialize, serde::Deserialize)]
+#[derive(Debug, serde::Serialize, serde::Deserialize)]
pub struct BasePass<C> {
pub label: Option<String>,
@@ -90,8 +96,7 @@ impl RecordedComputePass {
}
#[doc(hidden)]
-#[derive(Clone, Copy, Debug)]
-#[derive(serde::Serialize, serde::Deserialize)]
+#[derive(Clone, Copy, Debug, serde::Serialize, serde::Deserialize)]
pub enum RenderCommand {
SetBindGroup {
index: u32,
@@ -114,11 +119,19 @@ pub enum RenderCommand {
SetBlendConstant(Color),
SetStencilReference(u32),
SetViewport {
- x: f32, y: f32, w: f32, h: f32,
+ x: f32,
+ y: f32,
+ w: f32,
+ h: f32,
depth_min: f32,
depth_max: f32,
},
- SetScissor { x: u32, y: u32, w: u32, h: u32 },
+ SetScissor {
+ x: u32,
+ y: u32,
+ w: u32,
+ h: u32,
+ },
Draw {
vertex_count: u32,
instance_count: u32,
@@ -173,8 +186,7 @@ pub enum RenderCommand {
}
#[doc(hidden)]
-#[derive(Clone, Copy, Debug)]
-#[derive(serde::Serialize, serde::Deserialize)]
+#[derive(Clone, Copy, Debug, serde::Serialize, serde::Deserialize)]
pub enum ComputeCommand {
SetBindGroup {
index: u32,
@@ -219,7 +231,8 @@ pub unsafe extern "C" fn wgpu_recorded_render_pass_set_bind_group(
offsets: *const DynamicOffset,
offset_length: usize,
) {
- pass.base.dynamic_offsets
+ pass.base
+ .dynamic_offsets
.extend_from_slice(unsafe { slice::from_raw_parts(offsets, offset_length) });
pass.base.commands.push(RenderCommand::SetBindGroup {
@@ -272,14 +285,20 @@ pub extern "C" fn wgpu_recorded_render_pass_set_index_buffer(
}
#[no_mangle]
-pub extern "C" fn wgpu_recorded_render_pass_set_blend_constant(pass: &mut RecordedRenderPass, color: &Color) {
+pub extern "C" fn wgpu_recorded_render_pass_set_blend_constant(
+ pass: &mut RecordedRenderPass,
+ color: &Color,
+) {
pass.base
.commands
.push(RenderCommand::SetBlendConstant(*color));
}
#[no_mangle]
-pub extern "C" fn wgpu_recorded_render_pass_set_stencil_reference(pass: &mut RecordedRenderPass, value: u32) {
+pub extern "C" fn wgpu_recorded_render_pass_set_stencil_reference(
+ pass: &mut RecordedRenderPass,
+ value: u32,
+) {
pass.base
.commands
.push(RenderCommand::SetStencilReference(value));
@@ -296,7 +315,10 @@ pub extern "C" fn wgpu_recorded_render_pass_set_viewport(
depth_max: f32,
) {
pass.base.commands.push(RenderCommand::SetViewport {
- x, y, w, h,
+ x,
+ y,
+ w,
+ h,
depth_min,
depth_max,
});
@@ -534,7 +556,9 @@ pub extern "C" fn wgpu_recorded_render_pass_begin_pipeline_statistics_query(
}
#[no_mangle]
-pub extern "C" fn wgpu_recorded_render_pass_end_pipeline_statistics_query(pass: &mut RecordedRenderPass) {
+pub extern "C" fn wgpu_recorded_render_pass_end_pipeline_statistics_query(
+ pass: &mut RecordedRenderPass,
+) {
pass.base
.commands
.push(RenderCommand::EndPipelineStatisticsQuery);
@@ -550,8 +574,7 @@ pub unsafe extern "C" fn wgpu_recorded_render_pass_execute_bundles(
render_bundle_ids: *const id::RenderBundleId,
render_bundle_ids_length: usize,
) {
- for &bundle_id in
- unsafe { slice::from_raw_parts(render_bundle_ids, render_bundle_ids_length) }
+ for &bundle_id in unsafe { slice::from_raw_parts(render_bundle_ids, render_bundle_ids_length) }
{
pass.base
.commands
@@ -571,7 +594,8 @@ pub unsafe extern "C" fn wgpu_recorded_compute_pass_set_bind_group(
offsets: *const DynamicOffset,
offset_length: usize,
) {
- pass.base.dynamic_offsets
+ pass.base
+ .dynamic_offsets
.extend_from_slice(unsafe { slice::from_raw_parts(offsets, offset_length) });
pass.base.commands.push(ComputeCommand::SetBindGroup {
@@ -684,7 +708,9 @@ pub extern "C" fn wgpu_recorded_compute_pass_begin_pipeline_statistics_query(
}
#[no_mangle]
-pub extern "C" fn wgpu_recorded_compute_pass_end_pipeline_statistics_query(pass: &mut RecordedComputePass) {
+pub extern "C" fn wgpu_recorded_compute_pass_end_pipeline_statistics_query(
+ pass: &mut RecordedComputePass,
+) {
pass.base
.commands
.push(ComputeCommand::EndPipelineStatisticsQuery);
@@ -692,9 +718,8 @@ pub extern "C" fn wgpu_recorded_compute_pass_end_pipeline_statistics_query(pass:
pub fn replay_render_pass(
id: CommandEncoderId,
- src_pass: &RecordedRenderPass
+ src_pass: &RecordedRenderPass,
) -> wgc::command::RenderPass {
-
let mut dst_pass = wgc::command::RenderPass::new(
id,
&wgc::command::RenderPassDescriptor {
@@ -726,15 +751,12 @@ pub fn replay_render_pass(
bind_group_id,
} => {
let offsets = dynamic_offsets(num_dynamic_offsets);
- unsafe {
- render_ffi::wgpu_render_pass_set_bind_group(
- &mut dst_pass,
- index,
- bind_group_id,
- offsets.as_ptr(),
- offsets.len(),
- );
- }
+ render_ffi::wgpu_render_pass_set_bind_group(
+ &mut dst_pass,
+ index,
+ bind_group_id,
+ offsets,
+ );
}
RenderCommand::SetPipeline(pipeline_id) => {
render_ffi::wgpu_render_pass_set_pipeline(&mut dst_pass, pipeline_id);
@@ -750,7 +772,7 @@ pub fn replay_render_pass(
buffer_id,
index_format,
offset,
- size
+ size,
);
}
RenderCommand::SetVertexBuffer {
@@ -758,15 +780,13 @@ pub fn replay_render_pass(
buffer_id,
offset,
size,
- } => {
- render_ffi::wgpu_render_pass_set_vertex_buffer(
- &mut dst_pass,
- slot,
- buffer_id,
- offset,
- size
- )
- }
+ } => render_ffi::wgpu_render_pass_set_vertex_buffer(
+ &mut dst_pass,
+ slot,
+ buffer_id,
+ offset,
+ size,
+ ),
RenderCommand::SetBlendConstant(ref color) => {
render_ffi::wgpu_render_pass_set_blend_constant(&mut dst_pass, color);
}
@@ -774,22 +794,25 @@ pub fn replay_render_pass(
render_ffi::wgpu_render_pass_set_stencil_reference(&mut dst_pass, value);
}
RenderCommand::SetViewport {
- x, y, w, h,
+ x,
+ y,
+ w,
+ h,
depth_min,
depth_max,
} => {
render_ffi::wgpu_render_pass_set_viewport(
&mut dst_pass,
- x, y, w, h,
+ x,
+ y,
+ w,
+ h,
depth_min,
depth_max,
);
}
RenderCommand::SetScissor { x, y, w, h } => {
- render_ffi::wgpu_render_pass_set_scissor_rect(
- &mut dst_pass,
- x, y, w, h
- );
+ render_ffi::wgpu_render_pass_set_scissor_rect(&mut dst_pass, x, y, w, h);
}
RenderCommand::Draw {
vertex_count,
@@ -834,17 +857,17 @@ pub fn replay_render_pass(
offset,
count,
),
- (false, None) => render_ffi::wgpu_render_pass_draw_indirect(
- &mut dst_pass,
- buffer_id,
- offset,
- ),
- (true, Some(count)) => render_ffi::wgpu_render_pass_multi_draw_indexed_indirect(
- &mut dst_pass,
- buffer_id,
- offset,
- count,
- ),
+ (false, None) => {
+ render_ffi::wgpu_render_pass_draw_indirect(&mut dst_pass, buffer_id, offset)
+ }
+ (true, Some(count)) => {
+ render_ffi::wgpu_render_pass_multi_draw_indexed_indirect(
+ &mut dst_pass,
+ buffer_id,
+ offset,
+ count,
+ )
+ }
(true, None) => render_ffi::wgpu_render_pass_draw_indexed_indirect(
&mut dst_pass,
buffer_id,
@@ -882,28 +905,16 @@ pub fn replay_render_pass(
}
RenderCommand::PushDebugGroup { color, len } => {
let label = strings(len);
- let label = std::ffi::CString::new(label).unwrap();
- unsafe {
- render_ffi::wgpu_render_pass_push_debug_group(
- &mut dst_pass,
- label.as_ptr(),
- color
- );
- }
+ let label = std::str::from_utf8(label).unwrap();
+ render_ffi::wgpu_render_pass_push_debug_group(&mut dst_pass, label, color);
}
RenderCommand::PopDebugGroup => {
render_ffi::wgpu_render_pass_pop_debug_group(&mut dst_pass);
}
RenderCommand::InsertDebugMarker { color, len } => {
let label = strings(len);
- let label = std::ffi::CString::new(label).unwrap();
- unsafe {
- render_ffi::wgpu_render_pass_insert_debug_marker(
- &mut dst_pass,
- label.as_ptr(),
- color,
- );
- }
+ let label = std::str::from_utf8(label).unwrap();
+ render_ffi::wgpu_render_pass_insert_debug_marker(&mut dst_pass, label, color);
}
RenderCommand::WriteTimestamp {
query_set_id,
@@ -916,10 +927,7 @@ pub fn replay_render_pass(
);
}
RenderCommand::BeginOcclusionQuery { query_index } => {
- render_ffi::wgpu_render_pass_begin_occlusion_query(
- &mut dst_pass,
- query_index
- );
+ render_ffi::wgpu_render_pass_begin_occlusion_query(&mut dst_pass, query_index);
}
RenderCommand::EndOcclusionQuery => {
render_ffi::wgpu_render_pass_end_occlusion_query(&mut dst_pass);
@@ -938,13 +946,7 @@ pub fn replay_render_pass(
render_ffi::wgpu_render_pass_end_pipeline_statistics_query(&mut dst_pass);
}
RenderCommand::ExecuteBundle(bundle_id) => {
- unsafe {
- render_ffi::wgpu_render_pass_execute_bundles(
- &mut dst_pass,
- &bundle_id,
- 1,
- );
- }
+ render_ffi::wgpu_render_pass_execute_bundles(&mut dst_pass, &[bundle_id]);
}
}
}
@@ -954,7 +956,7 @@ pub fn replay_render_pass(
pub fn replay_compute_pass(
id: CommandEncoderId,
- src_pass: &RecordedComputePass
+ src_pass: &RecordedComputePass,
) -> wgc::command::ComputePass {
let mut dst_pass = wgc::command::ComputePass::new(
id,
@@ -984,15 +986,12 @@ pub fn replay_compute_pass(
bind_group_id,
} => {
let offsets = dynamic_offsets(num_dynamic_offsets);
- unsafe {
- compute_ffi::wgpu_compute_pass_set_bind_group(
- &mut dst_pass,
- index,
- bind_group_id,
- offsets.as_ptr(),
- offsets.len()
- );
- }
+ compute_ffi::wgpu_compute_pass_set_bind_group(
+ &mut dst_pass,
+ index,
+ bind_group_id,
+ offsets,
+ );
}
ComputeCommand::SetPipeline(pipeline_id) => {
compute_ffi::wgpu_compute_pass_set_pipeline(&mut dst_pass, pipeline_id)
@@ -1009,28 +1008,16 @@ pub fn replay_compute_pass(
}
ComputeCommand::PushDebugGroup { color, len } => {
let label = strings(len);
- let label = std::ffi::CString::new(label).unwrap();
- unsafe {
- compute_ffi::wgpu_compute_pass_push_debug_group(
- &mut dst_pass,
- label.as_ptr(),
- color
- );
- }
+ let label = std::str::from_utf8(label).unwrap();
+ compute_ffi::wgpu_compute_pass_push_debug_group(&mut dst_pass, label, color);
}
ComputeCommand::PopDebugGroup => {
compute_ffi::wgpu_compute_pass_pop_debug_group(&mut dst_pass);
}
ComputeCommand::InsertDebugMarker { color, len } => {
let label = strings(len);
- let label = std::ffi::CString::new(label).unwrap();
- unsafe {
- compute_ffi::wgpu_compute_pass_insert_debug_marker(
- &mut dst_pass,
- label.as_ptr(),
- color,
- );
- }
+ let label = std::str::from_utf8(label).unwrap();
+ compute_ffi::wgpu_compute_pass_insert_debug_marker(&mut dst_pass, label, color);
}
ComputeCommand::WriteTimestamp {
query_set_id,
diff --git a/gfx/wgpu_bindings/src/lib.rs b/gfx/wgpu_bindings/src/lib.rs
index 6e6b79c991..660b15bdc1 100644
--- a/gfx/wgpu_bindings/src/lib.rs
+++ b/gfx/wgpu_bindings/src/lib.rs
@@ -5,12 +5,10 @@
use crate::error::ErrorBufferType;
use wgc::id;
-pub use wgc::command::{compute_ffi::*, render_ffi::*};
-
pub mod client;
+pub mod command;
pub mod error;
pub mod server;
-pub mod command;
pub use wgc::device::trace::Command as CommandEncoderAction;
diff --git a/gfx/wgpu_bindings/src/server.rs b/gfx/wgpu_bindings/src/server.rs
index 1cedf35ea5..51936617fe 100644
--- a/gfx/wgpu_bindings/src/server.rs
+++ b/gfx/wgpu_bindings/src/server.rs
@@ -303,7 +303,7 @@ pub unsafe extern "C" fn wgpu_server_adapter_request_device(
// TODO: in https://github.com/gfx-rs/wgpu/pull/3626/files#diff-033343814319f5a6bd781494692ea626f06f6c3acc0753a12c867b53a646c34eR97
// which introduced the queue id parameter, the queue id is also the device id. I don't know how applicable this is to
// other situations (this one in particular).
- let (_, _, error) = gfx_select!(self_id => global.adapter_request_device(self_id, &desc, trace_path, Some(new_id), Some(new_id.transmute())));
+ let (_, _, error) = gfx_select!(self_id => global.adapter_request_device(self_id, &desc, trace_path, Some(new_id), Some(new_id.into_queue_id())));
if let Some(err) = error {
error_buf.init(err);
}
@@ -342,7 +342,13 @@ impl ShaderModuleCompilationMessage {
let utf16_offset;
let utf16_length;
- if let Some(location) = error.location(source) {
+ let location = match error {
+ CreateShaderModuleError::Parsing(e) => e.inner.location(source),
+ CreateShaderModuleError::Validation(e) => e.inner.location(source),
+ _ => None,
+ };
+
+ if let Some(location) = location {
let len_utf16 = |s: &str| s.chars().map(|c| c.len_utf16() as u64).sum();
let start = location.offset as usize;
let end = start + location.length as usize;
@@ -945,11 +951,13 @@ impl Global {
base,
timestamp_writes,
} => {
- if let Err(err) = self.command_encoder_run_compute_pass_impl::<A>(
- self_id,
- base.as_ref(),
- timestamp_writes.as_ref(),
- ) {
+ if let Err(err) = self
+ .command_encoder_run_compute_pass_with_unresolved_commands::<A>(
+ self_id,
+ base.as_ref(),
+ timestamp_writes.as_ref(),
+ )
+ {
error_buf.init(err);
}
}