Skip to content

Commit

Permalink
[WebGPU] useResource: for render pipeline for resources from compute …
Browse files Browse the repository at this point in the history
…pipeline

https://bugs.webkit.org/show_bug.cgi?id=262584
<radar://116430663>

Reviewed by Dan Glastonbury.

Can't call useResource in the render pipeline for resources from the
compute pipeline.

* Source/WebGPU/WebGPU/BindGroup.h:
* Source/WebGPU/WebGPU/BindGroup.mm:
(WebGPU::metalRenderStage):
* Source/WebGPU/WebGPU/ComputePassEncoder.mm:
(WebGPU::ComputePassEncoder::setBindGroup):
* Source/WebGPU/WebGPU/RenderPassEncoder.mm:
(WebGPU::RenderPassEncoder::executeBundles):
(WebGPU::RenderPassEncoder::setBindGroup):

Canonical link: https://commits.webkit.org/268815@main
  • Loading branch information
mwyrzykowski committed Oct 4, 2023
1 parent 106c4aa commit 0d316ef
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 7 deletions.
1 change: 1 addition & 0 deletions Source/WebGPU/WebGPU/BindGroup.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class Device;
class BindGroup : public WGPUBindGroupImpl, public RefCounted<BindGroup> {
WTF_MAKE_FAST_ALLOCATED;
public:
static constexpr MTLRenderStages MTLRenderStageCompute = static_cast<MTLRenderStages>(0);
static Ref<BindGroup> create(id<MTLBuffer> vertexArgumentBuffer, id<MTLBuffer> fragmentArgumentBuffer, id<MTLBuffer> computeArgumentBuffer, Vector<BindableResources>&& resources, Device& device)
{
return adoptRef(*new BindGroup(vertexArgumentBuffer, fragmentArgumentBuffer, computeArgumentBuffer, WTFMove(resources), device));
Expand Down
2 changes: 1 addition & 1 deletion Source/WebGPU/WebGPU/BindGroup.mm
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ static MTLRenderStages metalRenderStage(ShaderStage shaderStage)
case ShaderStage::Fragment:
return MTLRenderStageFragment;
case ShaderStage::Compute:
return (MTLRenderStages)0;
return BindGroup::MTLRenderStageCompute;
}
}

Expand Down
6 changes: 4 additions & 2 deletions Source/WebGPU/WebGPU/ComputePassEncoder.mm
Original file line number Diff line number Diff line change
Expand Up @@ -177,8 +177,10 @@
if (dynamicOffsetCount)
m_bindGroupDynamicOffsets.add(groupIndex, Vector<uint32_t>(dynamicOffsets, dynamicOffsetCount));

for (const auto& resource : group.resources())
[m_computeCommandEncoder useResources:&resource.mtlResources[0] count:resource.mtlResources.size() usage:resource.usage];
for (const auto& resource : group.resources()) {
if (resource.renderStages == BindGroup::MTLRenderStageCompute)
[m_computeCommandEncoder useResources:&resource.mtlResources[0] count:resource.mtlResources.size() usage:resource.usage];
}

[m_computeCommandEncoder setBuffer:group.computeArgumentBuffer() offset:0 atIndex:groupIndex];
}
Expand Down
12 changes: 8 additions & 4 deletions Source/WebGPU/WebGPU/RenderPassEncoder.mm
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,10 @@
[m_renderCommandEncoder setFrontFacingWinding:renderBundle.frontFace()];
[m_renderCommandEncoder setDepthClipMode:renderBundle.depthClipMode()];

for (const auto& resource : renderBundle.resources())
[m_renderCommandEncoder useResources:&resource.mtlResources[0] count:resource.mtlResources.size() usage:resource.usage stages:resource.renderStages];
for (const auto& resource : renderBundle.resources()) {
if (resource.renderStages & (MTLRenderStageVertex | MTLRenderStageFragment))
[m_renderCommandEncoder useResources:&resource.mtlResources[0] count:resource.mtlResources.size() usage:resource.usage stages:resource.renderStages];
}

id<MTLIndirectCommandBuffer> icb = renderBundle.indirectCommandBuffer();
[m_renderCommandEncoder executeCommandsInBuffer:icb withRange:NSMakeRange(0, icb.size)];
Expand Down Expand Up @@ -251,8 +253,10 @@
if (dynamicOffsetCount)
m_bindGroupDynamicOffsets.add(groupIndex, Vector<uint32_t>(dynamicOffsets, dynamicOffsetCount));

for (const auto& resource : group.resources())
[m_renderCommandEncoder useResources:&resource.mtlResources[0] count:resource.mtlResources.size() usage:resource.usage stages:resource.renderStages];
for (const auto& resource : group.resources()) {
if (resource.renderStages & (MTLRenderStageVertex | MTLRenderStageFragment))
[m_renderCommandEncoder useResources:&resource.mtlResources[0] count:resource.mtlResources.size() usage:resource.usage stages:resource.renderStages];
}

[m_renderCommandEncoder setVertexBuffer:group.vertexArgumentBuffer() offset:0 atIndex:m_device->vertexBufferIndexForBindGroup(groupIndex)];
[m_renderCommandEncoder setFragmentBuffer:group.fragmentArgumentBuffer() offset:0 atIndex:groupIndex];
Expand Down

0 comments on commit 0d316ef

Please sign in to comment.