Use "= default" to denote default constructor or destructor
[WebKit-https.git] / Source / WebCore / html / canvas / WebGPURenderPipelineDescriptor.cpp
1 /*
2  * Copyright (C) 2017 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "WebGPURenderPipelineDescriptor.h"
28
29 #if ENABLE(WEBGPU)
30
31 #include "GPUFunction.h"
32 #include "GPURenderPipelineColorAttachmentDescriptor.h"
33 #include "GPURenderPipelineDescriptor.h"
34 #include "WebGPUFunction.h"
35 #include "WebGPURenderPipelineColorAttachmentDescriptor.h"
36 #include "WebGPURenderingContext.h"
37
38 namespace WebCore {
39
40 Ref<WebGPURenderPipelineDescriptor> WebGPURenderPipelineDescriptor::create()
41 {
42     return adoptRef(*new WebGPURenderPipelineDescriptor());
43 }
44
45 WebGPURenderPipelineDescriptor::WebGPURenderPipelineDescriptor()
46     : WebGPUObject()
47 {
48     m_renderPipelineDescriptor = GPURenderPipelineDescriptor::create();
49 }
50
51 WebGPURenderPipelineDescriptor::~WebGPURenderPipelineDescriptor() = default;
52
53 RefPtr<WebGPUFunction> WebGPURenderPipelineDescriptor::vertexFunction() const
54 {
55     return m_vertexFunction;
56 }
57
58 void WebGPURenderPipelineDescriptor::setVertexFunction(RefPtr<WebGPUFunction> newVertexFunction)
59 {
60     if (!newVertexFunction)
61         return;
62
63     m_vertexFunction = newVertexFunction;
64
65     if (m_renderPipelineDescriptor)
66         m_renderPipelineDescriptor->setVertexFunction(newVertexFunction->function());
67 }
68
69 RefPtr<WebGPUFunction> WebGPURenderPipelineDescriptor::fragmentFunction() const
70 {
71     return m_fragmentFunction;
72 }
73
74 void WebGPURenderPipelineDescriptor::setFragmentFunction(RefPtr<WebGPUFunction> newFragmentFunction)
75 {
76     if (!newFragmentFunction)
77         return;
78
79     m_fragmentFunction = newFragmentFunction;
80
81     if (m_renderPipelineDescriptor)
82         m_renderPipelineDescriptor->setFragmentFunction(newFragmentFunction->function());
83 }
84
85 Vector<RefPtr<WebGPURenderPipelineColorAttachmentDescriptor>> WebGPURenderPipelineDescriptor::colorAttachments()
86 {
87     if (!m_renderPipelineDescriptor)
88         return Vector<RefPtr<WebGPURenderPipelineColorAttachmentDescriptor>>();
89
90     if (!m_colorAttachmentDescriptors.size()) {
91         Vector<RefPtr<GPURenderPipelineColorAttachmentDescriptor>> platformColorAttachments = m_renderPipelineDescriptor->colorAttachments();
92         for (auto& attachment : platformColorAttachments)
93             m_colorAttachmentDescriptors.append(WebGPURenderPipelineColorAttachmentDescriptor::create(this->context(), attachment.get()));
94     }
95     return m_colorAttachmentDescriptors;
96 }
97
98 unsigned long WebGPURenderPipelineDescriptor::depthAttachmentPixelFormat() const
99 {
100     if (!m_renderPipelineDescriptor)
101         return 0; // FIXME: probably a real value for unknown
102
103     return m_renderPipelineDescriptor->depthAttachmentPixelFormat();
104
105 }
106
107 void WebGPURenderPipelineDescriptor::setDepthAttachmentPixelFormat(unsigned long newPixelFormat)
108 {
109     if (!m_renderPipelineDescriptor)
110         return;
111
112     m_renderPipelineDescriptor->setDepthAttachmentPixelFormat(newPixelFormat);
113 }
114
115 void WebGPURenderPipelineDescriptor::reset()
116 {
117     m_vertexFunction = nullptr;
118     m_fragmentFunction = nullptr;
119 }
120
121 } // namespace WebCore
122
123 #endif