xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/wgpu/ContextWgpu.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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.h:
7*8975f5c5SAndroid Build Coastguard Worker //    Defines the class interface for ContextWgpu, implementing ContextImpl.
8*8975f5c5SAndroid Build Coastguard Worker //
9*8975f5c5SAndroid Build Coastguard Worker 
10*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_WGPU_CONTEXTWGPU_H_
11*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_WGPU_CONTEXTWGPU_H_
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker #include <dawn/webgpu_cpp.h>
14*8975f5c5SAndroid Build Coastguard Worker 
15*8975f5c5SAndroid Build Coastguard Worker #include "image_util/loadimage.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/ContextImpl.h"
17*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/DisplayWgpu.h"
18*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/wgpu_command_buffer.h"
19*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/wgpu_format_utils.h"
20*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/wgpu_helpers.h"
21*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/wgpu_pipeline_state.h"
22*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/wgpu/wgpu_utils.h"
23*8975f5c5SAndroid Build Coastguard Worker 
24*8975f5c5SAndroid Build Coastguard Worker namespace rx
25*8975f5c5SAndroid Build Coastguard Worker {
26*8975f5c5SAndroid Build Coastguard Worker 
27*8975f5c5SAndroid Build Coastguard Worker class ContextWgpu : public ContextImpl
28*8975f5c5SAndroid Build Coastguard Worker {
29*8975f5c5SAndroid Build Coastguard Worker   public:
30*8975f5c5SAndroid Build Coastguard Worker     ContextWgpu(const gl::State &state, gl::ErrorSet *errorSet, DisplayWgpu *display);
31*8975f5c5SAndroid Build Coastguard Worker     ~ContextWgpu() override;
32*8975f5c5SAndroid Build Coastguard Worker 
33*8975f5c5SAndroid Build Coastguard Worker     angle::Result initialize(const angle::ImageLoadContext &imageLoadContext) override;
34*8975f5c5SAndroid Build Coastguard Worker 
35*8975f5c5SAndroid Build Coastguard Worker     void onDestroy(const gl::Context *context) override;
36*8975f5c5SAndroid Build Coastguard Worker 
37*8975f5c5SAndroid Build Coastguard Worker     // Flush and finish.
38*8975f5c5SAndroid Build Coastguard Worker     angle::Result flush(const gl::Context *context) override;
39*8975f5c5SAndroid Build Coastguard Worker     angle::Result finish(const gl::Context *context) override;
40*8975f5c5SAndroid Build Coastguard Worker 
41*8975f5c5SAndroid Build Coastguard Worker     // Drawing methods.
42*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawArrays(const gl::Context *context,
43*8975f5c5SAndroid Build Coastguard Worker                              gl::PrimitiveMode mode,
44*8975f5c5SAndroid Build Coastguard Worker                              GLint first,
45*8975f5c5SAndroid Build Coastguard Worker                              GLsizei count) override;
46*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawArraysInstanced(const gl::Context *context,
47*8975f5c5SAndroid Build Coastguard Worker                                       gl::PrimitiveMode mode,
48*8975f5c5SAndroid Build Coastguard Worker                                       GLint first,
49*8975f5c5SAndroid Build Coastguard Worker                                       GLsizei count,
50*8975f5c5SAndroid Build Coastguard Worker                                       GLsizei instanceCount) override;
51*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawArraysInstancedBaseInstance(const gl::Context *context,
52*8975f5c5SAndroid Build Coastguard Worker                                                   gl::PrimitiveMode mode,
53*8975f5c5SAndroid Build Coastguard Worker                                                   GLint first,
54*8975f5c5SAndroid Build Coastguard Worker                                                   GLsizei count,
55*8975f5c5SAndroid Build Coastguard Worker                                                   GLsizei instanceCount,
56*8975f5c5SAndroid Build Coastguard Worker                                                   GLuint baseInstance) override;
57*8975f5c5SAndroid Build Coastguard Worker 
58*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawElements(const gl::Context *context,
59*8975f5c5SAndroid Build Coastguard Worker                                gl::PrimitiveMode mode,
60*8975f5c5SAndroid Build Coastguard Worker                                GLsizei count,
61*8975f5c5SAndroid Build Coastguard Worker                                gl::DrawElementsType type,
62*8975f5c5SAndroid Build Coastguard Worker                                const void *indices) override;
63*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawElementsBaseVertex(const gl::Context *context,
64*8975f5c5SAndroid Build Coastguard Worker                                          gl::PrimitiveMode mode,
65*8975f5c5SAndroid Build Coastguard Worker                                          GLsizei count,
66*8975f5c5SAndroid Build Coastguard Worker                                          gl::DrawElementsType type,
67*8975f5c5SAndroid Build Coastguard Worker                                          const void *indices,
68*8975f5c5SAndroid Build Coastguard Worker                                          GLint baseVertex) override;
69*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawElementsInstanced(const gl::Context *context,
70*8975f5c5SAndroid Build Coastguard Worker                                         gl::PrimitiveMode mode,
71*8975f5c5SAndroid Build Coastguard Worker                                         GLsizei count,
72*8975f5c5SAndroid Build Coastguard Worker                                         gl::DrawElementsType type,
73*8975f5c5SAndroid Build Coastguard Worker                                         const void *indices,
74*8975f5c5SAndroid Build Coastguard Worker                                         GLsizei instances) override;
75*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawElementsInstancedBaseVertex(const gl::Context *context,
76*8975f5c5SAndroid Build Coastguard Worker                                                   gl::PrimitiveMode mode,
77*8975f5c5SAndroid Build Coastguard Worker                                                   GLsizei count,
78*8975f5c5SAndroid Build Coastguard Worker                                                   gl::DrawElementsType type,
79*8975f5c5SAndroid Build Coastguard Worker                                                   const void *indices,
80*8975f5c5SAndroid Build Coastguard Worker                                                   GLsizei instances,
81*8975f5c5SAndroid Build Coastguard Worker                                                   GLint baseVertex) override;
82*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawElementsInstancedBaseVertexBaseInstance(const gl::Context *context,
83*8975f5c5SAndroid Build Coastguard Worker                                                               gl::PrimitiveMode mode,
84*8975f5c5SAndroid Build Coastguard Worker                                                               GLsizei count,
85*8975f5c5SAndroid Build Coastguard Worker                                                               gl::DrawElementsType type,
86*8975f5c5SAndroid Build Coastguard Worker                                                               const void *indices,
87*8975f5c5SAndroid Build Coastguard Worker                                                               GLsizei instances,
88*8975f5c5SAndroid Build Coastguard Worker                                                               GLint baseVertex,
89*8975f5c5SAndroid Build Coastguard Worker                                                               GLuint baseInstance) override;
90*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawRangeElements(const gl::Context *context,
91*8975f5c5SAndroid Build Coastguard Worker                                     gl::PrimitiveMode mode,
92*8975f5c5SAndroid Build Coastguard Worker                                     GLuint start,
93*8975f5c5SAndroid Build Coastguard Worker                                     GLuint end,
94*8975f5c5SAndroid Build Coastguard Worker                                     GLsizei count,
95*8975f5c5SAndroid Build Coastguard Worker                                     gl::DrawElementsType type,
96*8975f5c5SAndroid Build Coastguard Worker                                     const void *indices) override;
97*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawRangeElementsBaseVertex(const gl::Context *context,
98*8975f5c5SAndroid Build Coastguard Worker                                               gl::PrimitiveMode mode,
99*8975f5c5SAndroid Build Coastguard Worker                                               GLuint start,
100*8975f5c5SAndroid Build Coastguard Worker                                               GLuint end,
101*8975f5c5SAndroid Build Coastguard Worker                                               GLsizei count,
102*8975f5c5SAndroid Build Coastguard Worker                                               gl::DrawElementsType type,
103*8975f5c5SAndroid Build Coastguard Worker                                               const void *indices,
104*8975f5c5SAndroid Build Coastguard Worker                                               GLint baseVertex) override;
105*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawArraysIndirect(const gl::Context *context,
106*8975f5c5SAndroid Build Coastguard Worker                                      gl::PrimitiveMode mode,
107*8975f5c5SAndroid Build Coastguard Worker                                      const void *indirect) override;
108*8975f5c5SAndroid Build Coastguard Worker     angle::Result drawElementsIndirect(const gl::Context *context,
109*8975f5c5SAndroid Build Coastguard Worker                                        gl::PrimitiveMode mode,
110*8975f5c5SAndroid Build Coastguard Worker                                        gl::DrawElementsType type,
111*8975f5c5SAndroid Build Coastguard Worker                                        const void *indirect) override;
112*8975f5c5SAndroid Build Coastguard Worker 
113*8975f5c5SAndroid Build Coastguard Worker     angle::Result multiDrawArrays(const gl::Context *context,
114*8975f5c5SAndroid Build Coastguard Worker                                   gl::PrimitiveMode mode,
115*8975f5c5SAndroid Build Coastguard Worker                                   const GLint *firsts,
116*8975f5c5SAndroid Build Coastguard Worker                                   const GLsizei *counts,
117*8975f5c5SAndroid Build Coastguard Worker                                   GLsizei drawcount) override;
118*8975f5c5SAndroid Build Coastguard Worker     angle::Result multiDrawArraysInstanced(const gl::Context *context,
119*8975f5c5SAndroid Build Coastguard Worker                                            gl::PrimitiveMode mode,
120*8975f5c5SAndroid Build Coastguard Worker                                            const GLint *firsts,
121*8975f5c5SAndroid Build Coastguard Worker                                            const GLsizei *counts,
122*8975f5c5SAndroid Build Coastguard Worker                                            const GLsizei *instanceCounts,
123*8975f5c5SAndroid Build Coastguard Worker                                            GLsizei drawcount) override;
124*8975f5c5SAndroid Build Coastguard Worker     angle::Result multiDrawArraysIndirect(const gl::Context *context,
125*8975f5c5SAndroid Build Coastguard Worker                                           gl::PrimitiveMode mode,
126*8975f5c5SAndroid Build Coastguard Worker                                           const void *indirect,
127*8975f5c5SAndroid Build Coastguard Worker                                           GLsizei drawcount,
128*8975f5c5SAndroid Build Coastguard Worker                                           GLsizei stride) override;
129*8975f5c5SAndroid Build Coastguard Worker     angle::Result multiDrawElements(const gl::Context *context,
130*8975f5c5SAndroid Build Coastguard Worker                                     gl::PrimitiveMode mode,
131*8975f5c5SAndroid Build Coastguard Worker                                     const GLsizei *counts,
132*8975f5c5SAndroid Build Coastguard Worker                                     gl::DrawElementsType type,
133*8975f5c5SAndroid Build Coastguard Worker                                     const GLvoid *const *indices,
134*8975f5c5SAndroid Build Coastguard Worker                                     GLsizei drawcount) override;
135*8975f5c5SAndroid Build Coastguard Worker     angle::Result multiDrawElementsInstanced(const gl::Context *context,
136*8975f5c5SAndroid Build Coastguard Worker                                              gl::PrimitiveMode mode,
137*8975f5c5SAndroid Build Coastguard Worker                                              const GLsizei *counts,
138*8975f5c5SAndroid Build Coastguard Worker                                              gl::DrawElementsType type,
139*8975f5c5SAndroid Build Coastguard Worker                                              const GLvoid *const *indices,
140*8975f5c5SAndroid Build Coastguard Worker                                              const GLsizei *instanceCounts,
141*8975f5c5SAndroid Build Coastguard Worker                                              GLsizei drawcount) override;
142*8975f5c5SAndroid Build Coastguard Worker     angle::Result multiDrawElementsIndirect(const gl::Context *context,
143*8975f5c5SAndroid Build Coastguard Worker                                             gl::PrimitiveMode mode,
144*8975f5c5SAndroid Build Coastguard Worker                                             gl::DrawElementsType type,
145*8975f5c5SAndroid Build Coastguard Worker                                             const void *indirect,
146*8975f5c5SAndroid Build Coastguard Worker                                             GLsizei drawcount,
147*8975f5c5SAndroid Build Coastguard Worker                                             GLsizei stride) override;
148*8975f5c5SAndroid Build Coastguard Worker     angle::Result multiDrawArraysInstancedBaseInstance(const gl::Context *context,
149*8975f5c5SAndroid Build Coastguard Worker                                                        gl::PrimitiveMode mode,
150*8975f5c5SAndroid Build Coastguard Worker                                                        const GLint *firsts,
151*8975f5c5SAndroid Build Coastguard Worker                                                        const GLsizei *counts,
152*8975f5c5SAndroid Build Coastguard Worker                                                        const GLsizei *instanceCounts,
153*8975f5c5SAndroid Build Coastguard Worker                                                        const GLuint *baseInstances,
154*8975f5c5SAndroid Build Coastguard Worker                                                        GLsizei drawcount) override;
155*8975f5c5SAndroid Build Coastguard Worker     angle::Result multiDrawElementsInstancedBaseVertexBaseInstance(const gl::Context *context,
156*8975f5c5SAndroid Build Coastguard Worker                                                                    gl::PrimitiveMode mode,
157*8975f5c5SAndroid Build Coastguard Worker                                                                    const GLsizei *counts,
158*8975f5c5SAndroid Build Coastguard Worker                                                                    gl::DrawElementsType type,
159*8975f5c5SAndroid Build Coastguard Worker                                                                    const GLvoid *const *indices,
160*8975f5c5SAndroid Build Coastguard Worker                                                                    const GLsizei *instanceCounts,
161*8975f5c5SAndroid Build Coastguard Worker                                                                    const GLint *baseVertices,
162*8975f5c5SAndroid Build Coastguard Worker                                                                    const GLuint *baseInstances,
163*8975f5c5SAndroid Build Coastguard Worker                                                                    GLsizei drawcount) override;
164*8975f5c5SAndroid Build Coastguard Worker 
165*8975f5c5SAndroid Build Coastguard Worker     // Device loss
166*8975f5c5SAndroid Build Coastguard Worker     gl::GraphicsResetStatus getResetStatus() override;
167*8975f5c5SAndroid Build Coastguard Worker 
168*8975f5c5SAndroid Build Coastguard Worker     // EXT_debug_marker
169*8975f5c5SAndroid Build Coastguard Worker     angle::Result insertEventMarker(GLsizei length, const char *marker) override;
170*8975f5c5SAndroid Build Coastguard Worker     angle::Result pushGroupMarker(GLsizei length, const char *marker) override;
171*8975f5c5SAndroid Build Coastguard Worker     angle::Result popGroupMarker() override;
172*8975f5c5SAndroid Build Coastguard Worker 
173*8975f5c5SAndroid Build Coastguard Worker     // KHR_debug
174*8975f5c5SAndroid Build Coastguard Worker     angle::Result pushDebugGroup(const gl::Context *context,
175*8975f5c5SAndroid Build Coastguard Worker                                  GLenum source,
176*8975f5c5SAndroid Build Coastguard Worker                                  GLuint id,
177*8975f5c5SAndroid Build Coastguard Worker                                  const std::string &message) override;
178*8975f5c5SAndroid Build Coastguard Worker     angle::Result popDebugGroup(const gl::Context *context) override;
179*8975f5c5SAndroid Build Coastguard Worker 
180*8975f5c5SAndroid Build Coastguard Worker     // State sync with dirty bits.
181*8975f5c5SAndroid Build Coastguard Worker     angle::Result syncState(const gl::Context *context,
182*8975f5c5SAndroid Build Coastguard Worker                             const gl::state::DirtyBits dirtyBits,
183*8975f5c5SAndroid Build Coastguard Worker                             const gl::state::DirtyBits bitMask,
184*8975f5c5SAndroid Build Coastguard Worker                             const gl::state::ExtendedDirtyBits extendedDirtyBits,
185*8975f5c5SAndroid Build Coastguard Worker                             const gl::state::ExtendedDirtyBits extendedBitMask,
186*8975f5c5SAndroid Build Coastguard Worker                             gl::Command command) override;
187*8975f5c5SAndroid Build Coastguard Worker 
188*8975f5c5SAndroid Build Coastguard Worker     // Disjoint timer queries
189*8975f5c5SAndroid Build Coastguard Worker     GLint getGPUDisjoint() override;
190*8975f5c5SAndroid Build Coastguard Worker     GLint64 getTimestamp() override;
191*8975f5c5SAndroid Build Coastguard Worker 
192*8975f5c5SAndroid Build Coastguard Worker     // Context switching
193*8975f5c5SAndroid Build Coastguard Worker     angle::Result onMakeCurrent(const gl::Context *context) override;
194*8975f5c5SAndroid Build Coastguard Worker 
195*8975f5c5SAndroid Build Coastguard Worker     // Native capabilities, unmodified by gl::Context.
196*8975f5c5SAndroid Build Coastguard Worker     gl::Caps getNativeCaps() const override;
197*8975f5c5SAndroid Build Coastguard Worker     const gl::TextureCapsMap &getNativeTextureCaps() const override;
198*8975f5c5SAndroid Build Coastguard Worker     const gl::Extensions &getNativeExtensions() const override;
199*8975f5c5SAndroid Build Coastguard Worker     const gl::Limitations &getNativeLimitations() const override;
200*8975f5c5SAndroid Build Coastguard Worker     const ShPixelLocalStorageOptions &getNativePixelLocalStorageOptions() const override;
201*8975f5c5SAndroid Build Coastguard Worker 
202*8975f5c5SAndroid Build Coastguard Worker     // Shader creation
203*8975f5c5SAndroid Build Coastguard Worker     CompilerImpl *createCompiler() override;
204*8975f5c5SAndroid Build Coastguard Worker     ShaderImpl *createShader(const gl::ShaderState &data) override;
205*8975f5c5SAndroid Build Coastguard Worker     ProgramImpl *createProgram(const gl::ProgramState &data) override;
206*8975f5c5SAndroid Build Coastguard Worker     ProgramExecutableImpl *createProgramExecutable(
207*8975f5c5SAndroid Build Coastguard Worker         const gl::ProgramExecutable *executable) override;
208*8975f5c5SAndroid Build Coastguard Worker 
209*8975f5c5SAndroid Build Coastguard Worker     // Framebuffer creation
210*8975f5c5SAndroid Build Coastguard Worker     FramebufferImpl *createFramebuffer(const gl::FramebufferState &data) override;
211*8975f5c5SAndroid Build Coastguard Worker 
212*8975f5c5SAndroid Build Coastguard Worker     // Texture creation
213*8975f5c5SAndroid Build Coastguard Worker     TextureImpl *createTexture(const gl::TextureState &state) override;
214*8975f5c5SAndroid Build Coastguard Worker 
215*8975f5c5SAndroid Build Coastguard Worker     // Renderbuffer creation
216*8975f5c5SAndroid Build Coastguard Worker     RenderbufferImpl *createRenderbuffer(const gl::RenderbufferState &state) override;
217*8975f5c5SAndroid Build Coastguard Worker 
218*8975f5c5SAndroid Build Coastguard Worker     // Buffer creation
219*8975f5c5SAndroid Build Coastguard Worker     BufferImpl *createBuffer(const gl::BufferState &state) override;
220*8975f5c5SAndroid Build Coastguard Worker 
221*8975f5c5SAndroid Build Coastguard Worker     // Vertex Array creation
222*8975f5c5SAndroid Build Coastguard Worker     VertexArrayImpl *createVertexArray(const gl::VertexArrayState &data) override;
223*8975f5c5SAndroid Build Coastguard Worker 
224*8975f5c5SAndroid Build Coastguard Worker     // Query and Fence creation
225*8975f5c5SAndroid Build Coastguard Worker     QueryImpl *createQuery(gl::QueryType type) override;
226*8975f5c5SAndroid Build Coastguard Worker     FenceNVImpl *createFenceNV() override;
227*8975f5c5SAndroid Build Coastguard Worker     SyncImpl *createSync() override;
228*8975f5c5SAndroid Build Coastguard Worker 
229*8975f5c5SAndroid Build Coastguard Worker     // Transform Feedback creation
230*8975f5c5SAndroid Build Coastguard Worker     TransformFeedbackImpl *createTransformFeedback(
231*8975f5c5SAndroid Build Coastguard Worker         const gl::TransformFeedbackState &state) override;
232*8975f5c5SAndroid Build Coastguard Worker 
233*8975f5c5SAndroid Build Coastguard Worker     // Sampler object creation
234*8975f5c5SAndroid Build Coastguard Worker     SamplerImpl *createSampler(const gl::SamplerState &state) override;
235*8975f5c5SAndroid Build Coastguard Worker 
236*8975f5c5SAndroid Build Coastguard Worker     // Program Pipeline object creation
237*8975f5c5SAndroid Build Coastguard Worker     ProgramPipelineImpl *createProgramPipeline(const gl::ProgramPipelineState &data) override;
238*8975f5c5SAndroid Build Coastguard Worker 
239*8975f5c5SAndroid Build Coastguard Worker     // Memory object creation.
240*8975f5c5SAndroid Build Coastguard Worker     MemoryObjectImpl *createMemoryObject() override;
241*8975f5c5SAndroid Build Coastguard Worker 
242*8975f5c5SAndroid Build Coastguard Worker     // Semaphore creation.
243*8975f5c5SAndroid Build Coastguard Worker     SemaphoreImpl *createSemaphore() override;
244*8975f5c5SAndroid Build Coastguard Worker 
245*8975f5c5SAndroid Build Coastguard Worker     // Overlay creation.
246*8975f5c5SAndroid Build Coastguard Worker     OverlayImpl *createOverlay(const gl::OverlayState &state) override;
247*8975f5c5SAndroid Build Coastguard Worker 
248*8975f5c5SAndroid Build Coastguard Worker     angle::Result dispatchCompute(const gl::Context *context,
249*8975f5c5SAndroid Build Coastguard Worker                                   GLuint numGroupsX,
250*8975f5c5SAndroid Build Coastguard Worker                                   GLuint numGroupsY,
251*8975f5c5SAndroid Build Coastguard Worker                                   GLuint numGroupsZ) override;
252*8975f5c5SAndroid Build Coastguard Worker     angle::Result dispatchComputeIndirect(const gl::Context *context, GLintptr indirect) override;
253*8975f5c5SAndroid Build Coastguard Worker 
254*8975f5c5SAndroid Build Coastguard Worker     angle::Result memoryBarrier(const gl::Context *context, GLbitfield barriers) override;
255*8975f5c5SAndroid Build Coastguard Worker     angle::Result memoryBarrierByRegion(const gl::Context *context, GLbitfield barriers) override;
256*8975f5c5SAndroid Build Coastguard Worker 
257*8975f5c5SAndroid Build Coastguard Worker     void handleError(GLenum errorCode,
258*8975f5c5SAndroid Build Coastguard Worker                      const char *message,
259*8975f5c5SAndroid Build Coastguard Worker                      const char *file,
260*8975f5c5SAndroid Build Coastguard Worker                      const char *function,
261*8975f5c5SAndroid Build Coastguard Worker                      unsigned int line);
262*8975f5c5SAndroid Build Coastguard Worker 
getImageLoadContext()263*8975f5c5SAndroid Build Coastguard Worker     const angle::ImageLoadContext &getImageLoadContext() const { return mImageLoadContext; }
264*8975f5c5SAndroid Build Coastguard Worker 
getDisplay()265*8975f5c5SAndroid Build Coastguard Worker     DisplayWgpu *getDisplay() { return mDisplay; }
getDevice()266*8975f5c5SAndroid Build Coastguard Worker     wgpu::Device &getDevice() { return mDisplay->getDevice(); }
getQueue()267*8975f5c5SAndroid Build Coastguard Worker     wgpu::Queue &getQueue() { return mDisplay->getQueue(); }
getInstance()268*8975f5c5SAndroid Build Coastguard Worker     wgpu::Instance &getInstance() { return mDisplay->getInstance(); }
getImageLoadContext()269*8975f5c5SAndroid Build Coastguard Worker     angle::ImageLoadContext &getImageLoadContext() { return mImageLoadContext; }
getFormat(GLenum internalFormat)270*8975f5c5SAndroid Build Coastguard Worker     const webgpu::Format &getFormat(GLenum internalFormat) const
271*8975f5c5SAndroid Build Coastguard Worker     {
272*8975f5c5SAndroid Build Coastguard Worker         return mDisplay->getFormat(internalFormat);
273*8975f5c5SAndroid Build Coastguard Worker     }
274*8975f5c5SAndroid Build Coastguard Worker     angle::Result startRenderPass(const wgpu::RenderPassDescriptor &desc);
275*8975f5c5SAndroid Build Coastguard Worker     angle::Result endRenderPass(webgpu::RenderPassClosureReason closureReason);
276*8975f5c5SAndroid Build Coastguard Worker 
hasActiveRenderPass()277*8975f5c5SAndroid Build Coastguard Worker     bool hasActiveRenderPass() { return mCurrentRenderPass != nullptr; }
278*8975f5c5SAndroid Build Coastguard Worker 
279*8975f5c5SAndroid Build Coastguard Worker     angle::Result onFramebufferChange(FramebufferWgpu *framebufferWgpu, gl::Command command);
280*8975f5c5SAndroid Build Coastguard Worker 
281*8975f5c5SAndroid Build Coastguard Worker     angle::Result flush(webgpu::RenderPassClosureReason);
282*8975f5c5SAndroid Build Coastguard Worker 
283*8975f5c5SAndroid Build Coastguard Worker     void setColorAttachmentFormat(size_t colorIndex, wgpu::TextureFormat format);
284*8975f5c5SAndroid Build Coastguard Worker     void setColorAttachmentFormats(const gl::DrawBuffersArray<wgpu::TextureFormat> &formats);
285*8975f5c5SAndroid Build Coastguard Worker     void setDepthStencilFormat(wgpu::TextureFormat format);
286*8975f5c5SAndroid Build Coastguard Worker     void setVertexAttribute(size_t attribIndex, webgpu::PackedVertexAttribute newAttrib);
287*8975f5c5SAndroid Build Coastguard Worker 
288*8975f5c5SAndroid Build Coastguard Worker     void invalidateVertexBuffer(size_t slot);
289*8975f5c5SAndroid Build Coastguard Worker     void invalidateVertexBuffers();
290*8975f5c5SAndroid Build Coastguard Worker     void invalidateIndexBuffer();
291*8975f5c5SAndroid Build Coastguard Worker 
292*8975f5c5SAndroid Build Coastguard Worker     void ensureCommandEncoderCreated();
293*8975f5c5SAndroid Build Coastguard Worker     wgpu::CommandEncoder &getCurrentCommandEncoder();
294*8975f5c5SAndroid Build Coastguard Worker 
295*8975f5c5SAndroid Build Coastguard Worker   private:
296*8975f5c5SAndroid Build Coastguard Worker     // Dirty bits.
297*8975f5c5SAndroid Build Coastguard Worker     enum DirtyBitType : size_t
298*8975f5c5SAndroid Build Coastguard Worker     {
299*8975f5c5SAndroid Build Coastguard Worker         // The pipeline has changed and needs to be recreated.
300*8975f5c5SAndroid Build Coastguard Worker         DIRTY_BIT_RENDER_PIPELINE_DESC,
301*8975f5c5SAndroid Build Coastguard Worker 
302*8975f5c5SAndroid Build Coastguard Worker         DIRTY_BIT_RENDER_PASS,
303*8975f5c5SAndroid Build Coastguard Worker 
304*8975f5c5SAndroid Build Coastguard Worker         DIRTY_BIT_RENDER_PIPELINE_BINDING,
305*8975f5c5SAndroid Build Coastguard Worker         DIRTY_BIT_VIEWPORT,
306*8975f5c5SAndroid Build Coastguard Worker         DIRTY_BIT_SCISSOR,
307*8975f5c5SAndroid Build Coastguard Worker 
308*8975f5c5SAndroid Build Coastguard Worker         DIRTY_BIT_VERTEX_BUFFERS,
309*8975f5c5SAndroid Build Coastguard Worker         DIRTY_BIT_INDEX_BUFFER,
310*8975f5c5SAndroid Build Coastguard Worker 
311*8975f5c5SAndroid Build Coastguard Worker         DIRTY_BIT_BIND_GROUPS,
312*8975f5c5SAndroid Build Coastguard Worker 
313*8975f5c5SAndroid Build Coastguard Worker         DIRTY_BIT_MAX,
314*8975f5c5SAndroid Build Coastguard Worker     };
315*8975f5c5SAndroid Build Coastguard Worker 
316*8975f5c5SAndroid Build Coastguard Worker     static_assert(DIRTY_BIT_RENDER_PIPELINE_BINDING > DIRTY_BIT_RENDER_PIPELINE_DESC,
317*8975f5c5SAndroid Build Coastguard Worker                   "Pipeline binding must be handled after the pipeline desc dirty bit");
318*8975f5c5SAndroid Build Coastguard Worker 
319*8975f5c5SAndroid Build Coastguard Worker     // Dirty bit handlers that record commands or otherwise expect to manipulate the render pass
320*8975f5c5SAndroid Build Coastguard Worker     // that will be used for the draw call must be specified after DIRTY_BIT_RENDER_PASS.
321*8975f5c5SAndroid Build Coastguard Worker     static_assert(DIRTY_BIT_RENDER_PIPELINE_BINDING > DIRTY_BIT_RENDER_PASS,
322*8975f5c5SAndroid Build Coastguard Worker                   "Render pass using dirty bit must be handled after the render pass dirty bit");
323*8975f5c5SAndroid Build Coastguard Worker 
324*8975f5c5SAndroid Build Coastguard Worker     using DirtyBits = angle::BitSet<DIRTY_BIT_MAX>;
325*8975f5c5SAndroid Build Coastguard Worker 
326*8975f5c5SAndroid Build Coastguard Worker     DirtyBits mDirtyBits;
327*8975f5c5SAndroid Build Coastguard Worker     gl::AttributesMask mDirtyVertexBuffers;
328*8975f5c5SAndroid Build Coastguard Worker 
329*8975f5c5SAndroid Build Coastguard Worker     DirtyBits mNewRenderPassDirtyBits;
330*8975f5c5SAndroid Build Coastguard Worker 
invalidateCurrentRenderPipeline()331*8975f5c5SAndroid Build Coastguard Worker     ANGLE_INLINE void invalidateCurrentRenderPipeline()
332*8975f5c5SAndroid Build Coastguard Worker     {
333*8975f5c5SAndroid Build Coastguard Worker         mDirtyBits.set(DIRTY_BIT_RENDER_PIPELINE_DESC);
334*8975f5c5SAndroid Build Coastguard Worker     }
335*8975f5c5SAndroid Build Coastguard Worker 
336*8975f5c5SAndroid Build Coastguard Worker     angle::Result setupDraw(const gl::Context *context,
337*8975f5c5SAndroid Build Coastguard Worker                             gl::PrimitiveMode mode,
338*8975f5c5SAndroid Build Coastguard Worker                             GLint firstVertexOrInvalid,
339*8975f5c5SAndroid Build Coastguard Worker                             GLsizei vertexOrIndexCount,
340*8975f5c5SAndroid Build Coastguard Worker                             GLsizei instanceCount,
341*8975f5c5SAndroid Build Coastguard Worker                             gl::DrawElementsType indexTypeOrInvalid,
342*8975f5c5SAndroid Build Coastguard Worker                             const void *indices,
343*8975f5c5SAndroid Build Coastguard Worker                             GLint baseVertex,
344*8975f5c5SAndroid Build Coastguard Worker                             uint32_t *outFirstIndex);
345*8975f5c5SAndroid Build Coastguard Worker 
346*8975f5c5SAndroid Build Coastguard Worker     angle::Result handleDirtyRenderPipelineDesc(DirtyBits::Iterator *dirtyBitsIterator);
347*8975f5c5SAndroid Build Coastguard Worker     angle::Result handleDirtyRenderPipelineBinding(DirtyBits::Iterator *dirtyBitsIterator);
348*8975f5c5SAndroid Build Coastguard Worker     angle::Result handleDirtyViewport(DirtyBits::Iterator *dirtyBitsIterator);
349*8975f5c5SAndroid Build Coastguard Worker     angle::Result handleDirtyScissor(DirtyBits::Iterator *dirtyBitsIterator);
350*8975f5c5SAndroid Build Coastguard Worker     angle::Result handleDirtyVertexBuffers(const gl::AttributesMask &slots,
351*8975f5c5SAndroid Build Coastguard Worker                                            DirtyBits::Iterator *dirtyBitsIterator);
352*8975f5c5SAndroid Build Coastguard Worker     angle::Result handleDirtyIndexBuffer(gl::DrawElementsType indexType,
353*8975f5c5SAndroid Build Coastguard Worker                                          DirtyBits::Iterator *dirtyBitsIterator);
354*8975f5c5SAndroid Build Coastguard Worker     angle::Result handleDirtyBindGroups(DirtyBits::Iterator *dirtyBitsIterator);
355*8975f5c5SAndroid Build Coastguard Worker 
356*8975f5c5SAndroid Build Coastguard Worker     angle::Result handleDirtyRenderPass(DirtyBits::Iterator *dirtyBitsIterator);
357*8975f5c5SAndroid Build Coastguard Worker 
358*8975f5c5SAndroid Build Coastguard Worker     angle::ImageLoadContext mImageLoadContext;
359*8975f5c5SAndroid Build Coastguard Worker 
360*8975f5c5SAndroid Build Coastguard Worker     DisplayWgpu *mDisplay;
361*8975f5c5SAndroid Build Coastguard Worker 
362*8975f5c5SAndroid Build Coastguard Worker     wgpu::CommandEncoder mCurrentCommandEncoder;
363*8975f5c5SAndroid Build Coastguard Worker     wgpu::RenderPassEncoder mCurrentRenderPass;
364*8975f5c5SAndroid Build Coastguard Worker 
365*8975f5c5SAndroid Build Coastguard Worker     webgpu::CommandBuffer mCommandBuffer;
366*8975f5c5SAndroid Build Coastguard Worker 
367*8975f5c5SAndroid Build Coastguard Worker     webgpu::RenderPipelineDesc mRenderPipelineDesc;
368*8975f5c5SAndroid Build Coastguard Worker     wgpu::RenderPipeline mCurrentGraphicsPipeline;
369*8975f5c5SAndroid Build Coastguard Worker     gl::AttributesMask mCurrentRenderPipelineAllAttributes;
370*8975f5c5SAndroid Build Coastguard Worker 
371*8975f5c5SAndroid Build Coastguard Worker     gl::DrawElementsType mCurrentIndexBufferType = gl::DrawElementsType::InvalidEnum;
372*8975f5c5SAndroid Build Coastguard Worker };
373*8975f5c5SAndroid Build Coastguard Worker 
374*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
375*8975f5c5SAndroid Build Coastguard Worker 
376*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_RENDERER_WGPU_CONTEXTWGPU_H_
377