Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 016eaf8324d1f1bc84be4aed4d6f052b489ca4c5
      
https://github.com/WebKit/WebKit/commit/016eaf8324d1f1bc84be4aed4d6f052b489ca4c5
  Author: Mike Wyrzykowski <[email protected]>
  Date:   2025-05-14 (Wed, 14 May 2025)

  Changed paths:
    A LayoutTests/fast/webgpu/nocrash/fuzz-292525-expected.txt
    A LayoutTests/fast/webgpu/nocrash/fuzz-292525.html
    M LayoutTests/fast/webgpu/regression/repro_1323-274609-expected.txt
    M LayoutTests/fast/webgpu/regression/repro_1323b-274609-expected.txt
    M LayoutTests/fast/webgpu/regression/repro_1323c-274609-expected.txt
    M 
LayoutTests/http/tests/webgpu/webgpu/api/operation/command_buffer/programmable/state_tracking-expected.txt
    M 
LayoutTests/http/tests/webgpu/webgpu/api/operation/pipeline/pipeline_layout_created_with_null_bind_group_layout-expected.txt
    M 
LayoutTests/http/tests/webgpu/webgpu/api/validation/createPipelineLayout-expected.txt
    M Source/WebCore/Modules/WebGPU/GPUComputePassEncoder.cpp
    M Source/WebCore/Modules/WebGPU/GPUComputePassEncoder.h
    M Source/WebCore/Modules/WebGPU/GPUDevice.cpp
    M Source/WebCore/Modules/WebGPU/GPUPipelineLayoutDescriptor.h
    M Source/WebCore/Modules/WebGPU/GPUPipelineLayoutDescriptor.idl
    M Source/WebCore/Modules/WebGPU/GPUProgrammablePassEncoder.idl
    M Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.cpp
    M Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.h
    M Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.cpp
    M Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.h
    M 
Source/WebCore/Modules/WebGPU/Implementation/WebGPUComputePassEncoderImpl.cpp
    M 
Source/WebCore/Modules/WebGPU/Implementation/WebGPUComputePassEncoderImpl.h
    M Source/WebCore/Modules/WebGPU/Implementation/WebGPUDeviceImpl.cpp
    M Source/WebCore/Modules/WebGPU/Implementation/WebGPUDeviceImpl.h
    M 
Source/WebCore/Modules/WebGPU/Implementation/WebGPURenderBundleEncoderImpl.cpp
    M 
Source/WebCore/Modules/WebGPU/Implementation/WebGPURenderBundleEncoderImpl.h
    M 
Source/WebCore/Modules/WebGPU/Implementation/WebGPURenderPassEncoderImpl.cpp
    M Source/WebCore/Modules/WebGPU/Implementation/WebGPURenderPassEncoderImpl.h
    M Source/WebCore/Modules/WebGPU/InternalAPI/WebGPUComputePassEncoder.h
    M Source/WebCore/Modules/WebGPU/InternalAPI/WebGPUDevice.h
    M Source/WebCore/Modules/WebGPU/InternalAPI/WebGPURenderBundleEncoder.h
    M Source/WebCore/Modules/WebGPU/InternalAPI/WebGPURenderPassEncoder.h
    M Source/WebGPU/WGSL/GlobalVariableRewriter.cpp
    M Source/WebGPU/WGSL/WGSL.h
    M Source/WebGPU/WebGPU/ComputePassEncoder.h
    M Source/WebGPU/WebGPU/ComputePassEncoder.mm
    M Source/WebGPU/WebGPU/HardwareCapabilities.mm
    M Source/WebGPU/WebGPU/PipelineLayout.mm
    M Source/WebGPU/WebGPU/Queue.h
    M Source/WebGPU/WebGPU/Queue.mm
    M Source/WebGPU/WebGPU/RenderBundle.h
    M Source/WebGPU/WebGPU/RenderBundle.mm
    M Source/WebGPU/WebGPU/RenderBundleEncoder.h
    M Source/WebGPU/WebGPU/RenderBundleEncoder.mm
    M Source/WebGPU/WebGPU/RenderPassEncoder.h
    M Source/WebGPU/WebGPU/RenderPassEncoder.mm
    M Source/WebGPU/WebGPU/RenderPipeline.h
    M Source/WebGPU/WebGPU/RenderPipeline.mm
    M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.cpp
    M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.h
    M 
