Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WebGPU] Implement RenderBundleEncoder which appears to be MTLIndirectCommandBuffer #7652

Conversation

mwyrzykowski
Copy link
Contributor

@mwyrzykowski mwyrzykowski commented Dec 15, 2022

2022497

[WebGPU] Implement RenderBundleEncoder which appears to be MTLIndirectCommandBuffer
https://bugs.webkit.org/show_bug.cgi?id=249257
<radar://103318351>

Reviewed by Dean Jackson.

Creation of the MTLIndirectCommandBuffer is deferred as we need to
tell Metal the maximum number of vertex and fragment buffers prior to creating the ICB,
along with the number of draw commands.

* Source/WebGPU/WebGPU.xcodeproj/project.pbxproj:
* Source/WebGPU/WebGPU/BindGroup.h:
(WebGPU::BindGroup::create):
(WebGPU::BindGroup::resources const):
* Source/WebGPU/WebGPU/BindGroup.mm:
(WebGPU::Device::createBindGroup):
(WebGPU::BindGroup::BindGroup):
Renamed struct moved to its own header.

* Source/WebGPU/WebGPU/BindableResource.h: Copied from Source/WebGPU/WebGPU/RenderBundle.mm.
Moved from BindGroup.h

* Source/WebGPU/WebGPU/RenderBundle.h:
(WebGPU::RenderBundle::create):
(WebGPU::RenderBundle::resources const):
* Source/WebGPU/WebGPU/RenderBundle.mm:
(WebGPU::RenderBundle::RenderBundle):
Cache the ICB and required resources.

* Source/WebGPU/WebGPU/RenderBundleEncoder.h:
(WebGPU::RenderBundleEncoder::create):
* Source/WebGPU/WebGPU/RenderBundleEncoder.mm:
(WebGPU::Device::createRenderBundleEncoder):
(WebGPU::RenderBundleEncoder::RenderBundleEncoder):
(WebGPU::RenderBundleEncoder::currentRenderCommand):
(WebGPU::RenderBundleEncoder::draw):
(WebGPU::RenderBundleEncoder::drawIndexed):
(WebGPU::RenderBundleEncoder::drawIndexedIndirect):
(WebGPU::RenderBundleEncoder::drawIndirect):
(WebGPU::RenderBundleEncoder::finish):
(WebGPU::RenderBundleEncoder::setBindGroup):
(WebGPU::RenderBundleEncoder::setIndexBuffer):
(WebGPU::RenderBundleEncoder::setPipeline):
(WebGPU::RenderBundleEncoder::setVertexBuffer):
Implement pipeline functions.

* Source/WebGPU/WebGPU/RenderPassEncoder.mm:
(WebGPU::RenderPassEncoder::executeBundles):
* Source/WebGPU/WebGPU/RenderPipeline.mm:
(WebGPU::Device::createRenderPipeline):
* Websites/webkit.org/demos/webgpu/indirect-command-buffer-textured-cube.html: Added.
* Websites/webkit.org/demos/webgpu/scripts/indirect-command-buffer-textured-cube.js: Added.
(async helloCube.frameUpdate):
(async helloCube):
Add ICB demo test.

* Websites/webkit.org/demos/webgpu/scripts/hello-triangle-msaa.js:
(async helloTriangle):
* Websites/webkit.org/demos/webgpu/scripts/instanced-textured-cube.js:
Miscellaneous test fixes observed running under the debug metal device.

Canonical link: https://commits.webkit.org/258226@main

1d756e7

Misc iOS, tvOS & watchOS macOS Linux Windows
βœ… πŸ§ͺ style βœ… πŸ›  ios βœ… πŸ›  mac βœ… πŸ›  wpe
βœ… πŸ›  ios-sim βœ… πŸ›  mac-AS-debug βœ… πŸ›  gtk βœ… πŸ›  wincairo
βœ… πŸ§ͺ webkitperl   πŸ§ͺ ios-wk2   πŸ§ͺ api-mac   πŸ§ͺ gtk-wk2
  πŸ§ͺ api-ios βœ… πŸ§ͺ mac-wk1   πŸ§ͺ api-gtk
βœ… πŸ›  tv βœ… πŸ§ͺ mac-wk2
βœ… πŸ›  tv-sim   πŸ§ͺ mac-AS-debug-wk2
  πŸ›  watch βœ… πŸ§ͺ mac-wk2-stress
βœ… πŸ›  πŸ§ͺ merge βœ… πŸ›  watch-sim

