[webkit-changes] [WebKit/WebKit] e3d86b: [WebGPU] Create and render to IOSurfaces from the ...

mwyrzykowski noreply at github.com
Thu Nov 17 18:27:01 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: e3d86bfd034bfab0d444070be8e4954dca2d62c7
      https://github.com/WebKit/WebKit/commit/e3d86bfd034bfab0d444070be8e4954dca2d62c7
  Author: Mike Wyrzykowski <mwyrzykowski at apple.com>
  Date:   2022-11-17 (Thu, 17 Nov 2022)

  Changed paths:
    M Source/WTF/wtf/PlatformEnable.h
    M Source/WTF/wtf/PlatformEnableCocoa.h
    M Source/WTF/wtf/PlatformHave.h
    M Source/WebCore/Modules/WebGPU/GPUDevice.cpp
    M Source/WebCore/Modules/WebGPU/GPUDevice.h
    A Source/WebCore/Modules/WebGPU/GPUSurface.cpp
    A Source/WebCore/Modules/WebGPU/GPUSurface.h
    A Source/WebCore/Modules/WebGPU/GPUSurfaceDescriptor.h
    A Source/WebCore/Modules/WebGPU/GPUSwapChain.cpp
    A Source/WebCore/Modules/WebGPU/GPUSwapChain.h
    A Source/WebCore/Modules/WebGPU/GPUSwapChainDescriptor.h
    M Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj
    M Source/WebCore/PAL/pal/CMakeLists.txt
    M Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUConvertToBackingContext.h
    M Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUDeviceImpl.cpp
    M Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUDeviceImpl.h
    M Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUDowncastConvertToBackingContext.cpp
    M Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUDowncastConvertToBackingContext.h
    A Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUSurfaceImpl.cpp
    A Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUSurfaceImpl.h
    A Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUSwapChainImpl.cpp
    A Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUSwapChainImpl.h
    M Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUDevice.h
    A Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUSurface.h
    A Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUSurfaceDescriptor.h
    A Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUSwapChain.h
    A Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUSwapChainDescriptor.h
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/dom/Document.cpp
    M Source/WebCore/dom/Document.h
    M Source/WebCore/dom/Document.idl
    M Source/WebCore/html/HTMLCanvasElement.cpp
    M Source/WebCore/html/HTMLCanvasElement.h
    M Source/WebCore/html/HTMLCanvasElement.idl
    M Source/WebCore/html/canvas/GPUCanvasContext.cpp
    M Source/WebCore/html/canvas/GPUCanvasContext.h
    M Source/WebCore/html/canvas/GPUCanvasContext.idl
    M Source/WebCore/platform/graphics/IntSize.h
    M Source/WebCore/platform/graphics/cocoa/IOSurface.h
    M Source/WebGPU/WebGPU/Device.h
    M Source/WebGPU/WebGPU/Device.mm
    M Source/WebGPU/WebGPU/Instance.mm
    M Source/WebGPU/WebGPU/Surface.h
    M Source/WebGPU/WebGPU/Surface.mm
    M Source/WebGPU/WebGPU/SwapChain.h
    M Source/WebGPU/WebGPU/SwapChain.mm
    M Source/WebGPU/WebGPU/Texture.mm
    M Source/WebGPU/WebGPU/WebGPUExt.h
    M Source/WebKit/CMakeLists.txt
    M Source/WebKit/DerivedSources-input.xcfilelist
    M Source/WebKit/DerivedSources-output.xcfilelist
    M Source/WebKit/DerivedSources.make
    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
    A Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSurface.cpp
    A Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSurface.h
    A Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSurface.messages.in
    A Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSwapChain.cpp
    A Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSwapChain.h
    A Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSwapChain.messages.in
    M Source/WebKit/GPUProcess/graphics/WebGPU/WebGPUObjectHeap.cpp
    M Source/WebKit/GPUProcess/graphics/WebGPU/WebGPUObjectHeap.h
    M Source/WebKit/Scripts/webkit/messages.py
    M Source/WebKit/Shared/WebGPU/WebGPUConvertFromBackingContext.h
    M Source/WebKit/Shared/WebGPU/WebGPUConvertToBackingContext.h
    A Source/WebKit/Shared/WebGPU/WebGPUSurfaceDescriptor.cpp
    A Source/WebKit/Shared/WebGPU/WebGPUSurfaceDescriptor.h
    A Source/WebKit/Shared/WebGPU/WebGPUSurfaceDescriptor.serialization.in
    A Source/WebKit/Shared/WebGPU/WebGPUSwapChainDescriptor.cpp
    A Source/WebKit/Shared/WebGPU/WebGPUSwapChainDescriptor.h
    A Source/WebKit/Shared/WebGPU/WebGPUSwapChainDescriptor.serialization.in
    M Source/WebKit/Sources.txt
    M Source/WebKit/WebKit.xcodeproj/project.pbxproj
    M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.cpp
    M Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.h
    A Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteSurfaceProxy.cpp
    A Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteSurfaceProxy.h
    A Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteSwapChainProxy.cpp
    A Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteSwapChainProxy.h
    M Source/WebKit/WebProcess/GPU/graphics/WebGPU/WebGPUDowncastConvertToBackingContext.cpp
    M Source/WebKit/WebProcess/GPU/graphics/WebGPU/WebGPUDowncastConvertToBackingContext.h

  Log Message:
  -----------
  [WebGPU] Create and render to IOSurfaces from the GPU process
