Skip to content

Commit

Permalink
fix(ext/webgpu): Allow depthClearValue to be undefined when `depthL…
Browse files Browse the repository at this point in the history
…oadOp` is not "clear" (#23850)
  • Loading branch information
chirsz-ever authored and bartlomieju committed May 21, 2024
1 parent a454585 commit c6f79ae
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
6 changes: 4 additions & 2 deletions ext/webgpu/command_encoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 79,7 @@ pub struct GpuRenderPassColorAttachment {
#[serde(rename_all = "camelCase")]
pub struct GpuRenderPassDepthStencilAttachment {
view: ResourceId,
depth_clear_value: f32,
depth_clear_value: Option<f32>,
depth_load_op: Option<wgpu_core::command::LoadOp>,
depth_store_op: Option<wgpu_core::command::StoreOp>,
depth_read_only: bool,
Expand Down Expand Up @@ -168,7 168,9 @@ pub fn op_webgpu_command_encoder_begin_render_pass(
store_op: attachment
.depth_store_op
.unwrap_or(wgpu_core::command::StoreOp::Store),
clear_value: attachment.depth_clear_value,
// In "01_webgpu.js", `depthLoadOp` is cheked to ensure its value is not "clear"
// when `depthClearValue` is undefined, so the default 0.0 doesn't matter.
clear_value: attachment.depth_clear_value.unwrap_or(0.0),
read_only: attachment.depth_read_only,
},
stencil: wgpu_core::command::PassChannel {
Expand Down
30 changes: 30 additions & 0 deletions tests/unit/webgpu_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -496,6 496,36 @@ Deno.test({
device.destroy();
});

Deno.test({
ignore: isWsl || isLinuxOrMacCI,
}, async function beginRenderPassWithoutDepthClearValue() {
const adapter = await navigator.gpu.requestAdapter();
assert(adapter);
const device = await adapter.requestDevice();
assert(device);

const encoder = device.createCommandEncoder();

const depthTexture = device.createTexture({
size: [256, 256],
format: "depth32float",
usage: GPUTextureUsage.RENDER_ATTACHMENT,
});
const depthView = depthTexture.createView();

const renderPass = encoder.beginRenderPass({
colorAttachments: [],
depthStencilAttachment: {
view: depthView,
depthLoadOp: "load",
},
});

assert(renderPass);

device.destroy();
});

async function checkIsWsl() {
return Deno.build.os === "linux" && await hasMicrosoftProcVersion();

Expand Down

0 comments on commit c6f79ae

Please sign in to comment.