@mwyrzykowski mwyrzykowski self-assigned this Dec 15, 2022
@mwyrzykowski mwyrzykowski added the WebGPU For bugs in WebGPU label Dec 15, 2022
@webkit-ews-buildbot webkit-ews-buildbot added the merging-blocked Applied to prevent a change from being merged label Dec 15, 2022
#import <wtf/FastMalloc.h>
#import <wtf/Function.h>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why did you need this?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh duh. I see it now.

@mwyrzykowski mwyrzykowski removed the merging-blocked Applied to prevent a change from being merged label Dec 21, 2022
@mwyrzykowski mwyrzykowski force-pushed the eng/WebGPU-Implement-RenderBundleEncoder-which-appears-to-be-MTLIndirectCommandBuffer branch from 5654aea to 1d756e7 Compare December 21, 2022 23:52
@mwyrzykowski mwyrzykowski added the merge-queue Applied to send a pull request to merge-queue label Dec 22, 2022
…tCommandBuffer

https://bugs.webkit.org/show_bug.cgi?id=249257
<radar://103318351>

Reviewed by Dean Jackson.

Creation of the MTLIndirectCommandBuffer is deferred as we need to
tell Metal the maximum number of vertex and fragment buffers prior to creating the ICB,
along with the number of draw commands.

* Source/WebGPU/WebGPU.xcodeproj/project.pbxproj:
* Source/WebGPU/WebGPU/BindGroup.h:
(WebGPU::BindGroup::create):
(WebGPU::BindGroup::resources const):
* Source/WebGPU/WebGPU/BindGroup.mm:
(WebGPU::Device::createBindGroup):
(WebGPU::BindGroup::BindGroup):
Renamed struct moved to its own header.

* Source/WebGPU/WebGPU/BindableResource.h: Copied from Source/WebGPU/WebGPU/RenderBundle.mm.
Moved from BindGroup.h

* Source/WebGPU/WebGPU/RenderBundle.h:
(WebGPU::RenderBundle::create):
(WebGPU::RenderBundle::resources const):
* Source/WebGPU/WebGPU/RenderBundle.mm:
(WebGPU::RenderBundle::RenderBundle):
Cache the ICB and required resources.

* Source/WebGPU/WebGPU/RenderBundleEncoder.h:
(WebGPU::RenderBundleEncoder::create):
* Source/WebGPU/WebGPU/RenderBundleEncoder.mm:
(WebGPU::Device::createRenderBundleEncoder):
(WebGPU::RenderBundleEncoder::RenderBundleEncoder):
(WebGPU::RenderBundleEncoder::currentRenderCommand):
(WebGPU::RenderBundleEncoder::draw):
(WebGPU::RenderBundleEncoder::drawIndexed):
(WebGPU::RenderBundleEncoder::drawIndexedIndirect):
(WebGPU::RenderBundleEncoder::drawIndirect):
(WebGPU::RenderBundleEncoder::finish):
(WebGPU::RenderBundleEncoder::setBindGroup):
(WebGPU::RenderBundleEncoder::setIndexBuffer):
(WebGPU::RenderBundleEncoder::setPipeline):
(WebGPU::RenderBundleEncoder::setVertexBuffer):
Implement pipeline functions.

* Source/WebGPU/WebGPU/RenderPassEncoder.mm:
(WebGPU::RenderPassEncoder::executeBundles):
* Source/WebGPU/WebGPU/RenderPipeline.mm:
(WebGPU::Device::createRenderPipeline):
* Websites/webkit.org/demos/webgpu/indirect-command-buffer-textured-cube.html: Added.
* Websites/webkit.org/demos/webgpu/scripts/indirect-command-buffer-textured-cube.js: Added.
(async helloCube.frameUpdate):
(async helloCube):
Add ICB demo test.

* Websites/webkit.org/demos/webgpu/scripts/hello-triangle-msaa.js:
(async helloTriangle):
* Websites/webkit.org/demos/webgpu/scripts/instanced-textured-cube.js:
Miscellaneous test fixes observed running under the debug metal device.

Canonical link: https://commits.webkit.org/258226@main
@webkit-commit-queue webkit-commit-queue force-pushed the eng/WebGPU-Implement-RenderBundleEncoder-which-appears-to-be-MTLIndirectCommandBuffer branch from 1d756e7 to 2022497 Compare December 22, 2022 02:17
@webkit-commit-queue
Copy link
Collaborator

Committed 258226@main (2022497): https://commits.webkit.org/258226@main

Reviewed commits have been landed. Closing PR #7652 and removing active labels.

@webkit-commit-queue webkit-commit-queue removed the merge-queue Applied to send a pull request to merge-queue label Dec 22, 2022
@webkit-commit-queue webkit-commit-queue merged commit 2022497 into WebKit:main Dec 22, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
WebGPU For bugs in WebGPU
Projects
None yet
5 participants