Skip to content

Commit 375095f

Browse files
feat(deno): accept GPUBuffer as GPUBindingResource
1 parent ce96254 commit 375095f

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

cts_runner/test.lst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// cargo xtask cts -- --list <selector>
44
// ```
55
unittests:*
6+
webgpu:api,operation,buffers,createBindGroup:buffer_binding_resource:*
67
webgpu:api,operation,command_buffer,basic:*
78
webgpu:api,operation,command_buffer,copyBufferToBuffer:*
89
fails-if(vulkan) webgpu:api,operation,command_buffer,copyTextureToTexture:copy_depth_stencil:format="depth24plus"
@@ -23,6 +24,8 @@ fails-if(vulkan) webgpu:api,operation,vertex_state,correctness:array_stride_zero
2324
fails-if(metal) webgpu:api,operation,vertex_state,correctness:setVertexBuffer_offset_and_attribute_offset:*
2425
fails-if(dx12) webgpu:api,validation,capability_checks,limits,maxBindGroups:setBindGroup,*
2526
webgpu:api,validation,createBindGroup:buffer,effective_buffer_binding_size:*
27+
// Fails because we coerce a size of 0 in `GPUDevice.createBindGroup(…)` to `buffer.size - offset`.
28+
// FAIL webgpu:api,validation,createBindGroup:buffer_offset_and_size_for_bind_groups_match:*
2629
webgpu:api,validation,encoding,beginComputePass:*
2730
webgpu:api,validation,encoding,beginRenderPass:*
2831
webgpu:api,validation,encoding,cmds,clearBuffer:*

deno_webgpu/bind_group.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ pub(crate) struct GPUBufferBinding {
9494
pub(crate) enum GPUBindingResource {
9595
Sampler(Ptr<GPUSampler>),
9696
TextureView(Ptr<GPUTextureView>),
97+
Buffer(Ptr<GPUBuffer>),
9798
BufferBinding(GPUBufferBinding),
9899
}
99100

@@ -125,6 +126,16 @@ impl<'a> WebIdlConverter<'a> for GPUBindingResource {
125126
)
126127
.map(Self::TextureView)
127128
})
129+
.or_else(|_| {
130+
<Ptr<GPUBuffer>>::convert(
131+
scope,
132+
value,
133+
prefix.clone(),
134+
context.borrowed(),
135+
options,
136+
)
137+
.map(Self::Buffer)
138+
})
128139
.or_else(|_| {
129140
GPUBufferBinding::convert(scope, value, prefix, context, options)
130141
.map(Self::BufferBinding)

deno_webgpu/device.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,13 @@ impl GPUDevice {
406406
GPUBindingResource::TextureView(texture_view) => {
407407
BindingResource::TextureView(texture_view.id)
408408
}
409+
GPUBindingResource::Buffer(buffer) => {
410+
BindingResource::Buffer(wgpu_core::binding_model::BufferBinding {
411+
buffer: buffer.id,
412+
offset: 0,
413+
size: NonZeroU64::new(buffer.size),
414+
})
415+
}
409416
GPUBindingResource::BufferBinding(buffer_binding) => {
410417
BindingResource::Buffer(wgpu_core::binding_model::BufferBinding {
411418
buffer: buffer_binding.buffer.id,

0 commit comments

Comments
 (0)