Source/WebKit/GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.messages.in
    M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.cpp
    M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.h
    M 
Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.messages.in
    M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.cpp
    M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.h
    M 
Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.messages.in
    M 
Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteBindGroupLayoutProxy.cpp
    M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteBindGroupLayoutProxy.h
    M 
Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteComputePassEncoderProxy.cpp
    M 
Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteComputePassEncoderProxy.h
    M 
Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteComputePipelineProxy.cpp
    M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.cpp
    M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.h
    M 
Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleEncoderProxy.cpp
    M 
Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleEncoderProxy.h
    M 
Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteRenderPassEncoderProxy.cpp
    M 
Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteRenderPassEncoderProxy.h
    M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteRenderPipelineProxy.cpp

  Log Message:
  -----------
  [WebGPU] RenderBundleEncoder splitting is in incorrect order
https://bugs.webkit.org/show_bug.cgi?id=292525
rdar://150549361

Reviewed by Tadeu Zagallo.

The logic in RenderBundleEncoder for splitting ICBs is incorrect.

It does something like:
* Record … split if needed and replay … keep Record … split if needed and 
replay …  Record …  Finish … split if needed and replay…

Which results in incorrect state, rather it should be:
* Record … Finish, splitting if needed during replay

I.e., we should not be trying to split during recording. Only when recording 
has finished

Includes some miscellenous changes required to get 
http/tests/webgpu/webgpu/api/operation/command_buffer/programmable/state_tracking.html
passing again as noticed in EWS.

