Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: fcd024f84dbb3e26a34b2ecf4d71e34d56b50107
https://github.com/WebKit/WebKit/commit/fcd024f84dbb3e26a34b2ecf4d71e34d56b50107
Author: Devin Rousso <[email protected]>
Date: 2026-08-05 (Wed, 05 Aug 2026)
Changed paths:
M LayoutTests/inspector/canvas/resources/shaderProgram-utilities-webgpu.js
A LayoutTests/inspector/canvas/updateShader-webgpu-expected.txt
A LayoutTests/inspector/canvas/updateShader-webgpu.html
M LayoutTests/inspector/canvas/worker-webgpu-expected.txt
M LayoutTests/inspector/canvas/worker-webgpu.html
M LayoutTests/platform/glib/TestExpectations
M LayoutTests/platform/win/TestExpectations
M Source/JavaScriptCore/inspector/protocol/Canvas.json
M Source/WebCore/Modules/WebGPU/GPUComputePassEncoder.cpp
M Source/WebCore/Modules/WebGPU/GPUComputePipeline.cpp
M Source/WebCore/Modules/WebGPU/GPUComputePipeline.h
M Source/WebCore/Modules/WebGPU/GPUDevice.cpp
M Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.cpp
M Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.cpp
M Source/WebCore/Modules/WebGPU/GPURenderPipeline.cpp
M Source/WebCore/Modules/WebGPU/GPURenderPipeline.h
M Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp
M Source/WebCore/Modules/WebGPU/GPUShaderModule.h
M Source/WebCore/Modules/WebGPU/Implementation/WebGPUDeviceImpl.cpp
M Source/WebCore/Modules/WebGPU/Implementation/WebGPUDeviceImpl.h
M Source/WebCore/Modules/WebGPU/InternalAPI/WebGPUDevice.h
M Source/WebCore/inspector/InspectorShaderProgram.cpp
M Source/WebCore/inspector/InspectorShaderProgram.h
M Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp
M Source/WebCore/inspector/agents/InspectorCanvasAgent.h
M Source/WebGPU/WebGPU/ComputePipeline.mm
M Source/WebGPU/WebGPU/Device.h
M Source/WebGPU/WebGPU/Device.mm
M Source/WebGPU/WebGPU/RenderPipeline.mm
M Source/WebGPU/WebGPU/WebGPUExt.h
M Source/WebInspectorUI/UserInterface/Views/ShaderProgramContentView.js
M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.cpp
M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.h
M Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.messages.in
M Source/WebKit/Shared/WebGPU/WebGPUComputePipelineDescriptor.cpp
M Source/WebKit/Shared/WebGPU/WebGPUConvertFromBackingContext.h
M Source/WebKit/Shared/WebGPU/WebGPUPipelineDescriptorBase.cpp
M Source/WebKit/Shared/WebGPU/WebGPURenderPipelineDescriptor.cpp
M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.cpp
M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.h
Log Message:
-----------
Web Inspector: Canvas: support editing WebGPU shaders
https://bugs.webkit.org/show_bug.cgi?id=320699
Reviewed by Mike Wyrzykowski.
* Source/JavaScriptCore/inspector/protocol/Canvas.json:
* Source/WebCore/inspector/agents/InspectorCanvasAgent.h:
* Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp:
(WebCore::InspectorCanvasAgent::updateShader):
Make `Canvas.updateShader` asynchronous so pipeline compilation can finish
before replying.
* Source/WebCore/Modules/WebGPU/GPUShaderModule.h:
(WebCore::GPUShaderModule::create):
(WebCore::GPUShaderModule::source const): Deleted.
(WebCore::GPUShaderModule::descriptor const): Added.
* Source/WebCore/Modules/WebGPU/GPUShaderModule.cpp:
(WebCore::GPUShaderModule::GPUShaderModule):
(WebCore::GPUShaderModule::setLabel):
* Source/WebCore/Modules/WebGPU/GPUDevice.cpp:
(WebCore::GPUDevice::createShaderModule):
(WebCore::GPUDevice::createComputePipeline):
(WebCore::GPUDevice::createRenderPipeline):
(WebCore::GPUDevice::createComputePipelineAsync):
(WebCore::GPUDevice::createRenderPipelineAsync):
* Source/WebCore/Modules/WebGPU/GPUComputePipeline.h:
(WebCore::GPUComputePipeline::shaderSource const):
* Source/WebCore/Modules/WebGPU/GPUComputePipeline.cpp:
(WebCore::GPUComputePipeline::create):
(WebCore::GPUComputePipeline::GPUComputePipeline):
(WebCore::GPUComputePipeline::setLabel):
(WebCore::GPUComputePipeline::getBindGroupLayout):
(WebCore::GPUComputePipeline::updateShader): Added.
* Source/WebCore/Modules/WebGPU/GPUComputePassEncoder.cpp:
(WebCore::GPUComputePassEncoder::setPipeline):
* Source/WebCore/Modules/WebGPU/GPURenderPipeline.h:
(WebCore::GPURenderPipeline::vertexShaderSource const):
(WebCore::GPURenderPipeline::fragmentShaderSource const):
* Source/WebCore/Modules/WebGPU/GPURenderPipeline.cpp:
(WebCore::GPURenderPipeline::create):
(WebCore::GPURenderPipeline::GPURenderPipeline):
(WebCore::GPURenderPipeline::setLabel):
(WebCore::GPURenderPipeline::getBindGroupLayout):
(WebCore::GPURenderPipeline::updateVertexShader): Added.
(WebCore::GPURenderPipeline::updateFragmentShader): Added.
(WebCore::GPURenderPipeline::updateShader): Added.
* Source/WebCore/Modules/WebGPU/GPURenderBundleEncoder.cpp:
(WebCore::GPURenderBundleEncoder::setPipeline):
* Source/WebCore/Modules/WebGPU/GPURenderPassEncoder.cpp:
(WebCore::GPURenderPassEncoder::setPipeline):
* Source/WebCore/inspector/InspectorShaderProgram.h:
* Source/WebCore/inspector/InspectorShaderProgram.cpp:
(WebCore::InspectorShaderProgram::updateShader):
Retain the descriptors needed to recreate pipelines with their original layouts.
Preserve invalid editor source while continuing to use the last valid pipeline.
Clear compilation hints whose weak layouts may expire, and use weak captures
while replacement is pending.
Use `pauseAllErrorReporting` while compiling replacement shader modules.
Protect pipeline arguments before passing their backings to encoder
implementations.
* Source/WebCore/Modules/WebGPU/InternalAPI/WebGPUDevice.h:
(WebCore::WebGPU::Device::createComputePipelineWithPipelineLayoutFromPipelineAsync):
Added.
(WebCore::WebGPU::Device::createRenderPipelineWithPipelineLayoutFromPipelineAsync):
Added.
* Source/WebCore/Modules/WebGPU/Implementation/WebGPUDeviceImpl.h:
* Source/WebCore/Modules/WebGPU/Implementation/WebGPUDeviceImpl.cpp:
(WebCore::WebGPU::DeviceImpl::createComputePipelineWithPipelineLayoutFromPipelineAsync):
Added.
(WebCore::WebGPU::DeviceImpl::createRenderPipelineWithPipelineLayoutFromPipelineAsync):
Added.
* Source/WebGPU/WebGPU/WebGPUExt.h:
* Source/WebGPU/WebGPU/Device.h:
* Source/WebGPU/WebGPU/Device.mm:
(WebGPU::Device::pauseErrorReporting):
(WebGPU::wgpuDeviceCreateComputePipelineWithPipelineLayoutFromPipelineAsync):
Added.
(WebGPU::wgpuDeviceCreateRenderPipelineWithPipelineLayoutFromPipelineAsync):
Added.
* Source/WebGPU/WebGPU/ComputePipeline.mm:
(WebGPU::Device::createComputePipeline):
(WebGPU::Device::createComputePipelineWithPipelineLayoutFromPipelineAsync):
Added.
* Source/WebGPU/WebGPU/RenderPipeline.mm:
(WebGPU::Device::createRenderPipeline):
(WebGPU::Device::createRenderPipelineWithPipelineLayoutFromPipelineAsync):
Added.
Add inspector-only pipeline creation that reuses the replaced pipeline's layout
and suppresses page-visible validation errors.
* Source/WebKit/Shared/WebGPU/WebGPUConvertFromBackingContext.h:
* Source/WebKit/Shared/WebGPU/WebGPUPipelineDescriptorBase.cpp:
* Source/WebKit/Shared/WebGPU/WebGPUComputePipelineDescriptor.cpp:
* Source/WebKit/Shared/WebGPU/WebGPURenderPipelineDescriptor.cpp:
(WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.messages.in:
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.h:
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.cpp:
(WebKit::RemoteDevice::createComputePipelineWithPipelineLayoutFromPipeline):
Added.
(WebKit::RemoteDevice::createRenderPipelineWithPipelineLayoutFromPipeline):
Added.
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.h:
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.cpp:
(WebKit::RemoteDeviceProxy::createComputePipelineWithPipelineLayoutFromPipelineAsync):
Added.
(WebKit::RemoteDeviceProxy::createRenderPipelineWithPipelineLayoutFromPipelineAsync):
Added.
Allow layoutless replacement descriptors across IPC and wait for GPU-process
compilation before creating replacement proxies.
* Source/WebInspectorUI/UserInterface/Views/ShaderProgramContentView.js:
(WI.ShaderProgramContentView.prototype.constructor):
Make WebGPU shader editors writable and debounce WGSL edits.
* LayoutTests/inspector/canvas/resources/shaderProgram-utilities-webgpu.js:
* LayoutTests/inspector/canvas/updateShader-webgpu.html: Added.
* LayoutTests/inspector/canvas/updateShader-webgpu-expected.txt: Added.
* LayoutTests/inspector/canvas/worker-webgpu.html:
* LayoutTests/inspector/canvas/worker-webgpu-expected.txt:
* LayoutTests/platform/glib/TestExpectations:
* LayoutTests/platform/win/TestExpectations:
Canonical link: https://commits.webkit.org/318633@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications