Changeset 243563 in webkit
- Timestamp:
- Mar 27, 2019, 1:47:55 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 44 edited
- 1 copied
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/webgpu/shader-modules.html (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUAdapter.h (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUBindGroup.h (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUBindGroupDescriptor.cpp (modified) (3 diffs)
-
Source/WebCore/Modules/webgpu/WebGPUBindGroupDescriptor.h (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUBindGroupLayout.h (modified) (2 diffs)
-
Source/WebCore/Modules/webgpu/WebGPUBuffer.h (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUCommandEncoder.cpp (modified) (4 diffs)
-
Source/WebCore/Modules/webgpu/WebGPUCommandEncoder.h (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUDevice.cpp (modified) (5 diffs)
-
Source/WebCore/Modules/webgpu/WebGPUDevice.h (modified) (2 diffs)
-
Source/WebCore/Modules/webgpu/WebGPUPipelineLayout.cpp (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUPipelineLayout.h (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUPipelineLayoutDescriptor.cpp (copied) (copied from trunk/Source/WebCore/Modules/webgpu/WebGPUBindGroup.h ) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUPipelineLayoutDescriptor.h (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUQueue.cpp (modified) (2 diffs)
-
Source/WebCore/Modules/webgpu/WebGPUQueue.h (modified) (2 diffs)
-
Source/WebCore/Modules/webgpu/WebGPURenderPassDescriptor.cpp (modified) (2 diffs)
-
Source/WebCore/Modules/webgpu/WebGPURenderPassEncoder.cpp (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUSampler.h (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUShaderModule.cpp (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUShaderModule.h (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUSwapChain.h (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUTexture.h (modified) (1 diff)
-
Source/WebCore/Modules/webgpu/WebGPUTextureView.h (modified) (1 diff)
-
Source/WebCore/Sources.txt (modified) (1 diff)
-
Source/WebCore/WebCore.xcodeproj/project.pbxproj (modified) (3 diffs)
-
Source/WebCore/platform/graphics/gpu/GPUBindGroupBinding.h (modified) (1 diff)
-
Source/WebCore/platform/graphics/gpu/GPUBindGroupDescriptor.h (modified) (1 diff)
-
Source/WebCore/platform/graphics/gpu/GPUBuffer.h (modified) (2 diffs)
-
Source/WebCore/platform/graphics/gpu/GPUDevice.cpp (modified) (3 diffs)
-
Source/WebCore/platform/graphics/gpu/GPUDevice.h (modified) (3 diffs)
-
Source/WebCore/platform/graphics/gpu/GPUPipelineLayout.cpp (modified) (1 diff)
-
Source/WebCore/platform/graphics/gpu/GPUPipelineLayout.h (modified) (2 diffs)
-
Source/WebCore/platform/graphics/gpu/GPUPipelineLayoutDescriptor.h (modified) (1 diff)
-
Source/WebCore/platform/graphics/gpu/GPURenderPipeline.h (modified) (2 diffs)
-
Source/WebCore/platform/graphics/gpu/GPUShaderModule.h (modified) (1 diff)
-
Source/WebCore/platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm (modified) (2 diffs)
-
Source/WebCore/platform/graphics/gpu/cocoa/GPUBufferMetal.mm (modified) (4 diffs)
-
Source/WebCore/platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm (modified) (1 diff)
-
Source/WebCore/platform/graphics/gpu/cocoa/GPUDeviceMetal.mm (modified) (1 diff)
-
Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm (modified) (2 diffs)
-
Source/WebCore/platform/graphics/gpu/cocoa/GPUShaderModuleMetal.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r243561 r243563 1 2019-03-27 Justin Fan <justin_fan@apple.com> 2 3 [Web GPU] Standardize Web GPU object reference counting and creation logic 4 https://bugs.webkit.org/show_bug.cgi?id=196183 5 6 Reviewed by Dean Jackson. 7 8 GPUShaderModule is no longer nullable. 9 10 * webgpu/shader-modules.html: 11 1 12 2019-03-27 Shawn Roberts <sroberts@apple.com> 2 13 -
trunk/LayoutTests/webgpu/shader-modules.html
r242839 r243563 28 28 ` 29 29 30 const incompleteShaders = `31 #include <metal_stdlib>32 33 using namespace metal;34 35 vertex Vertex vertex_main(uint vid [[vertex_id]])36 {37 return Vertex { float4(0, 0, 0, 1) };38 }39 40 fragment float4 fragment_main(Vertex vertexIn [[stage_in]])41 {42 rreturn vertexIn.position;43 }44 `45 46 30 promise_test(async () => { 47 31 const device = await getBasicDevice(); 48 32 49 const shaderDescriptor0 = { 50 code : "Hello World" 51 }; 52 let shaderModule = device.createShaderModule(shaderDescriptor0); 53 assert_equals(shaderModule, null, "Bad shader code did not create a module."); 54 55 shaderModule = device.createShaderModule({ code: incompleteShaders }); 56 assert_equals(shaderModule, null, "Incomplete shader code did not create a module."); 57 58 shaderModule = device.createShaderModule({ code: shaders }); 33 let shaderModule = device.createShaderModule({ code: shaders }); 59 34 assert_true(shaderModule instanceof GPUShaderModule, "Shader module created successfully."); 60 35 }, "Test shader code validation when creating modules."); -
trunk/Source/WebCore/ChangeLog
r243561 r243563 1 2019-03-27 Justin Fan <justin_fan@apple.com> 2 3 [Web GPU] Standardize Web GPU object reference counting and creation logic 4 https://bugs.webkit.org/show_bug.cgi?id=196183 5 6 Reviewed by Dean Jackson. 7 8 Make getters return raw refs/pointers and provide const versions if necessary. 9 All Web GPU objects are non-nullable, but become no-op if invalid, and descriptors are not moved unless needed. 10 11 No new tests; no change in behavior. 12 13 Getter updates and const qualifications: 14 * Modules/webgpu/WebGPUAdapter.h: 15 (WebCore::WebGPUAdapter::options const): 16 * Modules/webgpu/WebGPUBindGroup.h: 17 (WebCore::WebGPUBindGroup::bindGroup): 18 (WebCore::WebGPUBindGroup::bindGroup const): Deleted. 19 * Modules/webgpu/WebGPUBindGroupDescriptor.cpp: 20 (WebCore::WebGPUBindGroupDescriptor::tryCreateGPUBindGroupDescriptor const): 21 * Modules/webgpu/WebGPUBindGroupDescriptor.h: 22 * Modules/webgpu/WebGPUBindGroupLayout.h: 23 (WebCore::WebGPUBindGroupLayout::bindGroupLayout const): 24 * Modules/webgpu/WebGPUBuffer.h: 25 (WebCore::WebGPUBuffer::buffer): 26 (WebCore::WebGPUBuffer::buffer const): 27 * Modules/webgpu/WebGPURenderPassDescriptor.cpp: 28 (WebCore::WebGPURenderPassDescriptor::tryCreateGPURenderPassDescriptor const): 29 * Modules/webgpu/WebGPURenderPassEncoder.cpp: 30 (WebCore::WebGPURenderPassEncoder::setVertexBuffers): 31 * Modules/webgpu/WebGPUSampler.h: 32 (WebCore::WebGPUSampler::sampler const): 33 * Modules/webgpu/WebGPUSwapChain.h: 34 (WebCore::WebGPUSwapChain::swapChain): 35 (WebCore::WebGPUSwapChain::swapChain const): Deleted. 36 * Modules/webgpu/WebGPUTexture.h: 37 (WebCore::WebGPUTexture::texture): 38 (WebCore::WebGPUTexture::texture const): Deleted. 39 * Modules/webgpu/WebGPUTextureView.h: 40 (WebCore::WebGPUTextureView::texture): 41 (WebCore::WebGPUTextureView::texture const): Deleted. 42 * platform/graphics/gpu/GPUBindGroupBinding.h: 43 * platform/graphics/gpu/GPUBindGroupDescriptor.h: 44 * platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm: 45 (WebCore::tryGetResourceAsMTLSamplerState): 46 47 Web GPU object creation logic: 48 * Modules/webgpu/WebGPUCommandEncoder.cpp: 49 (WebCore::WebGPUBufferCopyView::tryCreateGPUBufferCopyView const): 50 (WebCore::WebGPUTextureCopyView::tryCreateGPUTextureCopyView const): 51 (WebCore::WebGPUCommandEncoder::beginRenderPass): 52 (WebCore::WebGPUCommandEncoder::copyBufferToBuffer): 53 * Modules/webgpu/WebGPUCommandEncoder.h: 54 * Modules/webgpu/WebGPUDevice.cpp: 55 (WebCore::WebGPUDevice::createBuffer const): 56 (WebCore::WebGPUDevice::createTexture const): 57 (WebCore::WebGPUDevice::createPipelineLayout const): 58 (WebCore::WebGPUDevice::createBindGroup const): 59 (WebCore::WebGPUDevice::createShaderModule const): 60 (WebCore::WebGPUDevice::createRenderPipeline const): 61 (WebCore::WebGPUDevice::getQueue const): 62 * Modules/webgpu/WebGPUDevice.h: 63 * Modules/webgpu/WebGPUPipelineLayout.cpp: 64 (WebCore::WebGPUPipelineLayout::create): 65 (WebCore::WebGPUPipelineLayout::WebGPUPipelineLayout): 66 * Modules/webgpu/WebGPUPipelineLayout.h: 67 (WebCore::WebGPUPipelineLayout::pipelineLayout): 68 * Modules/webgpu/WebGPUPipelineLayoutDescriptor.cpp: 69 (WebCore::WebGPUPipelineLayoutDescriptor::tryCreateGPUPipelineLayoutDescriptor const): 70 * Modules/webgpu/WebGPUPipelineLayoutDescriptor.h: 71 * Modules/webgpu/WebGPUQueue.cpp: 72 (WebCore::WebGPUQueue::create): 73 (WebCore::WebGPUQueue::WebGPUQueue): 74 (WebCore::WebGPUQueue::submit): 75 * Modules/webgpu/WebGPUQueue.h: 76 * Modules/webgpu/WebGPUShaderModule.cpp: 77 (WebCore::WebGPUShaderModule::create): 78 (WebCore::WebGPUShaderModule::WebGPUShaderModule): 79 * Modules/webgpu/WebGPUShaderModule.h: 80 (WebCore::WebGPUShaderModule::module const): 81 * platform/graphics/gpu/GPUBuffer.h: 82 * platform/graphics/gpu/GPUDevice.cpp: 83 (WebCore::GPUDevice::tryCreateBuffer): 84 (WebCore::GPUDevice::tryCreateTexture const): 85 (WebCore::GPUDevice::tryCreateShaderModule const): 86 (WebCore::GPUDevice::tryCreateRenderPipeline const): 87 (WebCore::GPUDevice::tryGetQueue const): 88 (WebCore::GPUDevice::createShaderModule const): Deleted. 89 (WebCore::GPUDevice::createRenderPipeline const): Deleted. 90 (WebCore::GPUDevice::getQueue const): Deleted. 91 * platform/graphics/gpu/GPUDevice.h: 92 * platform/graphics/gpu/GPUPipelineLayout.cpp: 93 (WebCore::GPUPipelineLayout::create): 94 (WebCore::GPUPipelineLayout::GPUPipelineLayout): 95 * platform/graphics/gpu/GPUPipelineLayout.h: 96 (WebCore::GPUPipelineLayout::bindGroupLayouts const): 97 * platform/graphics/gpu/GPUPipelineLayoutDescriptor.h: 98 * platform/graphics/gpu/GPURenderPipeline.h: 99 * platform/graphics/gpu/GPUShaderModule.h: 100 * platform/graphics/gpu/cocoa/GPUBufferMetal.mm: 101 (WebCore::GPUBuffer::tryCreate): 102 (WebCore::GPUBuffer::GPUBuffer): 103 (WebCore::GPUBuffer::setSubData): 104 * platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm: 105 (WebCore::GPUCommandBuffer::tryCreate): 106 * platform/graphics/gpu/cocoa/GPUDeviceMetal.mm: 107 (WebCore::GPUDevice::tryCreate): 108 * platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm: 109 (WebCore::GPURenderPipeline::tryCreate): 110 (WebCore::GPURenderPipeline::GPURenderPipeline): 111 (WebCore::GPURenderPipeline::create): Deleted. 112 * platform/graphics/gpu/cocoa/GPUShaderModuleMetal.mm: 113 (WebCore::GPUShaderModule::tryCreate): 114 (WebCore::GPUShaderModule::create): Deleted. 115 116 Add WebGPUPipelineLayoutDescriptor.cpp to project: 117 * Sources.txt: 118 * WebCore.xcodeproj/project.pbxproj: 119 1 120 2019-03-27 Shawn Roberts <sroberts@apple.com> 2 121 -
trunk/Source/WebCore/Modules/webgpu/WebGPUAdapter.h
r243090 r243563 46 46 void requestDevice(DeviceRequestPromise&&) const; 47 47 48 Optional<GPURequestAdapterOptions>options() const { return m_options; }48 const Optional<GPURequestAdapterOptions>& options() const { return m_options; } 49 49 50 50 private: -
trunk/Source/WebCore/Modules/webgpu/WebGPUBindGroup.h
r242148 r243563 38 38 static Ref<WebGPUBindGroup> create(RefPtr<GPUBindGroup>&&); 39 39 40 GPUBindGroup* bindGroup() const{ return m_bindGroup.get(); }40 GPUBindGroup* bindGroup() { return m_bindGroup.get(); } 41 41 42 42 private: -
trunk/Source/WebCore/Modules/webgpu/WebGPUBindGroupDescriptor.cpp
r242972 r243563 104 104 return WTF::nullopt; 105 105 106 return static_cast<GPUBindingResource>( texture.releaseNonNull());106 return static_cast<GPUBindingResource>(makeRef(*texture)); 107 107 }, [&layoutBinding, functionName] (WebGPUBufferBinding bufferBinding) -> Optional<GPUBindingResource> { 108 108 if (!bufferBinding.buffer) … … 112 112 return WTF::nullopt; 113 113 114 if (!validateBufferBindingType(buffer .get(), layoutBinding, functionName))114 if (!validateBufferBindingType(buffer, layoutBinding, functionName)) 115 115 return WTF::nullopt; 116 116 117 return static_cast<GPUBindingResource>(GPUBufferBinding { buffer.releaseNonNull(), bufferBinding.offset, bufferBinding.size });117 return static_cast<GPUBindingResource>(GPUBufferBinding { makeRef(*buffer), bufferBinding.offset, bufferBinding.size }); 118 118 }); 119 119 … … 127 127 } 128 128 129 return GPUBindGroupDescriptor { layout->bindGroupLayout().releaseNonNull(), WTFMove(bindGroupBindings) };129 return GPUBindGroupDescriptor { makeRef(*layout->bindGroupLayout()), WTFMove(bindGroupBindings) }; 130 130 } 131 131 -
trunk/Source/WebCore/Modules/webgpu/WebGPUBindGroupDescriptor.h
r242839 r243563 41 41 Optional<GPUBindGroupDescriptor> tryCreateGPUBindGroupDescriptor() const; 42 42 43 RefPtr< WebGPUBindGroupLayout> layout;43 RefPtr<const WebGPUBindGroupLayout> layout; 44 44 Vector<WebGPUBindGroupBinding> bindings; 45 45 }; -
trunk/Source/WebCore/Modules/webgpu/WebGPUBindGroupLayout.h
r239515 r243563 29 29 30 30 #include "GPUBindGroupLayout.h" 31 32 31 #include <wtf/RefCounted.h> 33 32 #include <wtf/RefPtr.h> … … 39 38 static Ref<WebGPUBindGroupLayout> create(RefPtr<GPUBindGroupLayout>&&); 40 39 41 RefPtr<GPUBindGroupLayout> bindGroupLayout() const { return m_bindGroupLayout; }40 const GPUBindGroupLayout* bindGroupLayout() const { return m_bindGroupLayout.get(); } 42 41 43 42 private: -
trunk/Source/WebCore/Modules/webgpu/WebGPUBuffer.h
r242164 r243563 46 46 static Ref<WebGPUBuffer> create(RefPtr<GPUBuffer>&&); 47 47 48 RefPtr<GPUBuffer> buffer() const { return m_buffer; } 48 GPUBuffer* buffer() { return m_buffer.get(); } 49 const GPUBuffer* buffer() const { return m_buffer.get(); } 49 50 50 51 void setSubData(unsigned long long, const JSC::ArrayBuffer&); -
trunk/Source/WebCore/Modules/webgpu/WebGPUCommandEncoder.cpp
r243457 r243563 48 48 // FIXME: Add Web GPU validation. 49 49 50 return GPUBufferCopyView { buffer->buffer().releaseNonNull(), *this };50 return GPUBufferCopyView { makeRef(*buffer->buffer()), *this }; 51 51 } 52 52 … … 60 60 // FIXME: Add Web GPU validation. 61 61 62 return GPUTextureCopyView { texture->texture().releaseNonNull(), *this };62 return GPUTextureCopyView { makeRef(*texture->texture()), *this }; 63 63 } 64 64 … … 73 73 } 74 74 75 Ref<WebGPURenderPassEncoder> WebGPUCommandEncoder::beginRenderPass( WebGPURenderPassDescriptor&& descriptor)75 Ref<WebGPURenderPassEncoder> WebGPUCommandEncoder::beginRenderPass(const WebGPURenderPassDescriptor& descriptor) 76 76 { 77 77 if (!m_commandBuffer) { … … 87 87 } 88 88 89 void WebGPUCommandEncoder::copyBufferToBuffer( const WebGPUBuffer& src, unsigned long srcOffset, constWebGPUBuffer& dst, unsigned long dstOffset, unsigned long size)89 void WebGPUCommandEncoder::copyBufferToBuffer(WebGPUBuffer& src, unsigned long srcOffset, WebGPUBuffer& dst, unsigned long dstOffset, unsigned long size) 90 90 { 91 91 if (!m_commandBuffer) { -
trunk/Source/WebCore/Modules/webgpu/WebGPUCommandEncoder.h
r243457 r243563 58 58 static Ref<WebGPUCommandEncoder> create(RefPtr<GPUCommandBuffer>&&); 59 59 60 Ref<WebGPURenderPassEncoder> beginRenderPass( WebGPURenderPassDescriptor&&);61 void copyBufferToBuffer( const WebGPUBuffer&, unsigned long srcOffset, constWebGPUBuffer&, unsigned long dstOffset, unsigned long size);60 Ref<WebGPURenderPassEncoder> beginRenderPass(const WebGPURenderPassDescriptor&); 61 void copyBufferToBuffer(WebGPUBuffer&, unsigned long srcOffset, WebGPUBuffer&, unsigned long dstOffset, unsigned long size); 62 62 void copyBufferToTexture(const WebGPUBufferCopyView&, const WebGPUTextureCopyView&, const GPUExtent3D&); 63 63 void copyTextureToBuffer(const WebGPUTextureCopyView&, const WebGPUBufferCopyView&, const GPUExtent3D&); -
trunk/Source/WebCore/Modules/webgpu/WebGPUDevice.cpp
r243457 r243563 77 77 } 78 78 79 Ref<WebGPUBuffer> WebGPUDevice::createBuffer( GPUBufferDescriptor&& descriptor) const79 Ref<WebGPUBuffer> WebGPUDevice::createBuffer(const GPUBufferDescriptor& descriptor) const 80 80 { 81 auto buffer = m_device->tryCreateBuffer( WTFMove(descriptor));81 auto buffer = m_device->tryCreateBuffer(descriptor); 82 82 return WebGPUBuffer::create(WTFMove(buffer)); 83 83 } 84 84 85 Ref<WebGPUTexture> WebGPUDevice::createTexture( GPUTextureDescriptor&& descriptor) const85 Ref<WebGPUTexture> WebGPUDevice::createTexture(const GPUTextureDescriptor& descriptor) const 86 86 { 87 auto texture = m_device->tryCreateTexture( WTFMove(descriptor));87 auto texture = m_device->tryCreateTexture(descriptor); 88 88 return WebGPUTexture::create(WTFMove(texture)); 89 89 } … … 101 101 } 102 102 103 Ref<WebGPUPipelineLayout> WebGPUDevice::createPipelineLayout( WebGPUPipelineLayoutDescriptor&& descriptor) const103 Ref<WebGPUPipelineLayout> WebGPUDevice::createPipelineLayout(const WebGPUPipelineLayoutDescriptor& descriptor) const 104 104 { 105 auto bindGroupLayouts = descriptor.bindGroupLayouts.map([] (const auto& layout) -> RefPtr<const GPUBindGroupLayout> { 106 return layout->bindGroupLayout(); 107 }); 108 auto layout = m_device->createPipelineLayout(GPUPipelineLayoutDescriptor { WTFMove(bindGroupLayouts) }); 105 auto gpuDescriptor = descriptor.tryCreateGPUPipelineLayoutDescriptor(); 106 if (!gpuDescriptor) 107 return WebGPUPipelineLayout::create(nullptr); 108 109 auto layout = m_device->createPipelineLayout(WTFMove(*gpuDescriptor)); 109 110 return WebGPUPipelineLayout::create(WTFMove(layout)); 110 111 } 111 112 112 Ref<WebGPUBindGroup> WebGPUDevice::createBindGroup( WebGPUBindGroupDescriptor&& descriptor) const113 Ref<WebGPUBindGroup> WebGPUDevice::createBindGroup(const WebGPUBindGroupDescriptor& descriptor) const 113 114 { 114 115 auto gpuDescriptor = descriptor.tryCreateGPUBindGroupDescriptor(); … … 120 121 } 121 122 122 Ref Ptr<WebGPUShaderModule> WebGPUDevice::createShaderModule(WebGPUShaderModuleDescriptor&& descriptor) const123 Ref<WebGPUShaderModule> WebGPUDevice::createShaderModule(const WebGPUShaderModuleDescriptor& descriptor) const 123 124 { 124 125 // FIXME: What can be validated here? 125 if (auto module = m_device->createShaderModule(GPUShaderModuleDescriptor { descriptor.code, descriptor.isWHLSL })) 126 return WebGPUShaderModule::create(module.releaseNonNull()); 127 return nullptr; 126 auto module = m_device->tryCreateShaderModule(GPUShaderModuleDescriptor { descriptor.code, descriptor.isWHLSL }); 127 return WebGPUShaderModule::create(WTFMove(module)); 128 128 } 129 129 … … 134 134 return WebGPURenderPipeline::create(nullptr); 135 135 136 auto pipeline = m_device-> createRenderPipeline(WTFMove(*gpuDescriptor));136 auto pipeline = m_device->tryCreateRenderPipeline(*gpuDescriptor); 137 137 return WebGPURenderPipeline::create(WTFMove(pipeline)); 138 138 } … … 158 158 } 159 159 160 Ref Ptr<WebGPUQueue> WebGPUDevice::getQueue() const160 Ref<WebGPUQueue> WebGPUDevice::getQueue() const 161 161 { 162 162 if (!m_queue) 163 m_queue = WebGPUQueue::create(m_device-> getQueue());163 m_queue = WebGPUQueue::create(m_device->tryGetQueue()); 164 164 165 return m _queue;165 return makeRef(*m_queue.get()); 166 166 } 167 167 -
trunk/Source/WebCore/Modules/webgpu/WebGPUDevice.h
r243457 r243563 66 66 const GPUDevice& device() const { return m_device.get(); } 67 67 68 Ref<WebGPUBuffer> createBuffer( GPUBufferDescriptor&&) const;69 Ref<WebGPUTexture> createTexture( GPUTextureDescriptor&&) const;68 Ref<WebGPUBuffer> createBuffer(const GPUBufferDescriptor&) const; 69 Ref<WebGPUTexture> createTexture(const GPUTextureDescriptor&) const; 70 70 Ref<WebGPUSampler> createSampler(const GPUSamplerDescriptor&) const; 71 71 72 72 Ref<WebGPUBindGroupLayout> createBindGroupLayout(const GPUBindGroupLayoutDescriptor&) const; 73 Ref<WebGPUPipelineLayout> createPipelineLayout( WebGPUPipelineLayoutDescriptor&&) const;74 Ref<WebGPUBindGroup> createBindGroup( WebGPUBindGroupDescriptor&&) const;73 Ref<WebGPUPipelineLayout> createPipelineLayout(const WebGPUPipelineLayoutDescriptor&) const; 74 Ref<WebGPUBindGroup> createBindGroup(const WebGPUBindGroupDescriptor&) const; 75 75 76 Ref Ptr<WebGPUShaderModule> createShaderModule(WebGPUShaderModuleDescriptor&&) const;76 Ref<WebGPUShaderModule> createShaderModule(const WebGPUShaderModuleDescriptor&) const; 77 77 Ref<WebGPURenderPipeline> createRenderPipeline(const WebGPURenderPipelineDescriptor&) const; 78 78 … … 81 81 Ref<WebGPUSwapChain> createSwapChain(const WebGPUSwapChainDescriptor&) const; 82 82 83 Ref Ptr<WebGPUQueue> getQueue() const;83 Ref<WebGPUQueue> getQueue() const; 84 84 85 85 private: -
trunk/Source/WebCore/Modules/webgpu/WebGPUPipelineLayout.cpp
r239410 r243563 31 31 namespace WebCore { 32 32 33 Ref<WebGPUPipelineLayout> WebGPUPipelineLayout::create(Ref <GPUPipelineLayout>&& layout)33 Ref<WebGPUPipelineLayout> WebGPUPipelineLayout::create(RefPtr<GPUPipelineLayout>&& layout) 34 34 { 35 35 return adoptRef(*new WebGPUPipelineLayout(WTFMove(layout))); 36 36 } 37 37 38 WebGPUPipelineLayout::WebGPUPipelineLayout(Ref <GPUPipelineLayout>&& layout)38 WebGPUPipelineLayout::WebGPUPipelineLayout(RefPtr<GPUPipelineLayout>&& layout) 39 39 : m_pipelineLayout(WTFMove(layout)) 40 40 { -
trunk/Source/WebCore/Modules/webgpu/WebGPUPipelineLayout.h
r242839 r243563 37 37 class WebGPUPipelineLayout : public RefCounted<WebGPUPipelineLayout> { 38 38 public: 39 static Ref<WebGPUPipelineLayout> create(Ref <GPUPipelineLayout>&&);39 static Ref<WebGPUPipelineLayout> create(RefPtr<GPUPipelineLayout>&&); 40 40 41 GPUPipelineLayout &pipelineLayout() { return m_pipelineLayout.get(); }41 GPUPipelineLayout* pipelineLayout() { return m_pipelineLayout.get(); } 42 42 43 43 private: 44 explicit WebGPUPipelineLayout(Ref <GPUPipelineLayout>&&);44 explicit WebGPUPipelineLayout(RefPtr<GPUPipelineLayout>&&); 45 45 46 Ref <GPUPipelineLayout> m_pipelineLayout;46 RefPtr<GPUPipelineLayout> m_pipelineLayout; 47 47 }; 48 48 -
trunk/Source/WebCore/Modules/webgpu/WebGPUPipelineLayoutDescriptor.cpp
r243561 r243563 24 24 */ 25 25 26 #pragma once 26 #include "config.h" 27 #include "WebGPUPipelineLayoutDescriptor.h" 27 28 28 29 #if ENABLE(WEBGPU) 29 30 30 #include "GPUBindGroup.h" 31 #include <wtf/RefCounted.h> 32 #include <wtf/RefPtr.h> 31 #include "GPUPipelineLayoutDescriptor.h" 32 #include "Logging.h" 33 33 34 34 namespace WebCore { 35 36 class WebGPUBindGroup : public RefCounted<WebGPUBindGroup> { 37 public: 38 static Ref<WebGPUBindGroup> create(RefPtr<GPUBindGroup>&&); 39 40 GPUBindGroup* bindGroup() const { return m_bindGroup.get(); } 41 42 private: 43 explicit WebGPUBindGroup(RefPtr<GPUBindGroup>&&); 44 45 RefPtr<GPUBindGroup> m_bindGroup; 46 }; 35 36 Optional<GPUPipelineLayoutDescriptor> WebGPUPipelineLayoutDescriptor::tryCreateGPUPipelineLayoutDescriptor() const 37 { 38 Vector<Ref<const GPUBindGroupLayout>> gpuLayouts; 39 gpuLayouts.reserveCapacity(bindGroupLayouts.size()); 40 41 for (const auto& layout : bindGroupLayouts) { 42 if (!layout || !layout->bindGroupLayout()) { 43 LOG(WebGPU, "GPUDevice::createPipelineLayout(): Invalid GPUBindGroupLayout!"); 44 return WTF::nullopt; 45 } 46 47 gpuLayouts.uncheckedAppend(makeRef(*layout->bindGroupLayout())); 48 } 49 50 return GPUPipelineLayoutDescriptor { WTFMove(gpuLayouts) }; 51 } 47 52 48 53 } // namespace WebCore -
trunk/Source/WebCore/Modules/webgpu/WebGPUPipelineLayoutDescriptor.h
r239410 r243563 29 29 30 30 #include "WebGPUBindGroupLayout.h" 31 31 #include <wtf/Optional.h> 32 32 #include <wtf/RefPtr.h> 33 33 #include <wtf/Vector.h> 34 34 35 35 namespace WebCore { 36 37 struct GPUPipelineLayoutDescriptor; 36 38 37 39 struct WebGPUPipelineLayoutDescriptor { 40 Optional<GPUPipelineLayoutDescriptor> tryCreateGPUPipelineLayoutDescriptor() const; 41 38 42 Vector<RefPtr<WebGPUBindGroupLayout>> bindGroupLayouts; 39 43 }; -
trunk/Source/WebCore/Modules/webgpu/WebGPUQueue.cpp
r242974 r243563 36 36 namespace WebCore { 37 37 38 Ref Ptr<WebGPUQueue> WebGPUQueue::create(RefPtr<GPUQueue>&& queue)38 Ref<WebGPUQueue> WebGPUQueue::create(RefPtr<GPUQueue>&& queue) 39 39 { 40 return queue ? adoptRef(new WebGPUQueue(queue.releaseNonNull())) : nullptr;40 return adoptRef(*new WebGPUQueue(WTFMove(queue))); 41 41 } 42 42 43 WebGPUQueue::WebGPUQueue(Ref <GPUQueue>&& queue)43 WebGPUQueue::WebGPUQueue(RefPtr<GPUQueue>&& queue) 44 44 : m_queue(WTFMove(queue)) 45 45 { … … 48 48 void WebGPUQueue::submit(const Vector<RefPtr<WebGPUCommandBuffer>>& buffers) 49 49 { 50 if (!m_queue) { 51 LOG(WebGPU, "GPUQueue::submit(): Invalid operation!"); 52 return; 53 } 50 54 Vector<Ref<GPUCommandBuffer>> gpuBuffers; 51 55 gpuBuffers.reserveCapacity(buffers.size()); -
trunk/Source/WebCore/Modules/webgpu/WebGPUQueue.h
r242974 r243563 40 40 class WebGPUQueue : public RefCounted<WebGPUQueue> { 41 41 public: 42 static Ref Ptr<WebGPUQueue> create(RefPtr<GPUQueue>&&);42 static Ref<WebGPUQueue> create(RefPtr<GPUQueue>&&); 43 43 44 44 void submit(const Vector<RefPtr<WebGPUCommandBuffer>>&); … … 48 48 49 49 private: 50 WebGPUQueue(Ref <GPUQueue>&&);50 WebGPUQueue(RefPtr<GPUQueue>&&); 51 51 52 Ref <GPUQueue> m_queue;52 RefPtr<GPUQueue> m_queue; 53 53 }; 54 54 -
trunk/Source/WebCore/Modules/webgpu/WebGPURenderPassDescriptor.cpp
r242839 r243563 63 63 return WTF::nullopt; 64 64 } 65 gpuColorAttachments.append(GPURenderPassColorAttachmentDescriptor { colorAttachment.attachment->texture().releaseNonNull(), colorAttachment });65 gpuColorAttachments.append(GPURenderPassColorAttachmentDescriptor { makeRef(*colorAttachment.attachment->texture()), colorAttachment }); 66 66 } 67 67 … … 75 75 return WTF::nullopt; 76 76 } 77 gpuDepthAttachment = GPURenderPassDepthStencilAttachmentDescriptor { depthStencilAttachment->attachment->texture().releaseNonNull(), *depthStencilAttachment };77 gpuDepthAttachment = GPURenderPassDepthStencilAttachmentDescriptor { makeRef(*depthStencilAttachment->attachment->texture()), *depthStencilAttachment }; 78 78 } 79 79 -
trunk/Source/WebCore/Modules/webgpu/WebGPURenderPassEncoder.cpp
r243457 r243563 93 93 } 94 94 95 gpuBuffers.uncheckedAppend( buffer->buffer().releaseNonNull());95 gpuBuffers.uncheckedAppend(makeRef(*buffer->buffer())); 96 96 } 97 97 -
trunk/Source/WebCore/Modules/webgpu/WebGPUSampler.h
r242615 r243563 38 38 static Ref<WebGPUSampler> create(RefPtr<GPUSampler>&&); 39 39 40 GPUSampler* sampler() const { return m_sampler.get(); }40 const GPUSampler* sampler() const { return m_sampler.get(); } 41 41 42 42 private: -
trunk/Source/WebCore/Modules/webgpu/WebGPUShaderModule.cpp
r239535 r243563 31 31 namespace WebCore { 32 32 33 Ref<WebGPUShaderModule> WebGPUShaderModule::create(Ref <GPUShaderModule>&& module)33 Ref<WebGPUShaderModule> WebGPUShaderModule::create(RefPtr<GPUShaderModule>&& module) 34 34 { 35 35 return adoptRef(*new WebGPUShaderModule(WTFMove(module))); 36 36 } 37 37 38 WebGPUShaderModule::WebGPUShaderModule(Ref <GPUShaderModule>&& module)38 WebGPUShaderModule::WebGPUShaderModule(RefPtr<GPUShaderModule>&& module) 39 39 : m_module(WTFMove(module)) 40 40 { 41 UNUSED_PARAM(m_module);42 41 } 43 42 -
trunk/Source/WebCore/Modules/webgpu/WebGPUShaderModule.h
r239535 r243563 37 37 class WebGPUShaderModule : public RefCounted<WebGPUShaderModule> { 38 38 public: 39 static Ref<WebGPUShaderModule> create(Ref <GPUShaderModule>&&);39 static Ref<WebGPUShaderModule> create(RefPtr<GPUShaderModule>&&); 40 40 41 const GPUShaderModule* module() const { return m_module. ptr(); }41 const GPUShaderModule* module() const { return m_module.get(); } 42 42 43 43 private: 44 WebGPUShaderModule(Ref <GPUShaderModule>&&);44 WebGPUShaderModule(RefPtr<GPUShaderModule>&&); 45 45 46 Ref <GPUShaderModule> m_module;46 RefPtr<GPUShaderModule> m_module; 47 47 }; 48 48 -
trunk/Source/WebCore/Modules/webgpu/WebGPUSwapChain.h
r242759 r243563 41 41 static Ref<WebGPUSwapChain> create(RefPtr<GPUSwapChain>&&); 42 42 43 GPUSwapChain* swapChain() const{ return m_swapChain.get(); }43 GPUSwapChain* swapChain() { return m_swapChain.get(); } 44 44 45 45 Ref<WebGPUTexture> getCurrentTexture(); -
trunk/Source/WebCore/Modules/webgpu/WebGPUTexture.h
r243089 r243563 40 40 static Ref<WebGPUTexture> create(RefPtr<GPUTexture>&&); 41 41 42 RefPtr<GPUTexture> texture() const { return m_texture; }42 GPUTexture* texture() { return m_texture.get(); } 43 43 44 44 Ref<WebGPUTextureView> createDefaultView(); -
trunk/Source/WebCore/Modules/webgpu/WebGPUTextureView.h
r242582 r243563 39 39 ~WebGPUTextureView() { destroy(); } 40 40 41 RefPtr<GPUTexture> texture() const { return m_texture; }41 GPUTexture* texture() { return m_texture.get(); } 42 42 43 43 void destroy(); -
trunk/Source/WebCore/Sources.txt
r243555 r243563 359 359 Modules/webgpu/WebGPUQueue.cpp 360 360 Modules/webgpu/WebGPUPipelineLayout.cpp 361 Modules/webgpu/WebGPUPipelineLayoutDescriptor.cpp 361 362 Modules/webgpu/WebGPUProgrammablePassEncoder.cpp 362 363 Modules/webgpu/WebGPURenderPassDescriptor.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r243555 r243563 13931 13931 D003288721C9A4E500622AA6 /* GPUPipelineLayout.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GPUPipelineLayout.cpp; sourceTree = "<group>"; }; 13932 13932 D003914122248D400098998C /* GPUProgrammablePassEncoder.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GPUProgrammablePassEncoder.cpp; sourceTree = "<group>"; }; 13933 D00487D222457BEA00EED7D9 /* WebGPUPipelineLayoutDescriptor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebGPUPipelineLayoutDescriptor.cpp; sourceTree = "<group>"; }; 13933 13934 D00F5940216ECC7A000D71DB /* DOMWindowWebGPU.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DOMWindowWebGPU.h; sourceTree = "<group>"; }; 13934 13935 D00F5941216ECC7A000D71DB /* DOMWindowWebGPU.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DOMWindowWebGPU.cpp; sourceTree = "<group>"; }; … … 26136 26137 D05A99E421C9BF2C00032B75 /* WebGPUPipelineLayout.h */, 26137 26138 D05A99E621C9BF2C00032B75 /* WebGPUPipelineLayout.idl */, 26139 D00487D222457BEA00EED7D9 /* WebGPUPipelineLayoutDescriptor.cpp */, 26138 26140 D05A99E121C9B50F00032B75 /* WebGPUPipelineLayoutDescriptor.h */, 26139 26141 D05A99E221C9B50F00032B75 /* WebGPUPipelineLayoutDescriptor.idl */, … … 26176 26178 D0EACF872193EE4E000FA75C /* WebGPUTextureView.h */, 26177 26179 D0EACF892193EE4E000FA75C /* WebGPUTextureView.idl */, 26180 D00487D222457BEA00EED7D9 /* WebGPUPipelineLayoutDescriptor.cpp */, 26178 26181 ); 26179 26182 path = webgpu; -
trunk/Source/WebCore/platform/graphics/gpu/GPUBindGroupBinding.h
r242615 r243563 35 35 namespace WebCore { 36 36 37 using GPUBindingResource = Variant<Ref< GPUSampler>, Ref<GPUTexture>, GPUBufferBinding>;37 using GPUBindingResource = Variant<Ref<const GPUSampler>, Ref<GPUTexture>, GPUBufferBinding>; 38 38 39 39 struct GPUBindGroupBinding { -
trunk/Source/WebCore/platform/graphics/gpu/GPUBindGroupDescriptor.h
r239837 r243563 36 36 37 37 struct GPUBindGroupDescriptor { 38 Ref< GPUBindGroupLayout> layout;38 Ref<const GPUBindGroupLayout> layout; 39 39 Vector<GPUBindGroupBinding> bindings; 40 40 }; -
trunk/Source/WebCore/platform/graphics/gpu/GPUBuffer.h
r242615 r243563 69 69 ~GPUBuffer(); 70 70 71 static RefPtr<GPUBuffer> tryCreate(Ref<GPUDevice>&&, GPUBufferDescriptor&&);71 static RefPtr<GPUBuffer> tryCreate(Ref<GPUDevice>&&, const GPUBufferDescriptor&); 72 72 73 73 PlatformBuffer *platformBuffer() const { return m_platformBuffer.get(); } … … 110 110 static bool validateBufferUsage(const GPUDevice&, OptionSet<GPUBufferUsage::Flags>); 111 111 112 GPUBuffer(PlatformBufferSmartPtr&&, const GPUBufferDescriptor&, OptionSet<GPUBufferUsage::Flags>, Ref<GPUDevice>&&);112 GPUBuffer(PlatformBufferSmartPtr&&, unsigned long, OptionSet<GPUBufferUsage::Flags>, Ref<GPUDevice>&&); 113 113 114 114 JSC::ArrayBuffer* stagingBufferForRead(); -
trunk/Source/WebCore/platform/graphics/gpu/GPUDevice.cpp
r243457 r243563 49 49 namespace WebCore { 50 50 51 RefPtr<GPUBuffer> GPUDevice::tryCreateBuffer( GPUBufferDescriptor&& descriptor)51 RefPtr<GPUBuffer> GPUDevice::tryCreateBuffer(const GPUBufferDescriptor& descriptor) 52 52 { 53 return GPUBuffer::tryCreate(makeRef(*this), WTFMove(descriptor));53 return GPUBuffer::tryCreate(makeRef(*this), descriptor); 54 54 } 55 55 56 RefPtr<GPUTexture> GPUDevice::tryCreateTexture( GPUTextureDescriptor&& descriptor) const56 RefPtr<GPUTexture> GPUDevice::tryCreateTexture(const GPUTextureDescriptor& descriptor) const 57 57 { 58 return GPUTexture::tryCreate(*this, WTFMove(descriptor));58 return GPUTexture::tryCreate(*this, descriptor); 59 59 } 60 60 … … 74 74 } 75 75 76 RefPtr<GPUShaderModule> GPUDevice:: createShaderModule(GPUShaderModuleDescriptor&& descriptor) const76 RefPtr<GPUShaderModule> GPUDevice::tryCreateShaderModule(const GPUShaderModuleDescriptor& descriptor) const 77 77 { 78 return GPUShaderModule:: create(*this, WTFMove(descriptor));78 return GPUShaderModule::tryCreate(*this, descriptor); 79 79 } 80 80 81 RefPtr<GPURenderPipeline> GPUDevice:: createRenderPipeline(GPURenderPipelineDescriptor&& descriptor) const81 RefPtr<GPURenderPipeline> GPUDevice::tryCreateRenderPipeline(const GPURenderPipelineDescriptor& descriptor) const 82 82 { 83 return GPURenderPipeline:: create(*this, WTFMove(descriptor));83 return GPURenderPipeline::tryCreate(*this, descriptor); 84 84 } 85 85 … … 95 95 } 96 96 97 RefPtr<GPUQueue> GPUDevice:: getQueue() const97 RefPtr<GPUQueue> GPUDevice::tryGetQueue() const 98 98 { 99 99 if (!m_queue) -
trunk/Source/WebCore/platform/graphics/gpu/GPUDevice.h
r243457 r243563 62 62 class GPUDevice : public RefCounted<GPUDevice>, public CanMakeWeakPtr<GPUDevice> { 63 63 public: 64 static RefPtr<GPUDevice> tryCreate( Optional<GPURequestAdapterOptions>&&);64 static RefPtr<GPUDevice> tryCreate(const Optional<GPURequestAdapterOptions>&); 65 65 66 RefPtr<GPUBuffer> tryCreateBuffer( GPUBufferDescriptor&&);67 RefPtr<GPUTexture> tryCreateTexture( GPUTextureDescriptor&&) const;66 RefPtr<GPUBuffer> tryCreateBuffer(const GPUBufferDescriptor&); 67 RefPtr<GPUTexture> tryCreateTexture(const GPUTextureDescriptor&) const; 68 68 RefPtr<GPUSampler> tryCreateSampler(const GPUSamplerDescriptor&) const; 69 69 … … 71 71 Ref<GPUPipelineLayout> createPipelineLayout(GPUPipelineLayoutDescriptor&&) const; 72 72 73 RefPtr<GPUShaderModule> createShaderModule(GPUShaderModuleDescriptor&&) const;74 RefPtr<GPURenderPipeline> createRenderPipeline(GPURenderPipelineDescriptor&&) const;73 RefPtr<GPUShaderModule> tryCreateShaderModule(const GPUShaderModuleDescriptor&) const; 74 RefPtr<GPURenderPipeline> tryCreateRenderPipeline(const GPURenderPipelineDescriptor&) const; 75 75 76 76 RefPtr<GPUCommandBuffer> tryCreateCommandBuffer() const; … … 78 78 RefPtr<GPUSwapChain> tryCreateSwapChain(const GPUSwapChainDescriptor&, int width, int height) const; 79 79 80 RefPtr<GPUQueue> getQueue() const;80 RefPtr<GPUQueue> tryGetQueue() const; 81 81 PlatformDevice* platformDevice() const { return m_platformDevice.get(); } 82 82 GPUSwapChain* swapChain() const { return m_swapChain.get(); } 83 83 84 84 private: 85 GPUDevice(PlatformDeviceSmartPtr&&);85 explicit GPUDevice(PlatformDeviceSmartPtr&&); 86 86 87 87 PlatformDeviceSmartPtr m_platformDevice; -
trunk/Source/WebCore/platform/graphics/gpu/GPUPipelineLayout.cpp
r242575 r243563 33 33 Ref<GPUPipelineLayout> GPUPipelineLayout::create(GPUPipelineLayoutDescriptor&& descriptor) 34 34 { 35 return adoptRef(*new GPUPipelineLayout(WTFMove(descriptor )));35 return adoptRef(*new GPUPipelineLayout(WTFMove(descriptor.bindGroupLayouts))); 36 36 } 37 37 38 GPUPipelineLayout::GPUPipelineLayout( GPUPipelineLayoutDescriptor&& descriptor)39 : m_bindGroupLayouts(WTFMove( descriptor.bindGroupLayouts))38 GPUPipelineLayout::GPUPipelineLayout(Vector<Ref<const GPUBindGroupLayout>>&& layouts) 39 : m_bindGroupLayouts(WTFMove(layouts)) 40 40 { 41 41 } -
trunk/Source/WebCore/platform/graphics/gpu/GPUPipelineLayout.h
r243091 r243563 29 29 30 30 #include "GPUPipelineLayoutDescriptor.h" 31 32 31 #include <wtf/Ref.h> 33 32 #include <wtf/RefCounted.h> … … 39 38 static Ref<GPUPipelineLayout> create(GPUPipelineLayoutDescriptor&&); 40 39 41 const Vector<Ref Ptr<const GPUBindGroupLayout>>& bindGroupLayouts() const { return m_bindGroupLayouts; }40 const Vector<Ref<const GPUBindGroupLayout>>& bindGroupLayouts() const { return m_bindGroupLayouts; } 42 41 43 42 private: 44 explicit GPUPipelineLayout( GPUPipelineLayoutDescriptor&&);43 explicit GPUPipelineLayout(Vector<Ref<const GPUBindGroupLayout>>&&); 45 44 46 Vector<Ref Ptr<const GPUBindGroupLayout>> m_bindGroupLayouts;45 Vector<Ref<const GPUBindGroupLayout>> m_bindGroupLayouts; 47 46 }; 48 47 -
trunk/Source/WebCore/platform/graphics/gpu/GPUPipelineLayoutDescriptor.h
r239410 r243563 35 35 36 36 struct GPUPipelineLayoutDescriptor { 37 Vector<Ref Ptr<const GPUBindGroupLayout>> bindGroupLayouts;37 Vector<Ref<const GPUBindGroupLayout>> bindGroupLayouts; 38 38 }; 39 39 -
trunk/Source/WebCore/platform/graphics/gpu/GPURenderPipeline.h
r243457 r243563 47 47 class GPURenderPipeline : public RefCounted<GPURenderPipeline> { 48 48 public: 49 static RefPtr<GPURenderPipeline> create(const GPUDevice&, GPURenderPipelineDescriptor&&);49 static RefPtr<GPURenderPipeline> tryCreate(const GPUDevice&, const GPURenderPipelineDescriptor&); 50 50 51 51 #if USE(METAL) … … 57 57 private: 58 58 #if USE(METAL) 59 GPURenderPipeline(RetainPtr<MTLDepthStencilState>&&, PlatformRenderPipelineSmartPtr&&, GPU RenderPipelineDescriptor&&);59 GPURenderPipeline(RetainPtr<MTLDepthStencilState>&&, PlatformRenderPipelineSmartPtr&&, GPUPrimitiveTopology); 60 60 61 61 RetainPtr<MTLDepthStencilState> m_depthStencilState; -
trunk/Source/WebCore/platform/graphics/gpu/GPUShaderModule.h
r243091 r243563 45 45 class GPUShaderModule : public RefCounted<GPUShaderModule> { 46 46 public: 47 static RefPtr<GPUShaderModule> create(const GPUDevice&, GPUShaderModuleDescriptor&&);47 static RefPtr<GPUShaderModule> tryCreate(const GPUDevice&, const GPUShaderModuleDescriptor&); 48 48 49 49 PlatformShaderModule* platformShaderModule() const { return m_whlslSource.isNull() ? m_platformShaderModule.get() : nullptr; } -
trunk/Source/WebCore/platform/graphics/gpu/cocoa/GPUBindGroupMetal.mm
r243457 r243563 78 78 } 79 79 80 static RefPtr<GPUSampler> tryGetResourceAsSampler(const GPUBindingResource& resource, const char* const functionName)80 static MTLSamplerState *tryGetResourceAsMtlSampler(const GPUBindingResource& resource, const char* const functionName) 81 81 { 82 82 #if LOG_DISABLED 83 83 UNUSED_PARAM(functionName); 84 84 #endif 85 if (!WTF::holds_alternative<Ref< GPUSampler>>(resource)) {85 if (!WTF::holds_alternative<Ref<const GPUSampler>>(resource)) { 86 86 LOG(WebGPU, "%s: Resource is not a GPUSampler!", functionName); 87 87 return nullptr; 88 88 } 89 auto & samplerRef = WTF::get<Ref<GPUSampler>>(resource);90 if (!sampler Ref->platformSampler()) {89 auto samplerState = WTF::get<Ref<const GPUSampler>>(resource)->platformSampler(); 90 if (!samplerState) { 91 91 LOG(WebGPU, "%s: Invalid MTLSamplerState in GPUSampler binding!", functionName); 92 92 return nullptr; 93 93 } 94 return sampler Ref.copyRef();94 return samplerState; 95 95 } 96 96 … … 187 187 } 188 188 case GPUBindingType::Sampler: { 189 auto sampler Resource = tryGetResourceAsSampler(resourceBinding.resource, functionName);190 if (!sampler Resource)189 auto sampler = tryGetResourceAsMtlSampler(resourceBinding.resource, functionName); 190 if (!sampler) 191 191 return nullptr; 192 192 if (layoutBinding.visibility & GPUShaderStageBit::Flags::Vertex) 193 setSamplerOnEncoder(vertexEncoder, sampler Resource->platformSampler(), resourceBinding.binding);193 setSamplerOnEncoder(vertexEncoder, sampler, resourceBinding.binding); 194 194 if (layoutBinding.visibility & GPUShaderStageBit::Flags::Fragment) 195 setSamplerOnEncoder(fragmentEncoder, sampler Resource->platformSampler(), resourceBinding.binding);195 setSamplerOnEncoder(fragmentEncoder, sampler, resourceBinding.binding); 196 196 break; 197 197 } -
trunk/Source/WebCore/platform/graphics/gpu/cocoa/GPUBufferMetal.mm
r242759 r243563 63 63 } 64 64 65 RefPtr<GPUBuffer> GPUBuffer::tryCreate(Ref<GPUDevice>&& device, GPUBufferDescriptor&& descriptor)65 RefPtr<GPUBuffer> GPUBuffer::tryCreate(Ref<GPUDevice>&& device, const GPUBufferDescriptor& descriptor) 66 66 { 67 67 auto usage = OptionSet<GPUBufferUsage::Flags>::fromRaw(descriptor.usage); … … 89 89 } 90 90 91 return adoptRef(*new GPUBuffer(WTFMove(mtlBuffer), descriptor , usage, WTFMove(device)));92 } 93 94 GPUBuffer::GPUBuffer(RetainPtr<MTLBuffer>&& buffer, const GPUBufferDescriptor& descriptor, OptionSet<GPUBufferUsage::Flags> usage, Ref<GPUDevice>&& device)91 return adoptRef(*new GPUBuffer(WTFMove(mtlBuffer), descriptor.size, usage, WTFMove(device))); 92 } 93 94 GPUBuffer::GPUBuffer(RetainPtr<MTLBuffer>&& buffer, unsigned long size, OptionSet<GPUBufferUsage::Flags> usage, Ref<GPUDevice>&& device) 95 95 : m_platformBuffer(WTFMove(buffer)) 96 96 , m_device(WTFMove(device)) 97 , m_byteLength( descriptor.size)97 , m_byteLength(size) 98 98 , m_usage(usage) 99 99 { … … 122 122 void GPUBuffer::setSubData(unsigned long offset, const JSC::ArrayBuffer& data) 123 123 { 124 MTLCommandQueue *queue; 125 if (!m_device->tryGetQueue() || !(queue = m_device->tryGetQueue()->platformQueue())) 126 return; 127 124 128 if (!isTransferDestination() || state() != State::Unmapped) { 125 129 LOG(WebGPU, "GPUBuffer::setSubData(): Invalid operation!"); … … 157 161 BEGIN_BLOCK_OBJC_EXCEPTIONS; 158 162 159 auto commandBuffer = retainPtr([ m_device->getQueue()->platformQueue()commandBuffer]);163 auto commandBuffer = retainPtr([queue commandBuffer]); 160 164 auto blitEncoder = retainPtr([commandBuffer blitCommandEncoder]); 161 165 -
trunk/Source/WebCore/platform/graphics/gpu/cocoa/GPUCommandBufferMetal.mm
r242974 r243563 47 47 } 48 48 49 auto gpuCommandQueue = device. getQueue();49 auto gpuCommandQueue = device.tryGetQueue(); 50 50 if (!gpuCommandQueue) 51 51 return nullptr; -
trunk/Source/WebCore/platform/graphics/gpu/cocoa/GPUDeviceMetal.mm
r243090 r243563 37 37 namespace WebCore { 38 38 39 RefPtr<GPUDevice> GPUDevice::tryCreate( Optional<GPURequestAdapterOptions>&& options)39 RefPtr<GPUDevice> GPUDevice::tryCreate(const Optional<GPURequestAdapterOptions>& options) 40 40 { 41 41 RetainPtr<MTLDevice> devicePtr; -
trunk/Source/WebCore/platform/graphics/gpu/cocoa/GPURenderPipelineMetal.mm
r243457 r243563 418 418 } 419 419 420 RefPtr<GPURenderPipeline> GPURenderPipeline:: create(const GPUDevice& device, GPURenderPipelineDescriptor&& descriptor)420 RefPtr<GPURenderPipeline> GPURenderPipeline::tryCreate(const GPUDevice& device, const GPURenderPipelineDescriptor& descriptor) 421 421 { 422 422 const char* const functionName = "GPURenderPipeline::create()"; … … 436 436 return nullptr; 437 437 438 return adoptRef(new GPURenderPipeline(WTFMove(depthStencil), WTFMove(pipeline), WTFMove(descriptor)));439 } 440 441 GPURenderPipeline::GPURenderPipeline(RetainPtr<MTLDepthStencilState>&& depthStencil, RetainPtr<MTLRenderPipelineState>&& pipeline, GPU RenderPipelineDescriptor&& descriptor)438 return adoptRef(new GPURenderPipeline(WTFMove(depthStencil), WTFMove(pipeline), descriptor.primitiveTopology)); 439 } 440 441 GPURenderPipeline::GPURenderPipeline(RetainPtr<MTLDepthStencilState>&& depthStencil, RetainPtr<MTLRenderPipelineState>&& pipeline, GPUPrimitiveTopology topology) 442 442 : m_depthStencilState(WTFMove(depthStencil)) 443 443 , m_platformRenderPipeline(WTFMove(pipeline)) 444 , m_layout(WTFMove(descriptor.layout)) 445 , m_primitiveTopology(descriptor.primitiveTopology) 444 , m_primitiveTopology(topology) 446 445 { 447 446 } -
trunk/Source/WebCore/platform/graphics/gpu/cocoa/GPUShaderModuleMetal.mm
r243091 r243563 38 38 namespace WebCore { 39 39 40 RefPtr<GPUShaderModule> GPUShaderModule:: create(const GPUDevice& device, GPUShaderModuleDescriptor&& descriptor)40 RefPtr<GPUShaderModule> GPUShaderModule::tryCreate(const GPUDevice& device, const GPUShaderModuleDescriptor& descriptor) 41 41 { 42 42 if (!device.platformDevice()) {
Note:
See TracChangeset
for help on using the changeset viewer.