[WebGPU] Begin implementing WebGPUTexture, WebGPUTextureView, and WebGPUTextureFormat...
authordino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Nov 2018 23:33:53 +0000 (23:33 +0000)
committerdino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Nov 2018 23:33:53 +0000 (23:33 +0000)
commita351100367977a3ca6d37d56f487c4d23330833f
treea64e077755cb5470681dc13b74c5fa8d8e916ef4
parentc547fdb3dc79b0fe2dbd451799bedb01e67efdbd
[WebGPU] Begin implementing WebGPUTexture, WebGPUTextureView, and WebGPUTextureFormatEnum, and WebGPUSwapChain::configure upgrades
https://bugs.webkit.org/show_bug.cgi?id=191794

Patch by Justin Fan <justin_fan@apple.com> on 2018-11-19
Reviewed by Dean Jackson.

Source/WebCore:

Test: webgpu/textures-textureviews.html

Implement basic functionality for getting the next WebGPUTexture and TextureView from the WebGPURenderingContext
to use as a render destination for the next draw call. Also introduce WebGPUTextureFormatEnum and the ability to
configure the context with a chosen texture format.

* CMakeLists.txt:
* DerivedSources.make:
* Modules/webgpu/GPUSwapChain.h: Texture/Pixel format can now be set.
* Modules/webgpu/GPUTexture.h: Added. Interface to a MTLTexture.
* Modules/webgpu/GPUTextureFormatEnum.h: Added.
* Modules/webgpu/WebGPUDevice.cpp:
(WebCore::WebGPUDevice::createRenderPipeline const): Removed now-unnecessary enum class cast.
* Modules/webgpu/WebGPURenderPipelineDescriptor.h: Rather than duplicate GPURenderPipelineDescriptor::PrimitiveTopology, alias to it.
* Modules/webgpu/WebGPUSwapChain.cpp:
(WebCore::WebGPUSwapChain::configure): Can now specify a specific texture format for the underlying CAMetalLayer.
(WebCore::WebGPUSwapChain::getNextTexture): Added. Request the next drawable texture.
* Modules/webgpu/WebGPUSwapChain.h: Expose getNextTexture().
* Modules/webgpu/WebGPUSwapChain.idl:
* Modules/webgpu/WebGPUTexture.cpp: Added.
(WebCore::WebGPUTexture::create):
(WebCore::WebGPUTexture::WebGPUTexture):
(WebCore::WebGPUTexture::createDefaultTextureView):
* Modules/webgpu/WebGPUTexture.h: Added.
* Modules/webgpu/WebGPUTexture.idl: Added.
* Modules/webgpu/WebGPUTextureFormatEnum.h: Added. Type alias for GPUTextureFormatEnum.
* Modules/webgpu/WebGPUTextureFormatEnum.idl: Added. Used to represent any texture format used by WebGPU.
* Modules/webgpu/WebGPUTextureView.cpp: Added.
(WebCore::WebGPUTextureView::create):
(WebCore::WebGPUTextureView::WebGPUTextureView):
* Modules/webgpu/WebGPUTextureView.h: Added.
* Modules/webgpu/WebGPUTextureView.idl: Added.
* Modules/webgpu/cocoa/GPUSwapChainMetal.mm:
(WebCore::GPUSwapChain::create):
(WebCore::GPUSwapChain::setFormat): Called by WebGPUSwapChain::configure().
(WebCore::GPUSwapChain::getNextTexture):
* Modules/webgpu/cocoa/GPUTextureFormatEnumMetal.mm: Added.
(WebCore::convertAndValidate): Convert the WebGPUTextureFormatEnum to a MTLPixelFormat.
* Modules/webgpu/cocoa/GPUTextureMetal.mm: Added.
(WebCore::GPUTexture::create):
(WebCore::GPUTexture::GPUTexture):
(WebCore::GPUTexture::createDefaultTextureView): Uses the pixelFormat of the original texture.
* Sources.txt:
* SourcesCocoa.txt:
* WebCore.xcodeproj/project.pbxproj:
* bindings/js/WebCoreBuiltinNames.h:

LayoutTests:

Did some refactoring to better share code among tests, and added basic functionality test for
WebGPUTextures and WebGPUTextureView, to be fleshed out when their descriptor objects are implemented.

* webgpu/command-buffers.html: Refactored to use basic-webgpu-functions.js.
* webgpu/js/basic-webgpu-functions.js: Added.
(vertex.Vertex.vertex_main): The basic MSL code has been moved into this file.
(fragment.float4.fragment_main):
(runWebGPUTests): Creates a WebGPURenderingContext on a default canvas and runs its provided functions.
(async.runWebGPUTestsOnCanvas):
(async.setUpContexts): Tests proper creation of a basic WebGPURenderingContext.
(setUpModule): Creates a basic WebGPUShaderModule.
(setUpPipelineDescriptor): Creates a basic WebGPURenderPipelineDescriptor.
(setUpPipeline): Creates a basic WebGPURenderPipeline.
(render):
* webgpu/js/set-up-webgpu-contexts.js: Moved into basic-webgpu-functions.js.
* webgpu/render-pipelines-expected.txt:
* webgpu/render-pipelines.html: Refactored to use basic-webgpu-functions.js.
* webgpu/shader-modules.html: Refactored to use basic-webgpu-functions.js.
* webgpu/textures-textureviews-expected.txt: Added.
* webgpu/textures-textureviews.html: Added.
* webgpu/webgpu-basics.html: Refactored to use basic-webgpu-functions.js.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@238382 268f45cc-cd09-0410-ab3c-d52691b4dbfc
35 files changed:
LayoutTests/ChangeLog
LayoutTests/webgpu/command-buffers.html
LayoutTests/webgpu/js/basic-webgpu-functions.js [new file with mode: 0644]
LayoutTests/webgpu/js/set-up-webgpu-contexts.js [deleted file]
LayoutTests/webgpu/render-pipelines-expected.txt
LayoutTests/webgpu/render-pipelines.html
LayoutTests/webgpu/shader-modules.html
LayoutTests/webgpu/textures-textureviews-expected.txt [new file with mode: 0644]
LayoutTests/webgpu/textures-textureviews.html [new file with mode: 0644]
LayoutTests/webgpu/webgpu-basics.html
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebCore/DerivedSources.make
Source/WebCore/Modules/webgpu/GPUSwapChain.h
Source/WebCore/Modules/webgpu/GPUTexture.h [new file with mode: 0644]
Source/WebCore/Modules/webgpu/GPUTextureFormatEnum.h [new file with mode: 0644]
Source/WebCore/Modules/webgpu/WebGPUDevice.cpp
Source/WebCore/Modules/webgpu/WebGPURenderPipelineDescriptor.h
Source/WebCore/Modules/webgpu/WebGPUSwapChain.cpp
Source/WebCore/Modules/webgpu/WebGPUSwapChain.h
Source/WebCore/Modules/webgpu/WebGPUSwapChain.idl
Source/WebCore/Modules/webgpu/WebGPUTexture.cpp [new file with mode: 0644]
Source/WebCore/Modules/webgpu/WebGPUTexture.h [new file with mode: 0644]
Source/WebCore/Modules/webgpu/WebGPUTexture.idl [new file with mode: 0644]
Source/WebCore/Modules/webgpu/WebGPUTextureFormatEnum.h [new file with mode: 0644]
Source/WebCore/Modules/webgpu/WebGPUTextureFormatEnum.idl [new file with mode: 0644]
Source/WebCore/Modules/webgpu/WebGPUTextureView.cpp [new file with mode: 0644]
Source/WebCore/Modules/webgpu/WebGPUTextureView.h [new file with mode: 0644]
Source/WebCore/Modules/webgpu/WebGPUTextureView.idl [new file with mode: 0644]
Source/WebCore/Modules/webgpu/cocoa/GPUSwapChainMetal.mm
Source/WebCore/Modules/webgpu/cocoa/GPUTextureMetal.mm [new file with mode: 0644]
Source/WebCore/Sources.txt
Source/WebCore/SourcesCocoa.txt
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/bindings/js/WebCoreBuiltinNames.h