1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2024 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // ContextWgpu.cpp:
7*8975f5c5SAndroid Build Coastguard Worker // Implements the class methods for ContextWgpu.
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker
10*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/ContextWgpu.h"
11*8975f5c5SAndroid Build Coastguard Worker
12*8975f5c5SAndroid Build Coastguard Worker #include "common/debug.h"
13*8975f5c5SAndroid Build Coastguard Worker
14*8975f5c5SAndroid Build Coastguard Worker #include "compiler/translator/wgsl/OutputUniformBlocks.h"
15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Context.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/OverlayImpl.h"
17*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/BufferWgpu.h"
18*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/CompilerWgpu.h"
19*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/DisplayWgpu.h"
20*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/FenceNVWgpu.h"
21*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/FramebufferWgpu.h"
22*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/ImageWgpu.h"
23*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/ProgramExecutableWgpu.h"
24*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/ProgramPipelineWgpu.h"
25*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/ProgramWgpu.h"
26*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/QueryWgpu.h"
27*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/RenderbufferWgpu.h"
28*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/SamplerWgpu.h"
29*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/ShaderWgpu.h"
30*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/SyncWgpu.h"
31*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/TextureWgpu.h"
32*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/TransformFeedbackWgpu.h"
33*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/VertexArrayWgpu.h"
34*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/wgpu_pipeline_state.h"
35*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/wgpu_utils.h"
36*8975f5c5SAndroid Build Coastguard Worker
37*8975f5c5SAndroid Build Coastguard Worker namespace rx
38*8975f5c5SAndroid Build Coastguard Worker {
39*8975f5c5SAndroid Build Coastguard Worker
40*8975f5c5SAndroid Build Coastguard Worker namespace
41*8975f5c5SAndroid Build Coastguard Worker {
42*8975f5c5SAndroid Build Coastguard Worker
43*8975f5c5SAndroid Build Coastguard Worker constexpr angle::PackedEnumMap<webgpu::RenderPassClosureReason, const char *>
44*8975f5c5SAndroid Build Coastguard Worker kRenderPassClosureReason = {{
45*8975f5c5SAndroid Build Coastguard Worker {webgpu::RenderPassClosureReason::NewRenderPass,
46*8975f5c5SAndroid Build Coastguard Worker "Render pass closed due to starting a new render pass"},
47*8975f5c5SAndroid Build Coastguard Worker {webgpu::RenderPassClosureReason::FramebufferBindingChange,
48*8975f5c5SAndroid Build Coastguard Worker "Render pass closed due to framebuffer binding change"},
49*8975f5c5SAndroid Build Coastguard Worker {webgpu::RenderPassClosureReason::FramebufferInternalChange,
50*8975f5c5SAndroid Build Coastguard Worker "Render pass closed due to framebuffer internal change"},
51*8975f5c5SAndroid Build Coastguard Worker {webgpu::RenderPassClosureReason::GLFlush, "Render pass closed due to glFlush"},
52*8975f5c5SAndroid Build Coastguard Worker {webgpu::RenderPassClosureReason::GLFinish, "Render pass closed due to glFinish"},
53*8975f5c5SAndroid Build Coastguard Worker {webgpu::RenderPassClosureReason::EGLSwapBuffers,
54*8975f5c5SAndroid Build Coastguard Worker "Render pass closed due to eglSwapBuffers"},
55*8975f5c5SAndroid Build Coastguard Worker {webgpu::RenderPassClosureReason::GLReadPixels, "Render pass closed due to glReadPixels"},
56*8975f5c5SAndroid Build Coastguard Worker {webgpu::RenderPassClosureReason::IndexRangeReadback,
57*8975f5c5SAndroid Build Coastguard Worker "Render pass closed due to index buffer read back for streamed client data"},
58*8975f5c5SAndroid Build Coastguard Worker {webgpu::RenderPassClosureReason::VertexArrayStreaming,
59*8975f5c5SAndroid Build Coastguard Worker "Render pass closed for uploading streamed client data"},
60*8975f5c5SAndroid Build Coastguard Worker }};
61*8975f5c5SAndroid Build Coastguard Worker
62*8975f5c5SAndroid Build Coastguard Worker } // namespace
63*8975f5c5SAndroid Build Coastguard Worker
ContextWgpu(const gl::State & state,gl::ErrorSet * errorSet,DisplayWgpu * display)64*8975f5c5SAndroid Build Coastguard Worker ContextWgpu::ContextWgpu(const gl::State &state, gl::ErrorSet *errorSet, DisplayWgpu *display)
65*8975f5c5SAndroid Build Coastguard Worker : ContextImpl(state, errorSet), mDisplay(display)
66*8975f5c5SAndroid Build Coastguard Worker {
67*8975f5c5SAndroid Build Coastguard Worker mNewRenderPassDirtyBits = DirtyBits{
68*8975f5c5SAndroid Build Coastguard Worker DIRTY_BIT_RENDER_PIPELINE_BINDING, // The pipeline needs to be bound for each renderpass
69*8975f5c5SAndroid Build Coastguard Worker DIRTY_BIT_VIEWPORT,
70*8975f5c5SAndroid Build Coastguard Worker DIRTY_BIT_SCISSOR,
71*8975f5c5SAndroid Build Coastguard Worker DIRTY_BIT_VERTEX_BUFFERS,
72*8975f5c5SAndroid Build Coastguard Worker DIRTY_BIT_INDEX_BUFFER,
73*8975f5c5SAndroid Build Coastguard Worker DIRTY_BIT_BIND_GROUPS,
74*8975f5c5SAndroid Build Coastguard Worker };
75*8975f5c5SAndroid Build Coastguard Worker }
76*8975f5c5SAndroid Build Coastguard Worker
~ContextWgpu()77*8975f5c5SAndroid Build Coastguard Worker ContextWgpu::~ContextWgpu() {}
78*8975f5c5SAndroid Build Coastguard Worker
onDestroy(const gl::Context * context)79*8975f5c5SAndroid Build Coastguard Worker void ContextWgpu::onDestroy(const gl::Context *context)
80*8975f5c5SAndroid Build Coastguard Worker {
81*8975f5c5SAndroid Build Coastguard Worker mImageLoadContext = {};
82*8975f5c5SAndroid Build Coastguard Worker }
83*8975f5c5SAndroid Build Coastguard Worker
initialize(const angle::ImageLoadContext & imageLoadContext)84*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::initialize(const angle::ImageLoadContext &imageLoadContext)
85*8975f5c5SAndroid Build Coastguard Worker {
86*8975f5c5SAndroid Build Coastguard Worker mImageLoadContext = imageLoadContext;
87*8975f5c5SAndroid Build Coastguard Worker
88*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
89*8975f5c5SAndroid Build Coastguard Worker }
90*8975f5c5SAndroid Build Coastguard Worker
onFramebufferChange(FramebufferWgpu * framebufferWgpu,gl::Command command)91*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::onFramebufferChange(FramebufferWgpu *framebufferWgpu,
92*8975f5c5SAndroid Build Coastguard Worker gl::Command command)
93*8975f5c5SAndroid Build Coastguard Worker {
94*8975f5c5SAndroid Build Coastguard Worker // If internal framebuffer state changes, always end the render pass
95*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(endRenderPass(webgpu::RenderPassClosureReason::FramebufferInternalChange));
96*8975f5c5SAndroid Build Coastguard Worker
97*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
98*8975f5c5SAndroid Build Coastguard Worker }
99*8975f5c5SAndroid Build Coastguard Worker
flush(const gl::Context * context)100*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::flush(const gl::Context *context)
101*8975f5c5SAndroid Build Coastguard Worker {
102*8975f5c5SAndroid Build Coastguard Worker return flush(webgpu::RenderPassClosureReason::GLFlush);
103*8975f5c5SAndroid Build Coastguard Worker }
104*8975f5c5SAndroid Build Coastguard Worker
flush(webgpu::RenderPassClosureReason closureReason)105*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::flush(webgpu::RenderPassClosureReason closureReason)
106*8975f5c5SAndroid Build Coastguard Worker {
107*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(endRenderPass(closureReason));
108*8975f5c5SAndroid Build Coastguard Worker
109*8975f5c5SAndroid Build Coastguard Worker if (mCurrentCommandEncoder)
110*8975f5c5SAndroid Build Coastguard Worker {
111*8975f5c5SAndroid Build Coastguard Worker wgpu::CommandBuffer commandBuffer = mCurrentCommandEncoder.Finish();
112*8975f5c5SAndroid Build Coastguard Worker mCurrentCommandEncoder = nullptr;
113*8975f5c5SAndroid Build Coastguard Worker
114*8975f5c5SAndroid Build Coastguard Worker getQueue().Submit(1, &commandBuffer);
115*8975f5c5SAndroid Build Coastguard Worker }
116*8975f5c5SAndroid Build Coastguard Worker
117*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
118*8975f5c5SAndroid Build Coastguard Worker }
119*8975f5c5SAndroid Build Coastguard Worker
setColorAttachmentFormat(size_t colorIndex,wgpu::TextureFormat format)120*8975f5c5SAndroid Build Coastguard Worker void ContextWgpu::setColorAttachmentFormat(size_t colorIndex, wgpu::TextureFormat format)
121*8975f5c5SAndroid Build Coastguard Worker {
122*8975f5c5SAndroid Build Coastguard Worker if (mRenderPipelineDesc.setColorAttachmentFormat(colorIndex, format))
123*8975f5c5SAndroid Build Coastguard Worker {
124*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
125*8975f5c5SAndroid Build Coastguard Worker }
126*8975f5c5SAndroid Build Coastguard Worker }
127*8975f5c5SAndroid Build Coastguard Worker
setColorAttachmentFormats(const gl::DrawBuffersArray<wgpu::TextureFormat> & formats)128*8975f5c5SAndroid Build Coastguard Worker void ContextWgpu::setColorAttachmentFormats(
129*8975f5c5SAndroid Build Coastguard Worker const gl::DrawBuffersArray<wgpu::TextureFormat> &formats)
130*8975f5c5SAndroid Build Coastguard Worker {
131*8975f5c5SAndroid Build Coastguard Worker for (size_t i = 0; i < formats.size(); i++)
132*8975f5c5SAndroid Build Coastguard Worker {
133*8975f5c5SAndroid Build Coastguard Worker setColorAttachmentFormat(i, formats[i]);
134*8975f5c5SAndroid Build Coastguard Worker }
135*8975f5c5SAndroid Build Coastguard Worker }
136*8975f5c5SAndroid Build Coastguard Worker
setDepthStencilFormat(wgpu::TextureFormat format)137*8975f5c5SAndroid Build Coastguard Worker void ContextWgpu::setDepthStencilFormat(wgpu::TextureFormat format)
138*8975f5c5SAndroid Build Coastguard Worker {
139*8975f5c5SAndroid Build Coastguard Worker if (mRenderPipelineDesc.setDepthStencilAttachmentFormat(format))
140*8975f5c5SAndroid Build Coastguard Worker {
141*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
142*8975f5c5SAndroid Build Coastguard Worker }
143*8975f5c5SAndroid Build Coastguard Worker }
144*8975f5c5SAndroid Build Coastguard Worker
setVertexAttribute(size_t attribIndex,webgpu::PackedVertexAttribute newAttrib)145*8975f5c5SAndroid Build Coastguard Worker void ContextWgpu::setVertexAttribute(size_t attribIndex, webgpu::PackedVertexAttribute newAttrib)
146*8975f5c5SAndroid Build Coastguard Worker {
147*8975f5c5SAndroid Build Coastguard Worker if (mRenderPipelineDesc.setVertexAttribute(attribIndex, newAttrib))
148*8975f5c5SAndroid Build Coastguard Worker {
149*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
150*8975f5c5SAndroid Build Coastguard Worker }
151*8975f5c5SAndroid Build Coastguard Worker }
152*8975f5c5SAndroid Build Coastguard Worker
invalidateVertexBuffer(size_t slot)153*8975f5c5SAndroid Build Coastguard Worker void ContextWgpu::invalidateVertexBuffer(size_t slot)
154*8975f5c5SAndroid Build Coastguard Worker {
155*8975f5c5SAndroid Build Coastguard Worker if (mCurrentRenderPipelineAllAttributes[slot])
156*8975f5c5SAndroid Build Coastguard Worker {
157*8975f5c5SAndroid Build Coastguard Worker mDirtyBits.set(DIRTY_BIT_VERTEX_BUFFERS);
158*8975f5c5SAndroid Build Coastguard Worker mDirtyVertexBuffers.set(slot);
159*8975f5c5SAndroid Build Coastguard Worker }
160*8975f5c5SAndroid Build Coastguard Worker }
161*8975f5c5SAndroid Build Coastguard Worker
invalidateVertexBuffers()162*8975f5c5SAndroid Build Coastguard Worker void ContextWgpu::invalidateVertexBuffers()
163*8975f5c5SAndroid Build Coastguard Worker {
164*8975f5c5SAndroid Build Coastguard Worker mDirtyBits.set(DIRTY_BIT_VERTEX_BUFFERS);
165*8975f5c5SAndroid Build Coastguard Worker mDirtyVertexBuffers = mCurrentRenderPipelineAllAttributes;
166*8975f5c5SAndroid Build Coastguard Worker }
167*8975f5c5SAndroid Build Coastguard Worker
invalidateIndexBuffer()168*8975f5c5SAndroid Build Coastguard Worker void ContextWgpu::invalidateIndexBuffer()
169*8975f5c5SAndroid Build Coastguard Worker {
170*8975f5c5SAndroid Build Coastguard Worker mDirtyBits.set(DIRTY_BIT_INDEX_BUFFER);
171*8975f5c5SAndroid Build Coastguard Worker }
172*8975f5c5SAndroid Build Coastguard Worker
ensureCommandEncoderCreated()173*8975f5c5SAndroid Build Coastguard Worker void ContextWgpu::ensureCommandEncoderCreated()
174*8975f5c5SAndroid Build Coastguard Worker {
175*8975f5c5SAndroid Build Coastguard Worker if (!mCurrentCommandEncoder)
176*8975f5c5SAndroid Build Coastguard Worker {
177*8975f5c5SAndroid Build Coastguard Worker mCurrentCommandEncoder = getDevice().CreateCommandEncoder(nullptr);
178*8975f5c5SAndroid Build Coastguard Worker }
179*8975f5c5SAndroid Build Coastguard Worker }
180*8975f5c5SAndroid Build Coastguard Worker
getCurrentCommandEncoder()181*8975f5c5SAndroid Build Coastguard Worker wgpu::CommandEncoder &ContextWgpu::getCurrentCommandEncoder()
182*8975f5c5SAndroid Build Coastguard Worker {
183*8975f5c5SAndroid Build Coastguard Worker return mCurrentCommandEncoder;
184*8975f5c5SAndroid Build Coastguard Worker }
185*8975f5c5SAndroid Build Coastguard Worker
finish(const gl::Context * context)186*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::finish(const gl::Context *context)
187*8975f5c5SAndroid Build Coastguard Worker {
188*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(flush(webgpu::RenderPassClosureReason::GLFinish));
189*8975f5c5SAndroid Build Coastguard Worker
190*8975f5c5SAndroid Build Coastguard Worker wgpu::Future onWorkSubmittedFuture = getQueue().OnSubmittedWorkDone(
191*8975f5c5SAndroid Build Coastguard Worker wgpu::CallbackMode::WaitAnyOnly, [](wgpu::QueueWorkDoneStatus status) {});
192*8975f5c5SAndroid Build Coastguard Worker wgpu::WaitStatus status = getInstance().WaitAny(onWorkSubmittedFuture, -1);
193*8975f5c5SAndroid Build Coastguard Worker ASSERT(!webgpu::IsWgpuError(status));
194*8975f5c5SAndroid Build Coastguard Worker
195*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
196*8975f5c5SAndroid Build Coastguard Worker }
197*8975f5c5SAndroid Build Coastguard Worker
drawArrays(const gl::Context * context,gl::PrimitiveMode mode,GLint first,GLsizei count)198*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawArrays(const gl::Context *context,
199*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
200*8975f5c5SAndroid Build Coastguard Worker GLint first,
201*8975f5c5SAndroid Build Coastguard Worker GLsizei count)
202*8975f5c5SAndroid Build Coastguard Worker {
203*8975f5c5SAndroid Build Coastguard Worker if (mode == gl::PrimitiveMode::LineLoop)
204*8975f5c5SAndroid Build Coastguard Worker {
205*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
206*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
207*8975f5c5SAndroid Build Coastguard Worker }
208*8975f5c5SAndroid Build Coastguard Worker else if (mode == gl::PrimitiveMode::TriangleFan)
209*8975f5c5SAndroid Build Coastguard Worker {
210*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
211*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
212*8975f5c5SAndroid Build Coastguard Worker }
213*8975f5c5SAndroid Build Coastguard Worker
214*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(setupDraw(context, mode, first, count, 1, gl::DrawElementsType::InvalidEnum, nullptr,
215*8975f5c5SAndroid Build Coastguard Worker 0, nullptr));
216*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.draw(static_cast<uint32_t>(count), 1, static_cast<uint32_t>(first), 0);
217*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
218*8975f5c5SAndroid Build Coastguard Worker }
219*8975f5c5SAndroid Build Coastguard Worker
drawArraysInstanced(const gl::Context * context,gl::PrimitiveMode mode,GLint first,GLsizei count,GLsizei instanceCount)220*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawArraysInstanced(const gl::Context *context,
221*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
222*8975f5c5SAndroid Build Coastguard Worker GLint first,
223*8975f5c5SAndroid Build Coastguard Worker GLsizei count,
224*8975f5c5SAndroid Build Coastguard Worker GLsizei instanceCount)
225*8975f5c5SAndroid Build Coastguard Worker {
226*8975f5c5SAndroid Build Coastguard Worker if (mode == gl::PrimitiveMode::LineLoop)
227*8975f5c5SAndroid Build Coastguard Worker {
228*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
229*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
230*8975f5c5SAndroid Build Coastguard Worker }
231*8975f5c5SAndroid Build Coastguard Worker else if (mode == gl::PrimitiveMode::TriangleFan)
232*8975f5c5SAndroid Build Coastguard Worker {
233*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
234*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
235*8975f5c5SAndroid Build Coastguard Worker }
236*8975f5c5SAndroid Build Coastguard Worker
237*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(setupDraw(context, mode, first, count, instanceCount,
238*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType::InvalidEnum, nullptr, 0, nullptr));
239*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.draw(static_cast<uint32_t>(count), static_cast<uint32_t>(instanceCount),
240*8975f5c5SAndroid Build Coastguard Worker static_cast<uint32_t>(first), 0);
241*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
242*8975f5c5SAndroid Build Coastguard Worker }
243*8975f5c5SAndroid Build Coastguard Worker
drawArraysInstancedBaseInstance(const gl::Context * context,gl::PrimitiveMode mode,GLint first,GLsizei count,GLsizei instanceCount,GLuint baseInstance)244*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawArraysInstancedBaseInstance(const gl::Context *context,
245*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
246*8975f5c5SAndroid Build Coastguard Worker GLint first,
247*8975f5c5SAndroid Build Coastguard Worker GLsizei count,
248*8975f5c5SAndroid Build Coastguard Worker GLsizei instanceCount,
249*8975f5c5SAndroid Build Coastguard Worker GLuint baseInstance)
250*8975f5c5SAndroid Build Coastguard Worker {
251*8975f5c5SAndroid Build Coastguard Worker if (mode == gl::PrimitiveMode::LineLoop)
252*8975f5c5SAndroid Build Coastguard Worker {
253*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
254*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
255*8975f5c5SAndroid Build Coastguard Worker }
256*8975f5c5SAndroid Build Coastguard Worker else if (mode == gl::PrimitiveMode::TriangleFan)
257*8975f5c5SAndroid Build Coastguard Worker {
258*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
259*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
260*8975f5c5SAndroid Build Coastguard Worker }
261*8975f5c5SAndroid Build Coastguard Worker
262*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(setupDraw(context, mode, first, count, instanceCount,
263*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType::InvalidEnum, nullptr, 0, nullptr));
264*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.draw(static_cast<uint32_t>(count), static_cast<uint32_t>(instanceCount),
265*8975f5c5SAndroid Build Coastguard Worker static_cast<uint32_t>(first), baseInstance);
266*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
267*8975f5c5SAndroid Build Coastguard Worker }
268*8975f5c5SAndroid Build Coastguard Worker
drawElements(const gl::Context * context,gl::PrimitiveMode mode,GLsizei count,gl::DrawElementsType type,const void * indices)269*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawElements(const gl::Context *context,
270*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
271*8975f5c5SAndroid Build Coastguard Worker GLsizei count,
272*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
273*8975f5c5SAndroid Build Coastguard Worker const void *indices)
274*8975f5c5SAndroid Build Coastguard Worker {
275*8975f5c5SAndroid Build Coastguard Worker if (mode == gl::PrimitiveMode::LineLoop)
276*8975f5c5SAndroid Build Coastguard Worker {
277*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
278*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
279*8975f5c5SAndroid Build Coastguard Worker }
280*8975f5c5SAndroid Build Coastguard Worker else if (mode == gl::PrimitiveMode::TriangleFan)
281*8975f5c5SAndroid Build Coastguard Worker {
282*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
283*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
284*8975f5c5SAndroid Build Coastguard Worker }
285*8975f5c5SAndroid Build Coastguard Worker
286*8975f5c5SAndroid Build Coastguard Worker uint32_t firstVertex = 0;
287*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(setupDraw(context, mode, 0, count, 1, type, indices, 0, &firstVertex));
288*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.drawIndexed(static_cast<uint32_t>(count), 1, firstVertex, 0, 0);
289*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
290*8975f5c5SAndroid Build Coastguard Worker }
291*8975f5c5SAndroid Build Coastguard Worker
drawElementsBaseVertex(const gl::Context * context,gl::PrimitiveMode mode,GLsizei count,gl::DrawElementsType type,const void * indices,GLint baseVertex)292*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawElementsBaseVertex(const gl::Context *context,
293*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
294*8975f5c5SAndroid Build Coastguard Worker GLsizei count,
295*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
296*8975f5c5SAndroid Build Coastguard Worker const void *indices,
297*8975f5c5SAndroid Build Coastguard Worker GLint baseVertex)
298*8975f5c5SAndroid Build Coastguard Worker {
299*8975f5c5SAndroid Build Coastguard Worker if (mode == gl::PrimitiveMode::LineLoop)
300*8975f5c5SAndroid Build Coastguard Worker {
301*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
302*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
303*8975f5c5SAndroid Build Coastguard Worker }
304*8975f5c5SAndroid Build Coastguard Worker else if (mode == gl::PrimitiveMode::TriangleFan)
305*8975f5c5SAndroid Build Coastguard Worker {
306*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
307*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
308*8975f5c5SAndroid Build Coastguard Worker }
309*8975f5c5SAndroid Build Coastguard Worker
310*8975f5c5SAndroid Build Coastguard Worker uint32_t firstVertex = 0;
311*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(setupDraw(context, mode, 0, count, 1, type, indices, baseVertex, &firstVertex));
312*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.drawIndexed(static_cast<uint32_t>(count), 1, firstVertex,
313*8975f5c5SAndroid Build Coastguard Worker static_cast<uint32_t>(baseVertex), 0);
314*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
315*8975f5c5SAndroid Build Coastguard Worker }
316*8975f5c5SAndroid Build Coastguard Worker
drawElementsInstanced(const gl::Context * context,gl::PrimitiveMode mode,GLsizei count,gl::DrawElementsType type,const void * indices,GLsizei instances)317*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawElementsInstanced(const gl::Context *context,
318*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
319*8975f5c5SAndroid Build Coastguard Worker GLsizei count,
320*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
321*8975f5c5SAndroid Build Coastguard Worker const void *indices,
322*8975f5c5SAndroid Build Coastguard Worker GLsizei instances)
323*8975f5c5SAndroid Build Coastguard Worker {
324*8975f5c5SAndroid Build Coastguard Worker if (mode == gl::PrimitiveMode::LineLoop)
325*8975f5c5SAndroid Build Coastguard Worker {
326*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
327*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
328*8975f5c5SAndroid Build Coastguard Worker }
329*8975f5c5SAndroid Build Coastguard Worker else if (mode == gl::PrimitiveMode::TriangleFan)
330*8975f5c5SAndroid Build Coastguard Worker {
331*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
332*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
333*8975f5c5SAndroid Build Coastguard Worker }
334*8975f5c5SAndroid Build Coastguard Worker
335*8975f5c5SAndroid Build Coastguard Worker uint32_t firstVertex = 0;
336*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(setupDraw(context, mode, 0, count, instances, type, indices, 0, &firstVertex));
337*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.drawIndexed(static_cast<uint32_t>(count), static_cast<uint32_t>(instances),
338*8975f5c5SAndroid Build Coastguard Worker firstVertex, 0, 0);
339*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
340*8975f5c5SAndroid Build Coastguard Worker }
341*8975f5c5SAndroid Build Coastguard Worker
drawElementsInstancedBaseVertex(const gl::Context * context,gl::PrimitiveMode mode,GLsizei count,gl::DrawElementsType type,const void * indices,GLsizei instances,GLint baseVertex)342*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawElementsInstancedBaseVertex(const gl::Context *context,
343*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
344*8975f5c5SAndroid Build Coastguard Worker GLsizei count,
345*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
346*8975f5c5SAndroid Build Coastguard Worker const void *indices,
347*8975f5c5SAndroid Build Coastguard Worker GLsizei instances,
348*8975f5c5SAndroid Build Coastguard Worker GLint baseVertex)
349*8975f5c5SAndroid Build Coastguard Worker {
350*8975f5c5SAndroid Build Coastguard Worker if (mode == gl::PrimitiveMode::LineLoop)
351*8975f5c5SAndroid Build Coastguard Worker {
352*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
353*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
354*8975f5c5SAndroid Build Coastguard Worker }
355*8975f5c5SAndroid Build Coastguard Worker else if (mode == gl::PrimitiveMode::TriangleFan)
356*8975f5c5SAndroid Build Coastguard Worker {
357*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
358*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
359*8975f5c5SAndroid Build Coastguard Worker }
360*8975f5c5SAndroid Build Coastguard Worker
361*8975f5c5SAndroid Build Coastguard Worker uint32_t firstVertex = 0;
362*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(
363*8975f5c5SAndroid Build Coastguard Worker setupDraw(context, mode, 0, count, instances, type, indices, baseVertex, &firstVertex));
364*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.drawIndexed(static_cast<uint32_t>(count), static_cast<uint32_t>(instances),
365*8975f5c5SAndroid Build Coastguard Worker firstVertex, static_cast<uint32_t>(baseVertex), 0);
366*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
367*8975f5c5SAndroid Build Coastguard Worker }
368*8975f5c5SAndroid Build Coastguard Worker
drawElementsInstancedBaseVertexBaseInstance(const gl::Context * context,gl::PrimitiveMode mode,GLsizei count,gl::DrawElementsType type,const void * indices,GLsizei instances,GLint baseVertex,GLuint baseInstance)369*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawElementsInstancedBaseVertexBaseInstance(const gl::Context *context,
370*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
371*8975f5c5SAndroid Build Coastguard Worker GLsizei count,
372*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
373*8975f5c5SAndroid Build Coastguard Worker const void *indices,
374*8975f5c5SAndroid Build Coastguard Worker GLsizei instances,
375*8975f5c5SAndroid Build Coastguard Worker GLint baseVertex,
376*8975f5c5SAndroid Build Coastguard Worker GLuint baseInstance)
377*8975f5c5SAndroid Build Coastguard Worker {
378*8975f5c5SAndroid Build Coastguard Worker if (mode == gl::PrimitiveMode::LineLoop)
379*8975f5c5SAndroid Build Coastguard Worker {
380*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
381*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
382*8975f5c5SAndroid Build Coastguard Worker }
383*8975f5c5SAndroid Build Coastguard Worker else if (mode == gl::PrimitiveMode::TriangleFan)
384*8975f5c5SAndroid Build Coastguard Worker {
385*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
386*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
387*8975f5c5SAndroid Build Coastguard Worker }
388*8975f5c5SAndroid Build Coastguard Worker
389*8975f5c5SAndroid Build Coastguard Worker uint32_t firstVertex = 0;
390*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(
391*8975f5c5SAndroid Build Coastguard Worker setupDraw(context, mode, 0, count, instances, type, indices, baseVertex, &firstVertex));
392*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.drawIndexed(static_cast<uint32_t>(count), static_cast<uint32_t>(instances),
393*8975f5c5SAndroid Build Coastguard Worker firstVertex, static_cast<uint32_t>(baseVertex),
394*8975f5c5SAndroid Build Coastguard Worker static_cast<uint32_t>(baseInstance));
395*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
396*8975f5c5SAndroid Build Coastguard Worker }
397*8975f5c5SAndroid Build Coastguard Worker
drawRangeElements(const gl::Context * context,gl::PrimitiveMode mode,GLuint start,GLuint end,GLsizei count,gl::DrawElementsType type,const void * indices)398*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawRangeElements(const gl::Context *context,
399*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
400*8975f5c5SAndroid Build Coastguard Worker GLuint start,
401*8975f5c5SAndroid Build Coastguard Worker GLuint end,
402*8975f5c5SAndroid Build Coastguard Worker GLsizei count,
403*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
404*8975f5c5SAndroid Build Coastguard Worker const void *indices)
405*8975f5c5SAndroid Build Coastguard Worker {
406*8975f5c5SAndroid Build Coastguard Worker return drawElements(context, mode, count, type, indices);
407*8975f5c5SAndroid Build Coastguard Worker }
408*8975f5c5SAndroid Build Coastguard Worker
drawRangeElementsBaseVertex(const gl::Context * context,gl::PrimitiveMode mode,GLuint start,GLuint end,GLsizei count,gl::DrawElementsType type,const void * indices,GLint baseVertex)409*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawRangeElementsBaseVertex(const gl::Context *context,
410*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
411*8975f5c5SAndroid Build Coastguard Worker GLuint start,
412*8975f5c5SAndroid Build Coastguard Worker GLuint end,
413*8975f5c5SAndroid Build Coastguard Worker GLsizei count,
414*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
415*8975f5c5SAndroid Build Coastguard Worker const void *indices,
416*8975f5c5SAndroid Build Coastguard Worker GLint baseVertex)
417*8975f5c5SAndroid Build Coastguard Worker {
418*8975f5c5SAndroid Build Coastguard Worker return drawElementsBaseVertex(context, mode, count, type, indices, baseVertex);
419*8975f5c5SAndroid Build Coastguard Worker }
420*8975f5c5SAndroid Build Coastguard Worker
drawArraysIndirect(const gl::Context * context,gl::PrimitiveMode mode,const void * indirect)421*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawArraysIndirect(const gl::Context *context,
422*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
423*8975f5c5SAndroid Build Coastguard Worker const void *indirect)
424*8975f5c5SAndroid Build Coastguard Worker {
425*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
426*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
427*8975f5c5SAndroid Build Coastguard Worker }
428*8975f5c5SAndroid Build Coastguard Worker
drawElementsIndirect(const gl::Context * context,gl::PrimitiveMode mode,gl::DrawElementsType type,const void * indirect)429*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::drawElementsIndirect(const gl::Context *context,
430*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
431*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
432*8975f5c5SAndroid Build Coastguard Worker const void *indirect)
433*8975f5c5SAndroid Build Coastguard Worker {
434*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
435*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
436*8975f5c5SAndroid Build Coastguard Worker }
437*8975f5c5SAndroid Build Coastguard Worker
multiDrawArrays(const gl::Context * context,gl::PrimitiveMode mode,const GLint * firsts,const GLsizei * counts,GLsizei drawcount)438*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::multiDrawArrays(const gl::Context *context,
439*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
440*8975f5c5SAndroid Build Coastguard Worker const GLint *firsts,
441*8975f5c5SAndroid Build Coastguard Worker const GLsizei *counts,
442*8975f5c5SAndroid Build Coastguard Worker GLsizei drawcount)
443*8975f5c5SAndroid Build Coastguard Worker {
444*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
445*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
446*8975f5c5SAndroid Build Coastguard Worker }
447*8975f5c5SAndroid Build Coastguard Worker
multiDrawArraysInstanced(const gl::Context * context,gl::PrimitiveMode mode,const GLint * firsts,const GLsizei * counts,const GLsizei * instanceCounts,GLsizei drawcount)448*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::multiDrawArraysInstanced(const gl::Context *context,
449*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
450*8975f5c5SAndroid Build Coastguard Worker const GLint *firsts,
451*8975f5c5SAndroid Build Coastguard Worker const GLsizei *counts,
452*8975f5c5SAndroid Build Coastguard Worker const GLsizei *instanceCounts,
453*8975f5c5SAndroid Build Coastguard Worker GLsizei drawcount)
454*8975f5c5SAndroid Build Coastguard Worker {
455*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
456*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
457*8975f5c5SAndroid Build Coastguard Worker }
458*8975f5c5SAndroid Build Coastguard Worker
multiDrawArraysIndirect(const gl::Context * context,gl::PrimitiveMode mode,const void * indirect,GLsizei drawcount,GLsizei stride)459*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::multiDrawArraysIndirect(const gl::Context *context,
460*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
461*8975f5c5SAndroid Build Coastguard Worker const void *indirect,
462*8975f5c5SAndroid Build Coastguard Worker GLsizei drawcount,
463*8975f5c5SAndroid Build Coastguard Worker GLsizei stride)
464*8975f5c5SAndroid Build Coastguard Worker {
465*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
466*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
467*8975f5c5SAndroid Build Coastguard Worker }
468*8975f5c5SAndroid Build Coastguard Worker
multiDrawElements(const gl::Context * context,gl::PrimitiveMode mode,const GLsizei * counts,gl::DrawElementsType type,const GLvoid * const * indices,GLsizei drawcount)469*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::multiDrawElements(const gl::Context *context,
470*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
471*8975f5c5SAndroid Build Coastguard Worker const GLsizei *counts,
472*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
473*8975f5c5SAndroid Build Coastguard Worker const GLvoid *const *indices,
474*8975f5c5SAndroid Build Coastguard Worker GLsizei drawcount)
475*8975f5c5SAndroid Build Coastguard Worker {
476*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
477*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
478*8975f5c5SAndroid Build Coastguard Worker }
479*8975f5c5SAndroid Build Coastguard Worker
multiDrawElementsInstanced(const gl::Context * context,gl::PrimitiveMode mode,const GLsizei * counts,gl::DrawElementsType type,const GLvoid * const * indices,const GLsizei * instanceCounts,GLsizei drawcount)480*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::multiDrawElementsInstanced(const gl::Context *context,
481*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
482*8975f5c5SAndroid Build Coastguard Worker const GLsizei *counts,
483*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
484*8975f5c5SAndroid Build Coastguard Worker const GLvoid *const *indices,
485*8975f5c5SAndroid Build Coastguard Worker const GLsizei *instanceCounts,
486*8975f5c5SAndroid Build Coastguard Worker GLsizei drawcount)
487*8975f5c5SAndroid Build Coastguard Worker {
488*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
489*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
490*8975f5c5SAndroid Build Coastguard Worker }
491*8975f5c5SAndroid Build Coastguard Worker
multiDrawElementsIndirect(const gl::Context * context,gl::PrimitiveMode mode,gl::DrawElementsType type,const void * indirect,GLsizei drawcount,GLsizei stride)492*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::multiDrawElementsIndirect(const gl::Context *context,
493*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
494*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
495*8975f5c5SAndroid Build Coastguard Worker const void *indirect,
496*8975f5c5SAndroid Build Coastguard Worker GLsizei drawcount,
497*8975f5c5SAndroid Build Coastguard Worker GLsizei stride)
498*8975f5c5SAndroid Build Coastguard Worker {
499*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
500*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
501*8975f5c5SAndroid Build Coastguard Worker }
502*8975f5c5SAndroid Build Coastguard Worker
multiDrawArraysInstancedBaseInstance(const gl::Context * context,gl::PrimitiveMode mode,const GLint * firsts,const GLsizei * counts,const GLsizei * instanceCounts,const GLuint * baseInstances,GLsizei drawcount)503*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::multiDrawArraysInstancedBaseInstance(const gl::Context *context,
504*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
505*8975f5c5SAndroid Build Coastguard Worker const GLint *firsts,
506*8975f5c5SAndroid Build Coastguard Worker const GLsizei *counts,
507*8975f5c5SAndroid Build Coastguard Worker const GLsizei *instanceCounts,
508*8975f5c5SAndroid Build Coastguard Worker const GLuint *baseInstances,
509*8975f5c5SAndroid Build Coastguard Worker GLsizei drawcount)
510*8975f5c5SAndroid Build Coastguard Worker {
511*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
512*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
513*8975f5c5SAndroid Build Coastguard Worker }
514*8975f5c5SAndroid Build Coastguard Worker
multiDrawElementsInstancedBaseVertexBaseInstance(const gl::Context * context,gl::PrimitiveMode mode,const GLsizei * counts,gl::DrawElementsType type,const GLvoid * const * indices,const GLsizei * instanceCounts,const GLint * baseVertices,const GLuint * baseInstances,GLsizei drawcount)515*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::multiDrawElementsInstancedBaseVertexBaseInstance(
516*8975f5c5SAndroid Build Coastguard Worker const gl::Context *context,
517*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
518*8975f5c5SAndroid Build Coastguard Worker const GLsizei *counts,
519*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType type,
520*8975f5c5SAndroid Build Coastguard Worker const GLvoid *const *indices,
521*8975f5c5SAndroid Build Coastguard Worker const GLsizei *instanceCounts,
522*8975f5c5SAndroid Build Coastguard Worker const GLint *baseVertices,
523*8975f5c5SAndroid Build Coastguard Worker const GLuint *baseInstances,
524*8975f5c5SAndroid Build Coastguard Worker GLsizei drawcount)
525*8975f5c5SAndroid Build Coastguard Worker {
526*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
527*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
528*8975f5c5SAndroid Build Coastguard Worker }
529*8975f5c5SAndroid Build Coastguard Worker
getResetStatus()530*8975f5c5SAndroid Build Coastguard Worker gl::GraphicsResetStatus ContextWgpu::getResetStatus()
531*8975f5c5SAndroid Build Coastguard Worker {
532*8975f5c5SAndroid Build Coastguard Worker return gl::GraphicsResetStatus::NoError;
533*8975f5c5SAndroid Build Coastguard Worker }
534*8975f5c5SAndroid Build Coastguard Worker
insertEventMarker(GLsizei length,const char * marker)535*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::insertEventMarker(GLsizei length, const char *marker)
536*8975f5c5SAndroid Build Coastguard Worker {
537*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
538*8975f5c5SAndroid Build Coastguard Worker }
539*8975f5c5SAndroid Build Coastguard Worker
pushGroupMarker(GLsizei length,const char * marker)540*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::pushGroupMarker(GLsizei length, const char *marker)
541*8975f5c5SAndroid Build Coastguard Worker {
542*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
543*8975f5c5SAndroid Build Coastguard Worker }
544*8975f5c5SAndroid Build Coastguard Worker
popGroupMarker()545*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::popGroupMarker()
546*8975f5c5SAndroid Build Coastguard Worker {
547*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
548*8975f5c5SAndroid Build Coastguard Worker }
549*8975f5c5SAndroid Build Coastguard Worker
pushDebugGroup(const gl::Context * context,GLenum source,GLuint id,const std::string & message)550*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::pushDebugGroup(const gl::Context *context,
551*8975f5c5SAndroid Build Coastguard Worker GLenum source,
552*8975f5c5SAndroid Build Coastguard Worker GLuint id,
553*8975f5c5SAndroid Build Coastguard Worker const std::string &message)
554*8975f5c5SAndroid Build Coastguard Worker {
555*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
556*8975f5c5SAndroid Build Coastguard Worker }
557*8975f5c5SAndroid Build Coastguard Worker
popDebugGroup(const gl::Context * context)558*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::popDebugGroup(const gl::Context *context)
559*8975f5c5SAndroid Build Coastguard Worker {
560*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
561*8975f5c5SAndroid Build Coastguard Worker }
562*8975f5c5SAndroid Build Coastguard Worker
syncState(const gl::Context * context,const gl::state::DirtyBits dirtyBits,const gl::state::DirtyBits bitMask,const gl::state::ExtendedDirtyBits extendedDirtyBits,const gl::state::ExtendedDirtyBits extendedBitMask,gl::Command command)563*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::syncState(const gl::Context *context,
564*8975f5c5SAndroid Build Coastguard Worker const gl::state::DirtyBits dirtyBits,
565*8975f5c5SAndroid Build Coastguard Worker const gl::state::DirtyBits bitMask,
566*8975f5c5SAndroid Build Coastguard Worker const gl::state::ExtendedDirtyBits extendedDirtyBits,
567*8975f5c5SAndroid Build Coastguard Worker const gl::state::ExtendedDirtyBits extendedBitMask,
568*8975f5c5SAndroid Build Coastguard Worker gl::Command command)
569*8975f5c5SAndroid Build Coastguard Worker {
570*8975f5c5SAndroid Build Coastguard Worker const gl::State &glState = context->getState();
571*8975f5c5SAndroid Build Coastguard Worker
572*8975f5c5SAndroid Build Coastguard Worker for (auto iter = dirtyBits.begin(), endIter = dirtyBits.end(); iter != endIter; ++iter)
573*8975f5c5SAndroid Build Coastguard Worker {
574*8975f5c5SAndroid Build Coastguard Worker size_t dirtyBit = *iter;
575*8975f5c5SAndroid Build Coastguard Worker switch (dirtyBit)
576*8975f5c5SAndroid Build Coastguard Worker {
577*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_DRAW_FRAMEBUFFER_BINDING:
578*8975f5c5SAndroid Build Coastguard Worker {
579*8975f5c5SAndroid Build Coastguard Worker const FramebufferWgpu *framebufferWgpu =
580*8975f5c5SAndroid Build Coastguard Worker webgpu::GetImpl(context->getState().getDrawFramebuffer());
581*8975f5c5SAndroid Build Coastguard Worker setColorAttachmentFormats(framebufferWgpu->getCurrentColorAttachmentFormats());
582*8975f5c5SAndroid Build Coastguard Worker setDepthStencilFormat(framebufferWgpu->getCurrentDepthStencilAttachmentFormat());
583*8975f5c5SAndroid Build Coastguard Worker
584*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(endRenderPass(webgpu::RenderPassClosureReason::FramebufferBindingChange));
585*8975f5c5SAndroid Build Coastguard Worker }
586*8975f5c5SAndroid Build Coastguard Worker break;
587*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_READ_FRAMEBUFFER_BINDING:
588*8975f5c5SAndroid Build Coastguard Worker break;
589*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_SCISSOR_TEST_ENABLED:
590*8975f5c5SAndroid Build Coastguard Worker mDirtyBits.set(DIRTY_BIT_SCISSOR);
591*8975f5c5SAndroid Build Coastguard Worker break;
592*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_SCISSOR:
593*8975f5c5SAndroid Build Coastguard Worker mDirtyBits.set(DIRTY_BIT_SCISSOR);
594*8975f5c5SAndroid Build Coastguard Worker break;
595*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_VIEWPORT:
596*8975f5c5SAndroid Build Coastguard Worker mDirtyBits.set(DIRTY_BIT_VIEWPORT);
597*8975f5c5SAndroid Build Coastguard Worker break;
598*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_DEPTH_RANGE:
599*8975f5c5SAndroid Build Coastguard Worker mDirtyBits.set(DIRTY_BIT_VIEWPORT);
600*8975f5c5SAndroid Build Coastguard Worker break;
601*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_BLEND_ENABLED:
602*8975f5c5SAndroid Build Coastguard Worker break;
603*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_BLEND_COLOR:
604*8975f5c5SAndroid Build Coastguard Worker break;
605*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_BLEND_FUNCS:
606*8975f5c5SAndroid Build Coastguard Worker break;
607*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_BLEND_EQUATIONS:
608*8975f5c5SAndroid Build Coastguard Worker break;
609*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_COLOR_MASK:
610*8975f5c5SAndroid Build Coastguard Worker {
611*8975f5c5SAndroid Build Coastguard Worker const gl::BlendStateExt &blendStateExt = mState.getBlendStateExt();
612*8975f5c5SAndroid Build Coastguard Worker for (size_t i = 0; i < blendStateExt.getDrawBufferCount(); i++)
613*8975f5c5SAndroid Build Coastguard Worker {
614*8975f5c5SAndroid Build Coastguard Worker bool r, g, b, a;
615*8975f5c5SAndroid Build Coastguard Worker blendStateExt.getColorMaskIndexed(i, &r, &g, &b, &a);
616*8975f5c5SAndroid Build Coastguard Worker mRenderPipelineDesc.setColorWriteMask(i, r, g, b, a);
617*8975f5c5SAndroid Build Coastguard Worker }
618*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
619*8975f5c5SAndroid Build Coastguard Worker }
620*8975f5c5SAndroid Build Coastguard Worker break;
621*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_SAMPLE_ALPHA_TO_COVERAGE_ENABLED:
622*8975f5c5SAndroid Build Coastguard Worker break;
623*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_SAMPLE_COVERAGE_ENABLED:
624*8975f5c5SAndroid Build Coastguard Worker break;
625*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_SAMPLE_COVERAGE:
626*8975f5c5SAndroid Build Coastguard Worker break;
627*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_SAMPLE_MASK_ENABLED:
628*8975f5c5SAndroid Build Coastguard Worker break;
629*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_SAMPLE_MASK:
630*8975f5c5SAndroid Build Coastguard Worker break;
631*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_DEPTH_TEST_ENABLED:
632*8975f5c5SAndroid Build Coastguard Worker break;
633*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_DEPTH_FUNC:
634*8975f5c5SAndroid Build Coastguard Worker if (mRenderPipelineDesc.setDepthFunc(
635*8975f5c5SAndroid Build Coastguard Worker gl_wgpu::getCompareFunc(glState.getDepthStencilState().depthFunc)))
636*8975f5c5SAndroid Build Coastguard Worker {
637*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
638*8975f5c5SAndroid Build Coastguard Worker }
639*8975f5c5SAndroid Build Coastguard Worker break;
640*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_DEPTH_MASK:
641*8975f5c5SAndroid Build Coastguard Worker break;
642*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_STENCIL_TEST_ENABLED:
643*8975f5c5SAndroid Build Coastguard Worker break;
644*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_STENCIL_FUNCS_FRONT:
645*8975f5c5SAndroid Build Coastguard Worker if (mRenderPipelineDesc.setStencilFrontFunc(
646*8975f5c5SAndroid Build Coastguard Worker gl_wgpu::getCompareFunc(glState.getDepthStencilState().stencilFunc)))
647*8975f5c5SAndroid Build Coastguard Worker {
648*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
649*8975f5c5SAndroid Build Coastguard Worker }
650*8975f5c5SAndroid Build Coastguard Worker break;
651*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_STENCIL_FUNCS_BACK:
652*8975f5c5SAndroid Build Coastguard Worker if (mRenderPipelineDesc.setStencilBackFunc(
653*8975f5c5SAndroid Build Coastguard Worker gl_wgpu::getCompareFunc(glState.getDepthStencilState().stencilBackFunc)))
654*8975f5c5SAndroid Build Coastguard Worker {
655*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
656*8975f5c5SAndroid Build Coastguard Worker }
657*8975f5c5SAndroid Build Coastguard Worker break;
658*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_STENCIL_OPS_FRONT:
659*8975f5c5SAndroid Build Coastguard Worker {
660*8975f5c5SAndroid Build Coastguard Worker wgpu::StencilOperation failOp =
661*8975f5c5SAndroid Build Coastguard Worker gl_wgpu::getStencilOp(glState.getDepthStencilState().stencilFail);
662*8975f5c5SAndroid Build Coastguard Worker wgpu::StencilOperation depthFailOp =
663*8975f5c5SAndroid Build Coastguard Worker gl_wgpu::getStencilOp(glState.getDepthStencilState().stencilPassDepthFail);
664*8975f5c5SAndroid Build Coastguard Worker wgpu::StencilOperation passOp =
665*8975f5c5SAndroid Build Coastguard Worker gl_wgpu::getStencilOp(glState.getDepthStencilState().stencilPassDepthPass);
666*8975f5c5SAndroid Build Coastguard Worker if (mRenderPipelineDesc.setStencilFrontOps(failOp, depthFailOp, passOp))
667*8975f5c5SAndroid Build Coastguard Worker {
668*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
669*8975f5c5SAndroid Build Coastguard Worker }
670*8975f5c5SAndroid Build Coastguard Worker }
671*8975f5c5SAndroid Build Coastguard Worker break;
672*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_STENCIL_OPS_BACK:
673*8975f5c5SAndroid Build Coastguard Worker {
674*8975f5c5SAndroid Build Coastguard Worker wgpu::StencilOperation failOp =
675*8975f5c5SAndroid Build Coastguard Worker gl_wgpu::getStencilOp(glState.getDepthStencilState().stencilBackFail);
676*8975f5c5SAndroid Build Coastguard Worker wgpu::StencilOperation depthFailOp =
677*8975f5c5SAndroid Build Coastguard Worker gl_wgpu::getStencilOp(glState.getDepthStencilState().stencilBackPassDepthFail);
678*8975f5c5SAndroid Build Coastguard Worker wgpu::StencilOperation passOp =
679*8975f5c5SAndroid Build Coastguard Worker gl_wgpu::getStencilOp(glState.getDepthStencilState().stencilBackPassDepthPass);
680*8975f5c5SAndroid Build Coastguard Worker if (mRenderPipelineDesc.setStencilBackOps(failOp, depthFailOp, passOp))
681*8975f5c5SAndroid Build Coastguard Worker {
682*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
683*8975f5c5SAndroid Build Coastguard Worker }
684*8975f5c5SAndroid Build Coastguard Worker }
685*8975f5c5SAndroid Build Coastguard Worker break;
686*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_STENCIL_WRITEMASK_FRONT:
687*8975f5c5SAndroid Build Coastguard Worker if (mRenderPipelineDesc.setStencilWriteMask(
688*8975f5c5SAndroid Build Coastguard Worker glState.getDepthStencilState().stencilWritemask))
689*8975f5c5SAndroid Build Coastguard Worker {
690*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
691*8975f5c5SAndroid Build Coastguard Worker }
692*8975f5c5SAndroid Build Coastguard Worker break;
693*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_STENCIL_WRITEMASK_BACK:
694*8975f5c5SAndroid Build Coastguard Worker break;
695*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_CULL_FACE_ENABLED:
696*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_CULL_FACE:
697*8975f5c5SAndroid Build Coastguard Worker mRenderPipelineDesc.setCullMode(glState.getRasterizerState().cullMode,
698*8975f5c5SAndroid Build Coastguard Worker glState.getRasterizerState().cullFace);
699*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
700*8975f5c5SAndroid Build Coastguard Worker break;
701*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_FRONT_FACE:
702*8975f5c5SAndroid Build Coastguard Worker mRenderPipelineDesc.setFrontFace(glState.getRasterizerState().frontFace);
703*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
704*8975f5c5SAndroid Build Coastguard Worker break;
705*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_POLYGON_OFFSET_FILL_ENABLED:
706*8975f5c5SAndroid Build Coastguard Worker break;
707*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_POLYGON_OFFSET:
708*8975f5c5SAndroid Build Coastguard Worker break;
709*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_RASTERIZER_DISCARD_ENABLED:
710*8975f5c5SAndroid Build Coastguard Worker break;
711*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_LINE_WIDTH:
712*8975f5c5SAndroid Build Coastguard Worker break;
713*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_PRIMITIVE_RESTART_ENABLED:
714*8975f5c5SAndroid Build Coastguard Worker break;
715*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_CLEAR_COLOR:
716*8975f5c5SAndroid Build Coastguard Worker break;
717*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_CLEAR_DEPTH:
718*8975f5c5SAndroid Build Coastguard Worker break;
719*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_CLEAR_STENCIL:
720*8975f5c5SAndroid Build Coastguard Worker break;
721*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_UNPACK_STATE:
722*8975f5c5SAndroid Build Coastguard Worker break;
723*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_UNPACK_BUFFER_BINDING:
724*8975f5c5SAndroid Build Coastguard Worker break;
725*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_PACK_STATE:
726*8975f5c5SAndroid Build Coastguard Worker break;
727*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_PACK_BUFFER_BINDING:
728*8975f5c5SAndroid Build Coastguard Worker break;
729*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_DITHER_ENABLED:
730*8975f5c5SAndroid Build Coastguard Worker break;
731*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_RENDERBUFFER_BINDING:
732*8975f5c5SAndroid Build Coastguard Worker break;
733*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_VERTEX_ARRAY_BINDING:
734*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
735*8975f5c5SAndroid Build Coastguard Worker break;
736*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_DRAW_INDIRECT_BUFFER_BINDING:
737*8975f5c5SAndroid Build Coastguard Worker break;
738*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_DISPATCH_INDIRECT_BUFFER_BINDING:
739*8975f5c5SAndroid Build Coastguard Worker break;
740*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_PROGRAM_BINDING:
741*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_PROGRAM_EXECUTABLE:
742*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
743*8975f5c5SAndroid Build Coastguard Worker break;
744*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_SAMPLER_BINDINGS:
745*8975f5c5SAndroid Build Coastguard Worker break;
746*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_TEXTURE_BINDINGS:
747*8975f5c5SAndroid Build Coastguard Worker break;
748*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_IMAGE_BINDINGS:
749*8975f5c5SAndroid Build Coastguard Worker break;
750*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_TRANSFORM_FEEDBACK_BINDING:
751*8975f5c5SAndroid Build Coastguard Worker break;
752*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_UNIFORM_BUFFER_BINDINGS:
753*8975f5c5SAndroid Build Coastguard Worker break;
754*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_SHADER_STORAGE_BUFFER_BINDING:
755*8975f5c5SAndroid Build Coastguard Worker break;
756*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_ATOMIC_COUNTER_BUFFER_BINDING:
757*8975f5c5SAndroid Build Coastguard Worker break;
758*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_MULTISAMPLING:
759*8975f5c5SAndroid Build Coastguard Worker break;
760*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_SAMPLE_ALPHA_TO_ONE:
761*8975f5c5SAndroid Build Coastguard Worker break;
762*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_COVERAGE_MODULATION:
763*8975f5c5SAndroid Build Coastguard Worker break;
764*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_FRAMEBUFFER_SRGB_WRITE_CONTROL_MODE:
765*8975f5c5SAndroid Build Coastguard Worker break;
766*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_CURRENT_VALUES:
767*8975f5c5SAndroid Build Coastguard Worker break;
768*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_PROVOKING_VERTEX:
769*8975f5c5SAndroid Build Coastguard Worker break;
770*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_SAMPLE_SHADING:
771*8975f5c5SAndroid Build Coastguard Worker break;
772*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_PATCH_VERTICES:
773*8975f5c5SAndroid Build Coastguard Worker break;
774*8975f5c5SAndroid Build Coastguard Worker case gl::state::DIRTY_BIT_EXTENDED:
775*8975f5c5SAndroid Build Coastguard Worker {
776*8975f5c5SAndroid Build Coastguard Worker for (auto extendedIter = extendedDirtyBits.begin(),
777*8975f5c5SAndroid Build Coastguard Worker extendedEndIter = extendedDirtyBits.end();
778*8975f5c5SAndroid Build Coastguard Worker extendedIter != extendedEndIter; ++extendedIter)
779*8975f5c5SAndroid Build Coastguard Worker {
780*8975f5c5SAndroid Build Coastguard Worker const size_t extendedDirtyBit = *extendedIter;
781*8975f5c5SAndroid Build Coastguard Worker switch (extendedDirtyBit)
782*8975f5c5SAndroid Build Coastguard Worker {
783*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_CLIP_CONTROL:
784*8975f5c5SAndroid Build Coastguard Worker break;
785*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_CLIP_DISTANCES:
786*8975f5c5SAndroid Build Coastguard Worker break;
787*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_DEPTH_CLAMP_ENABLED:
788*8975f5c5SAndroid Build Coastguard Worker break;
789*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_MIPMAP_GENERATION_HINT:
790*8975f5c5SAndroid Build Coastguard Worker break;
791*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_POLYGON_MODE:
792*8975f5c5SAndroid Build Coastguard Worker break;
793*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_POLYGON_OFFSET_POINT_ENABLED:
794*8975f5c5SAndroid Build Coastguard Worker break;
795*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_POLYGON_OFFSET_LINE_ENABLED:
796*8975f5c5SAndroid Build Coastguard Worker break;
797*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_SHADER_DERIVATIVE_HINT:
798*8975f5c5SAndroid Build Coastguard Worker break;
799*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_SHADING_RATE:
800*8975f5c5SAndroid Build Coastguard Worker break;
801*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_LOGIC_OP_ENABLED:
802*8975f5c5SAndroid Build Coastguard Worker break;
803*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_LOGIC_OP:
804*8975f5c5SAndroid Build Coastguard Worker break;
805*8975f5c5SAndroid Build Coastguard Worker case gl::state::EXTENDED_DIRTY_BIT_BLEND_ADVANCED_COHERENT:
806*8975f5c5SAndroid Build Coastguard Worker break;
807*8975f5c5SAndroid Build Coastguard Worker default:
808*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
809*8975f5c5SAndroid Build Coastguard Worker }
810*8975f5c5SAndroid Build Coastguard Worker }
811*8975f5c5SAndroid Build Coastguard Worker }
812*8975f5c5SAndroid Build Coastguard Worker break;
813*8975f5c5SAndroid Build Coastguard Worker
814*8975f5c5SAndroid Build Coastguard Worker default:
815*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
816*8975f5c5SAndroid Build Coastguard Worker break;
817*8975f5c5SAndroid Build Coastguard Worker }
818*8975f5c5SAndroid Build Coastguard Worker }
819*8975f5c5SAndroid Build Coastguard Worker
820*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
821*8975f5c5SAndroid Build Coastguard Worker }
822*8975f5c5SAndroid Build Coastguard Worker
getGPUDisjoint()823*8975f5c5SAndroid Build Coastguard Worker GLint ContextWgpu::getGPUDisjoint()
824*8975f5c5SAndroid Build Coastguard Worker {
825*8975f5c5SAndroid Build Coastguard Worker return 0;
826*8975f5c5SAndroid Build Coastguard Worker }
827*8975f5c5SAndroid Build Coastguard Worker
getTimestamp()828*8975f5c5SAndroid Build Coastguard Worker GLint64 ContextWgpu::getTimestamp()
829*8975f5c5SAndroid Build Coastguard Worker {
830*8975f5c5SAndroid Build Coastguard Worker return 0;
831*8975f5c5SAndroid Build Coastguard Worker }
832*8975f5c5SAndroid Build Coastguard Worker
onMakeCurrent(const gl::Context * context)833*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::onMakeCurrent(const gl::Context *context)
834*8975f5c5SAndroid Build Coastguard Worker {
835*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
836*8975f5c5SAndroid Build Coastguard Worker }
837*8975f5c5SAndroid Build Coastguard Worker
getNativeCaps() const838*8975f5c5SAndroid Build Coastguard Worker gl::Caps ContextWgpu::getNativeCaps() const
839*8975f5c5SAndroid Build Coastguard Worker {
840*8975f5c5SAndroid Build Coastguard Worker return mDisplay->getGLCaps();
841*8975f5c5SAndroid Build Coastguard Worker }
842*8975f5c5SAndroid Build Coastguard Worker
getNativeTextureCaps() const843*8975f5c5SAndroid Build Coastguard Worker const gl::TextureCapsMap &ContextWgpu::getNativeTextureCaps() const
844*8975f5c5SAndroid Build Coastguard Worker {
845*8975f5c5SAndroid Build Coastguard Worker return mDisplay->getGLTextureCaps();
846*8975f5c5SAndroid Build Coastguard Worker }
847*8975f5c5SAndroid Build Coastguard Worker
getNativeExtensions() const848*8975f5c5SAndroid Build Coastguard Worker const gl::Extensions &ContextWgpu::getNativeExtensions() const
849*8975f5c5SAndroid Build Coastguard Worker {
850*8975f5c5SAndroid Build Coastguard Worker return mDisplay->getGLExtensions();
851*8975f5c5SAndroid Build Coastguard Worker }
852*8975f5c5SAndroid Build Coastguard Worker
getNativeLimitations() const853*8975f5c5SAndroid Build Coastguard Worker const gl::Limitations &ContextWgpu::getNativeLimitations() const
854*8975f5c5SAndroid Build Coastguard Worker {
855*8975f5c5SAndroid Build Coastguard Worker return mDisplay->getGLLimitations();
856*8975f5c5SAndroid Build Coastguard Worker }
857*8975f5c5SAndroid Build Coastguard Worker
getNativePixelLocalStorageOptions() const858*8975f5c5SAndroid Build Coastguard Worker const ShPixelLocalStorageOptions &ContextWgpu::getNativePixelLocalStorageOptions() const
859*8975f5c5SAndroid Build Coastguard Worker {
860*8975f5c5SAndroid Build Coastguard Worker return mDisplay->getPLSOptions();
861*8975f5c5SAndroid Build Coastguard Worker }
862*8975f5c5SAndroid Build Coastguard Worker
createCompiler()863*8975f5c5SAndroid Build Coastguard Worker CompilerImpl *ContextWgpu::createCompiler()
864*8975f5c5SAndroid Build Coastguard Worker {
865*8975f5c5SAndroid Build Coastguard Worker return new CompilerWgpu();
866*8975f5c5SAndroid Build Coastguard Worker }
867*8975f5c5SAndroid Build Coastguard Worker
createShader(const gl::ShaderState & data)868*8975f5c5SAndroid Build Coastguard Worker ShaderImpl *ContextWgpu::createShader(const gl::ShaderState &data)
869*8975f5c5SAndroid Build Coastguard Worker {
870*8975f5c5SAndroid Build Coastguard Worker return new ShaderWgpu(data);
871*8975f5c5SAndroid Build Coastguard Worker }
872*8975f5c5SAndroid Build Coastguard Worker
createProgram(const gl::ProgramState & data)873*8975f5c5SAndroid Build Coastguard Worker ProgramImpl *ContextWgpu::createProgram(const gl::ProgramState &data)
874*8975f5c5SAndroid Build Coastguard Worker {
875*8975f5c5SAndroid Build Coastguard Worker return new ProgramWgpu(data);
876*8975f5c5SAndroid Build Coastguard Worker }
877*8975f5c5SAndroid Build Coastguard Worker
createProgramExecutable(const gl::ProgramExecutable * executable)878*8975f5c5SAndroid Build Coastguard Worker ProgramExecutableImpl *ContextWgpu::createProgramExecutable(const gl::ProgramExecutable *executable)
879*8975f5c5SAndroid Build Coastguard Worker {
880*8975f5c5SAndroid Build Coastguard Worker return new ProgramExecutableWgpu(executable);
881*8975f5c5SAndroid Build Coastguard Worker }
882*8975f5c5SAndroid Build Coastguard Worker
createFramebuffer(const gl::FramebufferState & data)883*8975f5c5SAndroid Build Coastguard Worker FramebufferImpl *ContextWgpu::createFramebuffer(const gl::FramebufferState &data)
884*8975f5c5SAndroid Build Coastguard Worker {
885*8975f5c5SAndroid Build Coastguard Worker return new FramebufferWgpu(data);
886*8975f5c5SAndroid Build Coastguard Worker }
887*8975f5c5SAndroid Build Coastguard Worker
createTexture(const gl::TextureState & state)888*8975f5c5SAndroid Build Coastguard Worker TextureImpl *ContextWgpu::createTexture(const gl::TextureState &state)
889*8975f5c5SAndroid Build Coastguard Worker {
890*8975f5c5SAndroid Build Coastguard Worker return new TextureWgpu(state);
891*8975f5c5SAndroid Build Coastguard Worker }
892*8975f5c5SAndroid Build Coastguard Worker
createRenderbuffer(const gl::RenderbufferState & state)893*8975f5c5SAndroid Build Coastguard Worker RenderbufferImpl *ContextWgpu::createRenderbuffer(const gl::RenderbufferState &state)
894*8975f5c5SAndroid Build Coastguard Worker {
895*8975f5c5SAndroid Build Coastguard Worker return new RenderbufferWgpu(state);
896*8975f5c5SAndroid Build Coastguard Worker }
897*8975f5c5SAndroid Build Coastguard Worker
createBuffer(const gl::BufferState & state)898*8975f5c5SAndroid Build Coastguard Worker BufferImpl *ContextWgpu::createBuffer(const gl::BufferState &state)
899*8975f5c5SAndroid Build Coastguard Worker {
900*8975f5c5SAndroid Build Coastguard Worker return new BufferWgpu(state);
901*8975f5c5SAndroid Build Coastguard Worker }
902*8975f5c5SAndroid Build Coastguard Worker
createVertexArray(const gl::VertexArrayState & data)903*8975f5c5SAndroid Build Coastguard Worker VertexArrayImpl *ContextWgpu::createVertexArray(const gl::VertexArrayState &data)
904*8975f5c5SAndroid Build Coastguard Worker {
905*8975f5c5SAndroid Build Coastguard Worker return new VertexArrayWgpu(data);
906*8975f5c5SAndroid Build Coastguard Worker }
907*8975f5c5SAndroid Build Coastguard Worker
createQuery(gl::QueryType type)908*8975f5c5SAndroid Build Coastguard Worker QueryImpl *ContextWgpu::createQuery(gl::QueryType type)
909*8975f5c5SAndroid Build Coastguard Worker {
910*8975f5c5SAndroid Build Coastguard Worker return new QueryWgpu(type);
911*8975f5c5SAndroid Build Coastguard Worker }
912*8975f5c5SAndroid Build Coastguard Worker
createFenceNV()913*8975f5c5SAndroid Build Coastguard Worker FenceNVImpl *ContextWgpu::createFenceNV()
914*8975f5c5SAndroid Build Coastguard Worker {
915*8975f5c5SAndroid Build Coastguard Worker return new FenceNVWgpu();
916*8975f5c5SAndroid Build Coastguard Worker }
917*8975f5c5SAndroid Build Coastguard Worker
createSync()918*8975f5c5SAndroid Build Coastguard Worker SyncImpl *ContextWgpu::createSync()
919*8975f5c5SAndroid Build Coastguard Worker {
920*8975f5c5SAndroid Build Coastguard Worker return new SyncWgpu();
921*8975f5c5SAndroid Build Coastguard Worker }
922*8975f5c5SAndroid Build Coastguard Worker
createTransformFeedback(const gl::TransformFeedbackState & state)923*8975f5c5SAndroid Build Coastguard Worker TransformFeedbackImpl *ContextWgpu::createTransformFeedback(const gl::TransformFeedbackState &state)
924*8975f5c5SAndroid Build Coastguard Worker {
925*8975f5c5SAndroid Build Coastguard Worker return new TransformFeedbackWgpu(state);
926*8975f5c5SAndroid Build Coastguard Worker }
927*8975f5c5SAndroid Build Coastguard Worker
createSampler(const gl::SamplerState & state)928*8975f5c5SAndroid Build Coastguard Worker SamplerImpl *ContextWgpu::createSampler(const gl::SamplerState &state)
929*8975f5c5SAndroid Build Coastguard Worker {
930*8975f5c5SAndroid Build Coastguard Worker return new SamplerWgpu(state);
931*8975f5c5SAndroid Build Coastguard Worker }
932*8975f5c5SAndroid Build Coastguard Worker
createProgramPipeline(const gl::ProgramPipelineState & state)933*8975f5c5SAndroid Build Coastguard Worker ProgramPipelineImpl *ContextWgpu::createProgramPipeline(const gl::ProgramPipelineState &state)
934*8975f5c5SAndroid Build Coastguard Worker {
935*8975f5c5SAndroid Build Coastguard Worker return new ProgramPipelineWgpu(state);
936*8975f5c5SAndroid Build Coastguard Worker }
937*8975f5c5SAndroid Build Coastguard Worker
createMemoryObject()938*8975f5c5SAndroid Build Coastguard Worker MemoryObjectImpl *ContextWgpu::createMemoryObject()
939*8975f5c5SAndroid Build Coastguard Worker {
940*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
941*8975f5c5SAndroid Build Coastguard Worker return nullptr;
942*8975f5c5SAndroid Build Coastguard Worker }
943*8975f5c5SAndroid Build Coastguard Worker
createSemaphore()944*8975f5c5SAndroid Build Coastguard Worker SemaphoreImpl *ContextWgpu::createSemaphore()
945*8975f5c5SAndroid Build Coastguard Worker {
946*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
947*8975f5c5SAndroid Build Coastguard Worker return nullptr;
948*8975f5c5SAndroid Build Coastguard Worker }
949*8975f5c5SAndroid Build Coastguard Worker
createOverlay(const gl::OverlayState & state)950*8975f5c5SAndroid Build Coastguard Worker OverlayImpl *ContextWgpu::createOverlay(const gl::OverlayState &state)
951*8975f5c5SAndroid Build Coastguard Worker {
952*8975f5c5SAndroid Build Coastguard Worker return new OverlayImpl(state);
953*8975f5c5SAndroid Build Coastguard Worker }
954*8975f5c5SAndroid Build Coastguard Worker
dispatchCompute(const gl::Context * context,GLuint numGroupsX,GLuint numGroupsY,GLuint numGroupsZ)955*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::dispatchCompute(const gl::Context *context,
956*8975f5c5SAndroid Build Coastguard Worker GLuint numGroupsX,
957*8975f5c5SAndroid Build Coastguard Worker GLuint numGroupsY,
958*8975f5c5SAndroid Build Coastguard Worker GLuint numGroupsZ)
959*8975f5c5SAndroid Build Coastguard Worker {
960*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
961*8975f5c5SAndroid Build Coastguard Worker }
962*8975f5c5SAndroid Build Coastguard Worker
dispatchComputeIndirect(const gl::Context * context,GLintptr indirect)963*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::dispatchComputeIndirect(const gl::Context *context, GLintptr indirect)
964*8975f5c5SAndroid Build Coastguard Worker {
965*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
966*8975f5c5SAndroid Build Coastguard Worker }
967*8975f5c5SAndroid Build Coastguard Worker
memoryBarrier(const gl::Context * context,GLbitfield barriers)968*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::memoryBarrier(const gl::Context *context, GLbitfield barriers)
969*8975f5c5SAndroid Build Coastguard Worker {
970*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
971*8975f5c5SAndroid Build Coastguard Worker }
972*8975f5c5SAndroid Build Coastguard Worker
memoryBarrierByRegion(const gl::Context * context,GLbitfield barriers)973*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::memoryBarrierByRegion(const gl::Context *context, GLbitfield barriers)
974*8975f5c5SAndroid Build Coastguard Worker {
975*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
976*8975f5c5SAndroid Build Coastguard Worker }
977*8975f5c5SAndroid Build Coastguard Worker
handleError(GLenum errorCode,const char * message,const char * file,const char * function,unsigned int line)978*8975f5c5SAndroid Build Coastguard Worker void ContextWgpu::handleError(GLenum errorCode,
979*8975f5c5SAndroid Build Coastguard Worker const char *message,
980*8975f5c5SAndroid Build Coastguard Worker const char *file,
981*8975f5c5SAndroid Build Coastguard Worker const char *function,
982*8975f5c5SAndroid Build Coastguard Worker unsigned int line)
983*8975f5c5SAndroid Build Coastguard Worker {
984*8975f5c5SAndroid Build Coastguard Worker std::stringstream errorStream;
985*8975f5c5SAndroid Build Coastguard Worker errorStream << "Internal Wgpu back-end error: " << message << ".";
986*8975f5c5SAndroid Build Coastguard Worker mErrors->handleError(errorCode, errorStream.str().c_str(), file, function, line);
987*8975f5c5SAndroid Build Coastguard Worker }
988*8975f5c5SAndroid Build Coastguard Worker
startRenderPass(const wgpu::RenderPassDescriptor & desc)989*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::startRenderPass(const wgpu::RenderPassDescriptor &desc)
990*8975f5c5SAndroid Build Coastguard Worker {
991*8975f5c5SAndroid Build Coastguard Worker ensureCommandEncoderCreated();
992*8975f5c5SAndroid Build Coastguard Worker
993*8975f5c5SAndroid Build Coastguard Worker mCurrentRenderPass = mCurrentCommandEncoder.BeginRenderPass(&desc);
994*8975f5c5SAndroid Build Coastguard Worker mDirtyBits |= mNewRenderPassDirtyBits;
995*8975f5c5SAndroid Build Coastguard Worker
996*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
997*8975f5c5SAndroid Build Coastguard Worker }
998*8975f5c5SAndroid Build Coastguard Worker
endRenderPass(webgpu::RenderPassClosureReason closureReason)999*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::endRenderPass(webgpu::RenderPassClosureReason closureReason)
1000*8975f5c5SAndroid Build Coastguard Worker {
1001*8975f5c5SAndroid Build Coastguard Worker if (mCurrentRenderPass)
1002*8975f5c5SAndroid Build Coastguard Worker {
1003*8975f5c5SAndroid Build Coastguard Worker const char *reasonText = kRenderPassClosureReason[closureReason];
1004*8975f5c5SAndroid Build Coastguard Worker ASSERT(reasonText);
1005*8975f5c5SAndroid Build Coastguard Worker
1006*8975f5c5SAndroid Build Coastguard Worker if (mCommandBuffer.hasCommands())
1007*8975f5c5SAndroid Build Coastguard Worker {
1008*8975f5c5SAndroid Build Coastguard Worker ANGLE_WGPU_SCOPED_DEBUG_TRY(this, mCommandBuffer.recordCommands(mCurrentRenderPass));
1009*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.clear();
1010*8975f5c5SAndroid Build Coastguard Worker }
1011*8975f5c5SAndroid Build Coastguard Worker
1012*8975f5c5SAndroid Build Coastguard Worker mCurrentRenderPass.End();
1013*8975f5c5SAndroid Build Coastguard Worker mCurrentRenderPass = nullptr;
1014*8975f5c5SAndroid Build Coastguard Worker }
1015*8975f5c5SAndroid Build Coastguard Worker
1016*8975f5c5SAndroid Build Coastguard Worker mDirtyBits.set(DIRTY_BIT_RENDER_PASS);
1017*8975f5c5SAndroid Build Coastguard Worker
1018*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1019*8975f5c5SAndroid Build Coastguard Worker }
1020*8975f5c5SAndroid Build Coastguard Worker
setupDraw(const gl::Context * context,gl::PrimitiveMode mode,GLint firstVertexOrInvalid,GLsizei vertexOrIndexCount,GLsizei instanceCount,gl::DrawElementsType indexTypeOrInvalid,const void * indices,GLint baseVertex,uint32_t * outFirstIndex)1021*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::setupDraw(const gl::Context *context,
1022*8975f5c5SAndroid Build Coastguard Worker gl::PrimitiveMode mode,
1023*8975f5c5SAndroid Build Coastguard Worker GLint firstVertexOrInvalid,
1024*8975f5c5SAndroid Build Coastguard Worker GLsizei vertexOrIndexCount,
1025*8975f5c5SAndroid Build Coastguard Worker GLsizei instanceCount,
1026*8975f5c5SAndroid Build Coastguard Worker gl::DrawElementsType indexTypeOrInvalid,
1027*8975f5c5SAndroid Build Coastguard Worker const void *indices,
1028*8975f5c5SAndroid Build Coastguard Worker GLint baseVertex,
1029*8975f5c5SAndroid Build Coastguard Worker uint32_t *outFirstIndex)
1030*8975f5c5SAndroid Build Coastguard Worker {
1031*8975f5c5SAndroid Build Coastguard Worker if (mRenderPipelineDesc.setPrimitiveMode(mode, indexTypeOrInvalid))
1032*8975f5c5SAndroid Build Coastguard Worker {
1033*8975f5c5SAndroid Build Coastguard Worker invalidateCurrentRenderPipeline();
1034*8975f5c5SAndroid Build Coastguard Worker }
1035*8975f5c5SAndroid Build Coastguard Worker
1036*8975f5c5SAndroid Build Coastguard Worker ProgramExecutableWgpu *executableWgpu = webgpu::GetImpl(mState.getProgramExecutable());
1037*8975f5c5SAndroid Build Coastguard Worker if (executableWgpu->checkDirtyUniforms())
1038*8975f5c5SAndroid Build Coastguard Worker {
1039*8975f5c5SAndroid Build Coastguard Worker mDirtyBits.set(DIRTY_BIT_BIND_GROUPS);
1040*8975f5c5SAndroid Build Coastguard Worker }
1041*8975f5c5SAndroid Build Coastguard Worker
1042*8975f5c5SAndroid Build Coastguard Worker const void *adjustedIndicesPtr = indices;
1043*8975f5c5SAndroid Build Coastguard Worker if (mState.areClientArraysEnabled())
1044*8975f5c5SAndroid Build Coastguard Worker {
1045*8975f5c5SAndroid Build Coastguard Worker VertexArrayWgpu *vertexArrayWgpu = GetImplAs<VertexArrayWgpu>(mState.getVertexArray());
1046*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(vertexArrayWgpu->syncClientArrays(
1047*8975f5c5SAndroid Build Coastguard Worker context, mState.getProgramExecutable()->getActiveAttribLocationsMask(),
1048*8975f5c5SAndroid Build Coastguard Worker firstVertexOrInvalid, vertexOrIndexCount, instanceCount, indexTypeOrInvalid, indices,
1049*8975f5c5SAndroid Build Coastguard Worker baseVertex, mState.isPrimitiveRestartEnabled(), &adjustedIndicesPtr));
1050*8975f5c5SAndroid Build Coastguard Worker }
1051*8975f5c5SAndroid Build Coastguard Worker
1052*8975f5c5SAndroid Build Coastguard Worker bool reAddDirtyIndexBufferBit = false;
1053*8975f5c5SAndroid Build Coastguard Worker if (indexTypeOrInvalid != gl::DrawElementsType::InvalidEnum)
1054*8975f5c5SAndroid Build Coastguard Worker {
1055*8975f5c5SAndroid Build Coastguard Worker *outFirstIndex = gl_wgpu::GetFirstIndexForDrawCall(indexTypeOrInvalid, adjustedIndicesPtr);
1056*8975f5c5SAndroid Build Coastguard Worker if (mCurrentIndexBufferType != indexTypeOrInvalid)
1057*8975f5c5SAndroid Build Coastguard Worker {
1058*8975f5c5SAndroid Build Coastguard Worker invalidateIndexBuffer();
1059*8975f5c5SAndroid Build Coastguard Worker }
1060*8975f5c5SAndroid Build Coastguard Worker }
1061*8975f5c5SAndroid Build Coastguard Worker else
1062*8975f5c5SAndroid Build Coastguard Worker {
1063*8975f5c5SAndroid Build Coastguard Worker ASSERT(outFirstIndex == nullptr);
1064*8975f5c5SAndroid Build Coastguard Worker }
1065*8975f5c5SAndroid Build Coastguard Worker
1066*8975f5c5SAndroid Build Coastguard Worker if (mDirtyBits.any())
1067*8975f5c5SAndroid Build Coastguard Worker {
1068*8975f5c5SAndroid Build Coastguard Worker for (DirtyBits::Iterator dirtyBitIter = mDirtyBits.begin();
1069*8975f5c5SAndroid Build Coastguard Worker dirtyBitIter != mDirtyBits.end(); ++dirtyBitIter)
1070*8975f5c5SAndroid Build Coastguard Worker {
1071*8975f5c5SAndroid Build Coastguard Worker size_t dirtyBit = *dirtyBitIter;
1072*8975f5c5SAndroid Build Coastguard Worker switch (dirtyBit)
1073*8975f5c5SAndroid Build Coastguard Worker {
1074*8975f5c5SAndroid Build Coastguard Worker case DIRTY_BIT_RENDER_PIPELINE_DESC:
1075*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(handleDirtyRenderPipelineDesc(&dirtyBitIter));
1076*8975f5c5SAndroid Build Coastguard Worker break;
1077*8975f5c5SAndroid Build Coastguard Worker
1078*8975f5c5SAndroid Build Coastguard Worker case DIRTY_BIT_RENDER_PASS:
1079*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(handleDirtyRenderPass(&dirtyBitIter));
1080*8975f5c5SAndroid Build Coastguard Worker break;
1081*8975f5c5SAndroid Build Coastguard Worker
1082*8975f5c5SAndroid Build Coastguard Worker case DIRTY_BIT_RENDER_PIPELINE_BINDING:
1083*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(handleDirtyRenderPipelineBinding(&dirtyBitIter));
1084*8975f5c5SAndroid Build Coastguard Worker break;
1085*8975f5c5SAndroid Build Coastguard Worker
1086*8975f5c5SAndroid Build Coastguard Worker case DIRTY_BIT_VIEWPORT:
1087*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(handleDirtyViewport(&dirtyBitIter));
1088*8975f5c5SAndroid Build Coastguard Worker break;
1089*8975f5c5SAndroid Build Coastguard Worker
1090*8975f5c5SAndroid Build Coastguard Worker case DIRTY_BIT_SCISSOR:
1091*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(handleDirtyScissor(&dirtyBitIter));
1092*8975f5c5SAndroid Build Coastguard Worker break;
1093*8975f5c5SAndroid Build Coastguard Worker
1094*8975f5c5SAndroid Build Coastguard Worker case DIRTY_BIT_VERTEX_BUFFERS:
1095*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(handleDirtyVertexBuffers(mDirtyVertexBuffers, &dirtyBitIter));
1096*8975f5c5SAndroid Build Coastguard Worker mDirtyVertexBuffers.reset();
1097*8975f5c5SAndroid Build Coastguard Worker break;
1098*8975f5c5SAndroid Build Coastguard Worker
1099*8975f5c5SAndroid Build Coastguard Worker case DIRTY_BIT_INDEX_BUFFER:
1100*8975f5c5SAndroid Build Coastguard Worker if (indexTypeOrInvalid != gl::DrawElementsType::InvalidEnum)
1101*8975f5c5SAndroid Build Coastguard Worker {
1102*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(handleDirtyIndexBuffer(indexTypeOrInvalid, &dirtyBitIter));
1103*8975f5c5SAndroid Build Coastguard Worker }
1104*8975f5c5SAndroid Build Coastguard Worker else
1105*8975f5c5SAndroid Build Coastguard Worker {
1106*8975f5c5SAndroid Build Coastguard Worker // If this is not an indexed draw call, don't sync the index buffer. Save it
1107*8975f5c5SAndroid Build Coastguard Worker // for a future indexed draw call when we know what index type to use
1108*8975f5c5SAndroid Build Coastguard Worker reAddDirtyIndexBufferBit = true;
1109*8975f5c5SAndroid Build Coastguard Worker }
1110*8975f5c5SAndroid Build Coastguard Worker break;
1111*8975f5c5SAndroid Build Coastguard Worker case DIRTY_BIT_BIND_GROUPS:
1112*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(handleDirtyBindGroups(&dirtyBitIter));
1113*8975f5c5SAndroid Build Coastguard Worker break;
1114*8975f5c5SAndroid Build Coastguard Worker default:
1115*8975f5c5SAndroid Build Coastguard Worker UNREACHABLE();
1116*8975f5c5SAndroid Build Coastguard Worker break;
1117*8975f5c5SAndroid Build Coastguard Worker }
1118*8975f5c5SAndroid Build Coastguard Worker }
1119*8975f5c5SAndroid Build Coastguard Worker
1120*8975f5c5SAndroid Build Coastguard Worker if (reAddDirtyIndexBufferBit)
1121*8975f5c5SAndroid Build Coastguard Worker {
1122*8975f5c5SAndroid Build Coastguard Worker // Re-add the index buffer dirty bit for a future indexed draw call.
1123*8975f5c5SAndroid Build Coastguard Worker mDirtyBits.reset(DIRTY_BIT_INDEX_BUFFER);
1124*8975f5c5SAndroid Build Coastguard Worker }
1125*8975f5c5SAndroid Build Coastguard Worker
1126*8975f5c5SAndroid Build Coastguard Worker mDirtyBits.reset();
1127*8975f5c5SAndroid Build Coastguard Worker }
1128*8975f5c5SAndroid Build Coastguard Worker
1129*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1130*8975f5c5SAndroid Build Coastguard Worker }
1131*8975f5c5SAndroid Build Coastguard Worker
handleDirtyRenderPipelineDesc(DirtyBits::Iterator * dirtyBitsIterator)1132*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::handleDirtyRenderPipelineDesc(DirtyBits::Iterator *dirtyBitsIterator)
1133*8975f5c5SAndroid Build Coastguard Worker {
1134*8975f5c5SAndroid Build Coastguard Worker ASSERT(mState.getProgramExecutable() != nullptr);
1135*8975f5c5SAndroid Build Coastguard Worker ProgramExecutableWgpu *executable = webgpu::GetImpl(mState.getProgramExecutable());
1136*8975f5c5SAndroid Build Coastguard Worker ASSERT(executable);
1137*8975f5c5SAndroid Build Coastguard Worker
1138*8975f5c5SAndroid Build Coastguard Worker wgpu::RenderPipeline previousPipeline = std::move(mCurrentGraphicsPipeline);
1139*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(executable->getRenderPipeline(this, mRenderPipelineDesc, &mCurrentGraphicsPipeline));
1140*8975f5c5SAndroid Build Coastguard Worker if (mCurrentGraphicsPipeline != previousPipeline)
1141*8975f5c5SAndroid Build Coastguard Worker {
1142*8975f5c5SAndroid Build Coastguard Worker dirtyBitsIterator->setLaterBit(DIRTY_BIT_RENDER_PIPELINE_BINDING);
1143*8975f5c5SAndroid Build Coastguard Worker }
1144*8975f5c5SAndroid Build Coastguard Worker mCurrentRenderPipelineAllAttributes =
1145*8975f5c5SAndroid Build Coastguard Worker executable->getExecutable()->getActiveAttribLocationsMask();
1146*8975f5c5SAndroid Build Coastguard Worker
1147*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1148*8975f5c5SAndroid Build Coastguard Worker }
1149*8975f5c5SAndroid Build Coastguard Worker
handleDirtyRenderPipelineBinding(DirtyBits::Iterator * dirtyBitsIterator)1150*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::handleDirtyRenderPipelineBinding(DirtyBits::Iterator *dirtyBitsIterator)
1151*8975f5c5SAndroid Build Coastguard Worker {
1152*8975f5c5SAndroid Build Coastguard Worker ASSERT(mCurrentGraphicsPipeline);
1153*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.setPipeline(mCurrentGraphicsPipeline);
1154*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1155*8975f5c5SAndroid Build Coastguard Worker }
1156*8975f5c5SAndroid Build Coastguard Worker
handleDirtyViewport(DirtyBits::Iterator * dirtyBitsIterator)1157*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::handleDirtyViewport(DirtyBits::Iterator *dirtyBitsIterator)
1158*8975f5c5SAndroid Build Coastguard Worker {
1159*8975f5c5SAndroid Build Coastguard Worker const gl::Framebuffer *framebuffer = mState.getDrawFramebuffer();
1160*8975f5c5SAndroid Build Coastguard Worker const gl::Extents &framebufferSize = framebuffer->getExtents();
1161*8975f5c5SAndroid Build Coastguard Worker const gl::Rectangle framebufferRect(0, 0, framebufferSize.width, framebufferSize.height);
1162*8975f5c5SAndroid Build Coastguard Worker
1163*8975f5c5SAndroid Build Coastguard Worker gl::Rectangle clampedViewport;
1164*8975f5c5SAndroid Build Coastguard Worker if (!ClipRectangle(mState.getViewport(), framebufferRect, &clampedViewport))
1165*8975f5c5SAndroid Build Coastguard Worker {
1166*8975f5c5SAndroid Build Coastguard Worker clampedViewport = gl::Rectangle(0, 0, 1, 1);
1167*8975f5c5SAndroid Build Coastguard Worker }
1168*8975f5c5SAndroid Build Coastguard Worker
1169*8975f5c5SAndroid Build Coastguard Worker float depthMin = mState.getNearPlane();
1170*8975f5c5SAndroid Build Coastguard Worker float depthMax = mState.getFarPlane();
1171*8975f5c5SAndroid Build Coastguard Worker
1172*8975f5c5SAndroid Build Coastguard Worker // This clamping should be done by the front end. WebGPU requires values in this range.
1173*8975f5c5SAndroid Build Coastguard Worker ASSERT(depthMin >= 0 && depthMin <= 1);
1174*8975f5c5SAndroid Build Coastguard Worker ASSERT(depthMin >= 0 && depthMin <= 1);
1175*8975f5c5SAndroid Build Coastguard Worker
1176*8975f5c5SAndroid Build Coastguard Worker // WebGPU requires that the maxDepth is at least minDepth. WebGL requires the same but core GL
1177*8975f5c5SAndroid Build Coastguard Worker // ES does not.
1178*8975f5c5SAndroid Build Coastguard Worker if (depthMin > depthMax)
1179*8975f5c5SAndroid Build Coastguard Worker {
1180*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
1181*8975f5c5SAndroid Build Coastguard Worker }
1182*8975f5c5SAndroid Build Coastguard Worker
1183*8975f5c5SAndroid Build Coastguard Worker bool isDefaultViewport = (clampedViewport == framebufferRect) && depthMin == 0 && depthMax == 1;
1184*8975f5c5SAndroid Build Coastguard Worker if (isDefaultViewport && !mCommandBuffer.hasSetViewportCommand())
1185*8975f5c5SAndroid Build Coastguard Worker {
1186*8975f5c5SAndroid Build Coastguard Worker // Each render pass has a default viewport set equal to the size of the render targets. We
1187*8975f5c5SAndroid Build Coastguard Worker // can skip setting the viewport.
1188*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1189*8975f5c5SAndroid Build Coastguard Worker }
1190*8975f5c5SAndroid Build Coastguard Worker
1191*8975f5c5SAndroid Build Coastguard Worker ASSERT(mCurrentGraphicsPipeline);
1192*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.setViewport(clampedViewport.x, clampedViewport.y, clampedViewport.width,
1193*8975f5c5SAndroid Build Coastguard Worker clampedViewport.height, depthMin, depthMax);
1194*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1195*8975f5c5SAndroid Build Coastguard Worker }
1196*8975f5c5SAndroid Build Coastguard Worker
handleDirtyScissor(DirtyBits::Iterator * dirtyBitsIterator)1197*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::handleDirtyScissor(DirtyBits::Iterator *dirtyBitsIterator)
1198*8975f5c5SAndroid Build Coastguard Worker {
1199*8975f5c5SAndroid Build Coastguard Worker const gl::Framebuffer *framebuffer = mState.getDrawFramebuffer();
1200*8975f5c5SAndroid Build Coastguard Worker const gl::Extents &framebufferSize = framebuffer->getExtents();
1201*8975f5c5SAndroid Build Coastguard Worker const gl::Rectangle framebufferRect(0, 0, framebufferSize.width, framebufferSize.height);
1202*8975f5c5SAndroid Build Coastguard Worker
1203*8975f5c5SAndroid Build Coastguard Worker gl::Rectangle clampedScissor = framebufferRect;
1204*8975f5c5SAndroid Build Coastguard Worker
1205*8975f5c5SAndroid Build Coastguard Worker // When the GL scissor test is disabled, set the scissor to the entire size of the framebuffer
1206*8975f5c5SAndroid Build Coastguard Worker if (mState.isScissorTestEnabled())
1207*8975f5c5SAndroid Build Coastguard Worker {
1208*8975f5c5SAndroid Build Coastguard Worker if (!ClipRectangle(mState.getScissor(), framebufferRect, &clampedScissor))
1209*8975f5c5SAndroid Build Coastguard Worker {
1210*8975f5c5SAndroid Build Coastguard Worker clampedScissor = gl::Rectangle(0, 0, 0, 0);
1211*8975f5c5SAndroid Build Coastguard Worker }
1212*8975f5c5SAndroid Build Coastguard Worker }
1213*8975f5c5SAndroid Build Coastguard Worker
1214*8975f5c5SAndroid Build Coastguard Worker bool isDefaultScissor = clampedScissor == framebufferRect;
1215*8975f5c5SAndroid Build Coastguard Worker if (isDefaultScissor && !mCommandBuffer.hasSetScissorCommand())
1216*8975f5c5SAndroid Build Coastguard Worker {
1217*8975f5c5SAndroid Build Coastguard Worker // Each render pass has a default scissor set equal to the size of the render targets. We
1218*8975f5c5SAndroid Build Coastguard Worker // can skip setting the scissor.
1219*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1220*8975f5c5SAndroid Build Coastguard Worker }
1221*8975f5c5SAndroid Build Coastguard Worker
1222*8975f5c5SAndroid Build Coastguard Worker ASSERT(mCurrentGraphicsPipeline);
1223*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.setScissorRect(clampedScissor.x, clampedScissor.y, clampedScissor.width,
1224*8975f5c5SAndroid Build Coastguard Worker clampedScissor.height);
1225*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1226*8975f5c5SAndroid Build Coastguard Worker }
1227*8975f5c5SAndroid Build Coastguard Worker
handleDirtyRenderPass(DirtyBits::Iterator * dirtyBitsIterator)1228*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::handleDirtyRenderPass(DirtyBits::Iterator *dirtyBitsIterator)
1229*8975f5c5SAndroid Build Coastguard Worker {
1230*8975f5c5SAndroid Build Coastguard Worker FramebufferWgpu *drawFramebufferWgpu = webgpu::GetImpl(mState.getDrawFramebuffer());
1231*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(drawFramebufferWgpu->startNewRenderPass(this));
1232*8975f5c5SAndroid Build Coastguard Worker dirtyBitsIterator->setLaterBits(mNewRenderPassDirtyBits);
1233*8975f5c5SAndroid Build Coastguard Worker mDirtyVertexBuffers = mCurrentRenderPipelineAllAttributes;
1234*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1235*8975f5c5SAndroid Build Coastguard Worker }
1236*8975f5c5SAndroid Build Coastguard Worker
handleDirtyVertexBuffers(const gl::AttributesMask & slots,DirtyBits::Iterator * dirtyBitsIterator)1237*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::handleDirtyVertexBuffers(const gl::AttributesMask &slots,
1238*8975f5c5SAndroid Build Coastguard Worker DirtyBits::Iterator *dirtyBitsIterator)
1239*8975f5c5SAndroid Build Coastguard Worker {
1240*8975f5c5SAndroid Build Coastguard Worker VertexArrayWgpu *vertexArrayWgpu = GetImplAs<VertexArrayWgpu>(mState.getVertexArray());
1241*8975f5c5SAndroid Build Coastguard Worker for (size_t slot : slots)
1242*8975f5c5SAndroid Build Coastguard Worker {
1243*8975f5c5SAndroid Build Coastguard Worker webgpu::BufferHelper *buffer = vertexArrayWgpu->getVertexBuffer(slot);
1244*8975f5c5SAndroid Build Coastguard Worker if (!buffer)
1245*8975f5c5SAndroid Build Coastguard Worker {
1246*8975f5c5SAndroid Build Coastguard Worker // Missing default attribute support
1247*8975f5c5SAndroid Build Coastguard Worker ASSERT(!mState.getVertexArray()->getVertexAttribute(slot).enabled);
1248*8975f5c5SAndroid Build Coastguard Worker UNIMPLEMENTED();
1249*8975f5c5SAndroid Build Coastguard Worker continue;
1250*8975f5c5SAndroid Build Coastguard Worker }
1251*8975f5c5SAndroid Build Coastguard Worker if (buffer->getMappedState())
1252*8975f5c5SAndroid Build Coastguard Worker {
1253*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(buffer->unmap());
1254*8975f5c5SAndroid Build Coastguard Worker }
1255*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.setVertexBuffer(static_cast<uint32_t>(slot), buffer->getBuffer());
1256*8975f5c5SAndroid Build Coastguard Worker }
1257*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1258*8975f5c5SAndroid Build Coastguard Worker }
1259*8975f5c5SAndroid Build Coastguard Worker
handleDirtyIndexBuffer(gl::DrawElementsType indexType,DirtyBits::Iterator * dirtyBitsIterator)1260*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::handleDirtyIndexBuffer(gl::DrawElementsType indexType,
1261*8975f5c5SAndroid Build Coastguard Worker DirtyBits::Iterator *dirtyBitsIterator)
1262*8975f5c5SAndroid Build Coastguard Worker {
1263*8975f5c5SAndroid Build Coastguard Worker VertexArrayWgpu *vertexArrayWgpu = GetImplAs<VertexArrayWgpu>(mState.getVertexArray());
1264*8975f5c5SAndroid Build Coastguard Worker webgpu::BufferHelper *buffer = vertexArrayWgpu->getIndexBuffer();
1265*8975f5c5SAndroid Build Coastguard Worker ASSERT(buffer);
1266*8975f5c5SAndroid Build Coastguard Worker if (buffer->getMappedState())
1267*8975f5c5SAndroid Build Coastguard Worker {
1268*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(buffer->unmap());
1269*8975f5c5SAndroid Build Coastguard Worker }
1270*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.setIndexBuffer(buffer->getBuffer(), gl_wgpu::GetIndexFormat(indexType), 0, -1);
1271*8975f5c5SAndroid Build Coastguard Worker mCurrentIndexBufferType = indexType;
1272*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1273*8975f5c5SAndroid Build Coastguard Worker }
1274*8975f5c5SAndroid Build Coastguard Worker
handleDirtyBindGroups(DirtyBits::Iterator * dirtyBitsIterator)1275*8975f5c5SAndroid Build Coastguard Worker angle::Result ContextWgpu::handleDirtyBindGroups(DirtyBits::Iterator *dirtyBitsIterator)
1276*8975f5c5SAndroid Build Coastguard Worker {
1277*8975f5c5SAndroid Build Coastguard Worker ProgramExecutableWgpu *executableWgpu = webgpu::GetImpl(mState.getProgramExecutable());
1278*8975f5c5SAndroid Build Coastguard Worker wgpu::BindGroup bindGroup;
1279*8975f5c5SAndroid Build Coastguard Worker ANGLE_TRY(executableWgpu->updateUniformsAndGetBindGroup(this, &bindGroup));
1280*8975f5c5SAndroid Build Coastguard Worker // TODO(anglebug.com/376553328): need to set up every bind group here.
1281*8975f5c5SAndroid Build Coastguard Worker mCommandBuffer.setBindGroup(sh::kDefaultUniformBlockBindGroup, bindGroup);
1282*8975f5c5SAndroid Build Coastguard Worker
1283*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
1284*8975f5c5SAndroid Build Coastguard Worker }
1285*8975f5c5SAndroid Build Coastguard Worker
1286*8975f5c5SAndroid Build Coastguard Worker } // namespace rx
1287