* Source/WebCore/Modules/WebGPU/GPUComputePassEncoder.cpp:
(WebCore::GPUComputePassEncoder::setBindGroup):
* Source/WebCore/Modules/WebGPU/GPUComputePassEncoder.h:
* Source/WebCore/Modules/WebGPU/GPUDevice.cpp:
* Source/WebCore/Modules/WebGPU/GPUPipelineLayoutDescriptor.h:
(WebCore::GPUPipelineLayoutDescriptor::convertToBacking const):
* Source/WebCore/Modules/WebGPU/GPUPipelineLayoutDescriptor.idl:
* Source/WebCore/Modules/WebGPU/GPUProgrammablePassEncoder.idl:
* Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.cpp:
(WebCore::GPURenderBundleEncoder::setBindGroup):
* Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.h:
* Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.cpp:
(WebCore::GPURenderPassEncoder::setBindGroup):
* Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.h:
* Source/WebCore/Modules/WebGPU/Implementation/WebGPUComputePassEncoderImpl.cpp:
(WebCore::WebGPU::ComputePassEncoderImpl::setBindGroup):
* Source/WebCore/Modules/WebGPU/Implementation/WebGPUComputePassEncoderImpl.h:
* Source/WebCore/Modules/WebGPU/Implementation/WebGPUDeviceImpl.cpp:
(WebCore::WebGPU::DeviceImpl::emptyBindGroupLayout const):
* Source/WebCore/Modules/WebGPU/Implementation/WebGPUDeviceImpl.h:
* 
Source/WebCore/Modules/WebGPU/Implementation/WebGPURenderBundleEncoderImpl.cpp:
(WebCore::WebGPU::RenderBundleEncoderImpl::setBindGroup):
* Source/WebCore/Modules/WebGPU/Implementation/WebGPURenderBundleEncoderImpl.h:
* Source/WebCore/Modules/WebGPU/Implementation/WebGPURenderPassEncoderImpl.cpp:
(WebCore::WebGPU::RenderPassEncoderImpl::setBindGroup):
* Source/WebCore/Modules/WebGPU/Implementation/WebGPURenderPassEncoderImpl.h:
* Source/WebCore/Modules/WebGPU/InternalAPI/WebGPUComputePassEncoder.h:
* Source/WebCore/Modules/WebGPU/InternalAPI/WebGPUDevice.h:
* Source/WebCore/Modules/WebGPU/InternalAPI/WebGPURenderBundleEncoder.h:
* Source/WebCore/Modules/WebGPU/InternalAPI/WebGPURenderPassEncoder.h:
* Source/WebGPU/WebGPU/ComputePassEncoder.h:
* Source/WebGPU/WebGPU/ComputePassEncoder.mm:
(WebGPU::ComputePassEncoder::setBindGroup):
(wgpuComputePassEncoderSetBindGroup):
* Source/WebGPU/WebGPU/HardwareCapabilities.mm:
(WebGPU::isShaderValidationEnabled):
* Source/WebGPU/WebGPU/PipelineLayout.mm:
(WebGPU::PipelineLayout::errorValidatingBindGroupCompatibility const):
* Source/WebGPU/WebGPU/Queue.h:
* Source/WebGPU/WebGPU/Queue.mm:
(WebGPU::Queue::commitMTLCommandBuffer):
(WebGPU::Queue::trimICB):
* Source/WebGPU/WebGPU/RenderBundle.h:
(WebGPU::RenderBundle::create):
(WebGPU::RenderBundle::resources):
* Source/WebGPU/WebGPU/RenderBundle.mm:
(WebGPU::RenderBundle::RenderBundle):
* Source/WebGPU/WebGPU/RenderBundleEncoder.h:
* Source/WebGPU/WebGPU/RenderBundleEncoder.mm:
(WebGPU::makeRenderBundleICBWithResources):
(WebGPU::RenderBundleEncoder::executePreDrawCommands):
(WebGPU::RenderBundleEncoder::makeICB):
(WebGPU::RenderBundleEncoder::cleanup):
(WebGPU::RenderBundleEncoder::endCurrentICB):
(WebGPU::makeBindableResources):
(WebGPU::RenderBundleEncoder::finish):
(WebGPU::RenderBundleEncoder::setBindGroup):
(WebGPU::RenderBundleEncoder::icbNeedsToBeSplit):
(WebGPU::RenderBundleEncoder::splitICB):
(WebGPU::RenderBundleEncoder::setPipeline):
(wgpuRenderBundleEncoderSetBindGroupWithDynamicOffsets):
* Source/WebGPU/WebGPU/RenderPassEncoder.h:
* Source/WebGPU/WebGPU/RenderPassEncoder.mm:
(WebGPU::RenderPassEncoder::splitRenderPass):
(WebGPU::RenderPassEncoder::executeBundles):
(WebGPU::RenderPassEncoder::setBindGroup):
(wgpuRenderPassEncoderSetBindGroup):
* Source/WebGPU/WebGPU/RenderPipeline.h:
* Source/WebGPU/WebGPU/RenderPipeline.mm:
(WebGPU::RenderPipeline::recomputeLastStrideAsStride const):
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.cpp:
(WebKit::RemoteComputePassEncoder::setBindGroup):
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.h:
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteComputePassEncoder.messages.in:
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.cpp:
(WebKit::RemoteRenderBundleEncoder::setBindGroup):
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.h:
* 
Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderBundleEncoder.messages.in:
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.cpp:
(WebKit::RemoteRenderPassEncoder::setBindGroup):
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.h:
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteRenderPassEncoder.messages.in:
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteBindGroupLayoutProxy.cpp:
(WebKit::WebGPU::RemoteBindGroupLayoutProxy::RemoteBindGroupLayoutProxy):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteBindGroupLayoutProxy.h:
* 
Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteComputePassEncoderProxy.cpp:
(WebKit::WebGPU::RemoteComputePassEncoderProxy::setBindGroup):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteComputePassEncoderProxy.h:
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteComputePipelineProxy.cpp:
(WebKit::WebGPU::RemoteComputePipelineProxy::getBindGroupLayout):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.cpp:
(WebKit::WebGPU::RemoteDeviceProxy::createEmptyBindGroupLayout):
(WebKit::WebGPU::m_emptyBindGroupLayout):
(WebKit::WebGPU::RemoteDeviceProxy::createBindGroupLayout):
(WebKit::WebGPU::RemoteDeviceProxy::emptyBindGroupLayout const):
(WebKit::WebGPU::m_invalidCommandBuffer): Deleted.
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.h:
* 
Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleEncoderProxy.cpp:
(WebKit::WebGPU::RemoteRenderBundleEncoderProxy::setBindGroup):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteRenderBundleEncoderProxy.h:
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteRenderPassEncoderProxy.cpp:
(WebKit::WebGPU::RemoteRenderPassEncoderProxy::setBindGroup):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteRenderPassEncoderProxy.h:
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteRenderPipelineProxy.cpp:
(WebKit::WebGPU::RemoteRenderPipelineProxy::getBindGroupLayout):

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to