https://bugs.webkit.org/show_bug.cgi?id=247587
<rdar://101922518>

Reviewed by Dean Jackson.

Create and render to IOSurfaces from the GPU process.

Send them back to the web process via mach port handles.

* Source/WTF/wtf/PlatformEnable.h:
* Source/WTF/wtf/PlatformEnableCocoa.h:
* Source/WTF/wtf/PlatformHave.h:
Remove ENABLE_WEBGPU as it overlapped with HAVE_WEBGPU_IMPLEMENTATION.

* Source/WebCore/Modules/WebGPU/GPUDevice.cpp:
(WebCore::GPUDevice::createSurfaceTexture):
(WebCore::GPUDevice::createSurface):
(WebCore::GPUDevice::createSwapChain):
* Source/WebCore/Modules/WebGPU/GPUDevice.h:
* Source/WebCore/Modules/WebGPU/GPUSurface.cpp: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(WebCore::GPUSurface::label const):
(WebCore::GPUSurface::setLabel):
(WebCore::GPUSurface::destroy):
* Source/WebCore/Modules/WebGPU/GPUSurface.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(WebCore::GPUSurface::create):
(WebCore::GPUSurface::backing):
(WebCore::GPUSurface::backing const):
(WebCore::GPUSurface::GPUSurface):
* Source/WebCore/Modules/WebGPU/GPUSurface.idl: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
* Source/WebCore/Modules/WebGPU/GPUSurfaceDescriptor.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(WebCore::GPUSurfaceDescriptor::convertToBacking const):
* Source/WebCore/Modules/WebGPU/GPUSwapChain.cpp: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(WebCore::GPUSwapChain::label const):
(WebCore::GPUSwapChain::setLabel):
(WebCore::GPUSwapChain::prepareForDisplay):
(WebCore::GPUSwapChain::destroy):
* Source/WebCore/Modules/WebGPU/GPUSwapChain.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(WebCore::GPUSwapChain::create):
(WebCore::GPUSwapChain::backing):
(WebCore::GPUSwapChain::backing const):
(WebCore::GPUSwapChain::GPUSwapChain):
* Source/WebCore/Modules/WebGPU/GPUSwapChainDescriptor.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(WebCore::GPUSwapChainDescriptor::convertToBacking const):

Send surface and swap chain concepts from WebProcess layer to GPUProcess layer.

* Source/WebCore/PAL/PAL.xcodeproj/project.pbxproj:
* Source/WebCore/PAL/pal/CMakeLists.txt:
* Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUConvertToBackingContext.h:
* Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUDeviceImpl.h:
* Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUDowncastConvertToBackingContext.cpp:
(PAL::WebGPU::DowncastConvertToBackingContext::convertToBacking):
* Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUDowncastConvertToBackingContext.h:
* Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUSurfaceImpl.cpp: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(PAL::WebGPU::SurfaceImpl::SurfaceImpl):
(PAL::WebGPU::SurfaceImpl::~SurfaceImpl):
(PAL::WebGPU::SurfaceImpl::destroy):
(PAL::WebGPU::SurfaceImpl::setLabelInternal):
(PAL::WebGPU::SurfaceImpl::displayBufferHandle const):
(PAL::WebGPU::SurfaceImpl::drawingBuffer const):
* Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUSurfaceImpl.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
* Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUSwapChainImpl.cpp: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(PAL::WebGPU::SwapChainImpl::SwapChainImpl):
(PAL::WebGPU::SwapChainImpl::~SwapChainImpl):
(PAL::WebGPU::SwapChainImpl::destroy):
(PAL::WebGPU::SwapChainImpl::prepareForDisplay):
(PAL::WebGPU::SwapChainImpl::setLabelInternal):
* Source/WebCore/PAL/pal/graphics/WebGPU/Impl/WebGPUSwapChainImpl.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
* Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUDevice.h:
* Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUSurface.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(PAL::WebGPU::Surface::label const):
(PAL::WebGPU::Surface::setLabel):
* Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUSurfaceDescriptor.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
* Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUSwapChain.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(PAL::WebGPU::SwapChain::label const):
(PAL::WebGPU::SwapChain::setLabel):
* Source/WebCore/PAL/pal/graphics/WebGPU/WebGPUSwapChainDescriptor.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/dom/Document.cpp:
(WebCore::Document::getCSSCanvasContext):
Send surface and swap chain concepts from WebProcess layer to GPUProcess layer.

* Source/WebCore/dom/Document.h:
* Source/WebCore/dom/Document.idl:
* Source/WebCore/html/HTMLCanvasElement.cpp:
(WebCore::HTMLCanvasElement::getContext):
* Source/WebCore/html/HTMLCanvasElement.h:
* Source/WebCore/html/HTMLCanvasElement.idl:
Use HAVE_WEBGPU_IMPLEMENTATION instead of ENABLE_WEBGPU as the former was added earlier.

* Source/WebCore/html/canvas/GPUCanvasContext.cpp:
(WebCore::GPUCanvasContext::GPUCanvasContext):
(WebCore::GPUCanvasContext::reshape):
(WebCore::GPUCanvasContext::configure):
(WebCore::GPUCanvasContext::createSwapChainIfNeeded):
(WebCore::GPUCanvasContext::getCurrentTexture):
(WebCore::GPUCanvasContext::unconfigure):
(WebCore::GPUCanvasContext::layerContentsDisplayDelegate):
(WebCore::GPUCanvasContext::prepareForDisplay):
* Source/WebCore/html/canvas/GPUCanvasContext.h:
* Source/WebCore/html/canvas/GPUCanvasContext.idl:
* Source/WebCore/platform/graphics/IntSize.h:
* Source/WebCore/platform/graphics/cocoa/IOSurface.h:
* Source/WebGPU/WebGPU/Device.h:
* Source/WebGPU/WebGPU/Device.mm:
(wgpuDeviceCreateSwapChain):

* Source/WebGPU/WebGPU/Instance.mm:
(WebGPU::Instance::createSurface):
(wgpuGetProcAddress):
(wgpuInstanceCreateSurface): Deleted.
Moved surface creation to Surface.mm

* Source/WebGPU/WebGPU/Surface.h:
(WebGPU::Surface::create):
(WebGPU::Surface::displayBuffer const):
(WebGPU::Surface::drawingBuffer const):
* Source/WebGPU/WebGPU/Surface.mm:
(optionsFor32BitSurface):
(createIOSurface):
(createSurfaceFromDescriptor):
(wgpuSurfaceCocoaCustomSurfaceGetDisplayBuffer):
(wgpuSurfaceCocoaCustomSurfaceGetDrawingBuffer):
(wgpuInstanceCreateSurface):
(WebGPU::Device::createSurface):
(WebGPU::Surface::Surface):
(WebGPU::Surface::getPreferredFormat):
(WebGPU::Surface::nextDrawable):
Modeled after CAMetalLayer

* Source/WebGPU/WebGPU/SwapChain.h:
(WebGPU::SwapChain::create):
* Source/WebGPU/WebGPU/SwapChain.mm:
(WebGPU::Device::createSwapChain):
(WebGPU::SwapChain::SwapChain):
(WebGPU::SwapChain::present):
(wgpuSwapChainGetCurrentTextureView):
(WebGPU::SwapChain::getCurrentTextureView): Deleted.
* Source/WebGPU/WebGPU/Texture.mm:
(WebGPU::Device::createTexture):
* Source/WebGPU/WebGPU/WebGPUExt.h:
Add IOSurface functions.

* Source/WebKit/CMakeLists.txt:
* Source/WebKit/DerivedSources-input.xcfilelist:
* Source/WebKit/DerivedSources-output.xcfilelist:
* Source/WebKit/DerivedSources.make:
Add new files.

* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.cpp:
(WebKit::RemoteDevice::createSurface):
(WebKit::RemoteDevice::createSwapChain):
(WebKit::RemoteDevice::createSurfaceTexture):
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.h:
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteDevice.messages.in:
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSurface.cpp: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(WebKit::RemoteSurface::RemoteSurface):
(WebKit::RemoteSurface::stopListeningForIPC):
(WebKit::RemoteSurface::destroy):
(WebKit::RemoteSurface::setLabel):
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSurface.h: Added.
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSurface.messages.in: Added.
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSwapChain.cpp: Added.
(WebKit::RemoteSwapChain::RemoteSwapChain):
(WebKit::RemoteSwapChain::stopListeningForIPC):
(WebKit::RemoteSwapChain::destroy):
(WebKit::RemoteSwapChain::setLabel):
(WebKit::RemoteSwapChain::prepareForDisplay):
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSwapChain.h: Added.
* Source/WebKit/GPUProcess/graphics/WebGPU/RemoteSwapChain.messages.in: Added.
* Source/WebKit/GPUProcess/graphics/WebGPU/WebGPUObjectHeap.cpp:
(WebKit::WebGPU::ObjectHeap::addObject):
(WebKit::WebGPU::ObjectHeap::convertSurfaceFromBacking):
(WebKit::WebGPU::ObjectHeap::convertSwapChainFromBacking):
* Source/WebKit/GPUProcess/graphics/WebGPU/WebGPUObjectHeap.h:
* Source/WebKit/Scripts/webkit/messages.py:
(headers_for_type):
* Source/WebKit/Shared/WebGPU/WebGPUConvertFromBackingContext.h:
* Source/WebKit/Shared/WebGPU/WebGPUConvertToBackingContext.h:
* Source/WebKit/Shared/WebGPU/WebGPUSurfaceDescriptor.cpp: Added.
(WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
(WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
* Source/WebKit/Shared/WebGPU/WebGPUSurfaceDescriptor.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
* Source/WebKit/Shared/WebGPU/WebGPUSurfaceDescriptor.serialization.in: Added.
* Source/WebKit/Shared/WebGPU/WebGPUSwapChainDescriptor.cpp: Added.
(WebKit::WebGPU::ConvertToBackingContext::convertToBacking):
(WebKit::WebGPU::ConvertFromBackingContext::convertFromBacking):
* Source/WebKit/Shared/WebGPU/WebGPUSwapChainDescriptor.h: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
* Source/WebKit/Shared/WebGPU/WebGPUSwapChainDescriptor.serialization.in: Added.
* Source/WebKit/Sources.txt:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.cpp:
(WebKit::WebGPU::RemoteDeviceProxy::createSurface):
(WebKit::WebGPU::RemoteDeviceProxy::createSwapChain):
(WebKit::WebGPU::RemoteDeviceProxy::createTexture):
(WebKit::WebGPU::RemoteDeviceProxy::createSurfaceTexture):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteDeviceProxy.h:
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteSurfaceProxy.cpp: Copied from Source/WebCore/html/canvas/GPUCanvasContext.idl.
(WebKit::WebGPU::RemoteSurfaceProxy::RemoteSurfaceProxy):
(WebKit::WebGPU::RemoteSurfaceProxy::~RemoteSurfaceProxy):
(WebKit::WebGPU::RemoteSurfaceProxy::destroy):
(WebKit::WebGPU::RemoteSurfaceProxy::setLabelInternal):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteSurfaceProxy.h: Added.
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteSwapChainProxy.cpp: Added.
(WebKit::WebGPU::RemoteSwapChainProxy::RemoteSwapChainProxy):
(WebKit::WebGPU::RemoteSwapChainProxy::~RemoteSwapChainProxy):
(WebKit::WebGPU::RemoteSwapChainProxy::destroy):
(WebKit::WebGPU::RemoteSwapChainProxy::setLabelInternal):
(WebKit::WebGPU::RemoteSwapChainProxy::prepareForDisplay):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/RemoteSwapChainProxy.h: Added.
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/WebGPUDowncastConvertToBackingContext.cpp:
(WebKit::WebGPU::DowncastConvertToBackingContext::convertToBacking):
* Source/WebKit/WebProcess/GPU/graphics/WebGPU/WebGPUDowncastConvertToBackingContext.h:
Send surface and swap chain concepts from WebProcess layer to GPUProcess layer.

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




More information about the webkit-changes mailing list