xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/d3d/FramebufferD3D.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 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 
7*8975f5c5SAndroid Build Coastguard Worker // FramebufferD3D.h: Defines the DefaultAttachmentD3D and FramebufferD3D classes.
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_D3D_FRAMBUFFERD3D_H_
10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_D3D_FRAMBUFFERD3D_H_
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include <cstdint>
13*8975f5c5SAndroid Build Coastguard Worker #include <vector>
14*8975f5c5SAndroid Build Coastguard Worker 
15*8975f5c5SAndroid Build Coastguard Worker #include "common/Color.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "common/Optional.h"
17*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/angletypes.h"
18*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/FramebufferImpl.h"
19*8975f5c5SAndroid Build Coastguard Worker 
20*8975f5c5SAndroid Build Coastguard Worker namespace gl
21*8975f5c5SAndroid Build Coastguard Worker {
22*8975f5c5SAndroid Build Coastguard Worker class FramebufferAttachment;
23*8975f5c5SAndroid Build Coastguard Worker struct PixelPackState;
24*8975f5c5SAndroid Build Coastguard Worker 
25*8975f5c5SAndroid Build Coastguard Worker typedef std::vector<const FramebufferAttachment *> AttachmentList;
26*8975f5c5SAndroid Build Coastguard Worker }  // namespace gl
27*8975f5c5SAndroid Build Coastguard Worker 
28*8975f5c5SAndroid Build Coastguard Worker namespace rx
29*8975f5c5SAndroid Build Coastguard Worker {
30*8975f5c5SAndroid Build Coastguard Worker class RendererD3D;
31*8975f5c5SAndroid Build Coastguard Worker class RenderTargetD3D;
32*8975f5c5SAndroid Build Coastguard Worker 
33*8975f5c5SAndroid Build Coastguard Worker struct ClearParameters
34*8975f5c5SAndroid Build Coastguard Worker {
35*8975f5c5SAndroid Build Coastguard Worker     ClearParameters();
36*8975f5c5SAndroid Build Coastguard Worker     ClearParameters(const ClearParameters &other);
37*8975f5c5SAndroid Build Coastguard Worker 
38*8975f5c5SAndroid Build Coastguard Worker     gl::DrawBufferMask clearColor;
39*8975f5c5SAndroid Build Coastguard Worker     gl::ColorF colorF;
40*8975f5c5SAndroid Build Coastguard Worker     gl::ColorI colorI;
41*8975f5c5SAndroid Build Coastguard Worker     gl::ColorUI colorUI;
42*8975f5c5SAndroid Build Coastguard Worker     GLenum colorType;
43*8975f5c5SAndroid Build Coastguard Worker     gl::BlendStateExt::ColorMaskStorage::Type colorMask;
44*8975f5c5SAndroid Build Coastguard Worker 
45*8975f5c5SAndroid Build Coastguard Worker     bool clearDepth;
46*8975f5c5SAndroid Build Coastguard Worker     float depthValue;
47*8975f5c5SAndroid Build Coastguard Worker 
48*8975f5c5SAndroid Build Coastguard Worker     bool clearStencil;
49*8975f5c5SAndroid Build Coastguard Worker     GLint stencilValue;
50*8975f5c5SAndroid Build Coastguard Worker     GLuint stencilWriteMask;
51*8975f5c5SAndroid Build Coastguard Worker 
52*8975f5c5SAndroid Build Coastguard Worker     bool scissorEnabled;
53*8975f5c5SAndroid Build Coastguard Worker     gl::Rectangle scissor;
54*8975f5c5SAndroid Build Coastguard Worker };
55*8975f5c5SAndroid Build Coastguard Worker 
56*8975f5c5SAndroid Build Coastguard Worker class FramebufferD3D : public FramebufferImpl
57*8975f5c5SAndroid Build Coastguard Worker {
58*8975f5c5SAndroid Build Coastguard Worker   public:
59*8975f5c5SAndroid Build Coastguard Worker     FramebufferD3D(const gl::FramebufferState &data, RendererD3D *renderer);
60*8975f5c5SAndroid Build Coastguard Worker     ~FramebufferD3D() override;
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker     angle::Result clear(const gl::Context *context, GLbitfield mask) override;
63*8975f5c5SAndroid Build Coastguard Worker     angle::Result clearBufferfv(const gl::Context *context,
64*8975f5c5SAndroid Build Coastguard Worker                                 GLenum buffer,
65*8975f5c5SAndroid Build Coastguard Worker                                 GLint drawbuffer,
66*8975f5c5SAndroid Build Coastguard Worker                                 const GLfloat *values) override;
67*8975f5c5SAndroid Build Coastguard Worker     angle::Result clearBufferuiv(const gl::Context *context,
68*8975f5c5SAndroid Build Coastguard Worker                                  GLenum buffer,
69*8975f5c5SAndroid Build Coastguard Worker                                  GLint drawbuffer,
70*8975f5c5SAndroid Build Coastguard Worker                                  const GLuint *values) override;
71*8975f5c5SAndroid Build Coastguard Worker     angle::Result clearBufferiv(const gl::Context *context,
72*8975f5c5SAndroid Build Coastguard Worker                                 GLenum buffer,
73*8975f5c5SAndroid Build Coastguard Worker                                 GLint drawbuffer,
74*8975f5c5SAndroid Build Coastguard Worker                                 const GLint *values) override;
75*8975f5c5SAndroid Build Coastguard Worker     angle::Result clearBufferfi(const gl::Context *context,
76*8975f5c5SAndroid Build Coastguard Worker                                 GLenum buffer,
77*8975f5c5SAndroid Build Coastguard Worker                                 GLint drawbuffer,
78*8975f5c5SAndroid Build Coastguard Worker                                 GLfloat depth,
79*8975f5c5SAndroid Build Coastguard Worker                                 GLint stencil) override;
80*8975f5c5SAndroid Build Coastguard Worker 
81*8975f5c5SAndroid Build Coastguard Worker     angle::Result readPixels(const gl::Context *context,
82*8975f5c5SAndroid Build Coastguard Worker                              const gl::Rectangle &area,
83*8975f5c5SAndroid Build Coastguard Worker                              GLenum format,
84*8975f5c5SAndroid Build Coastguard Worker                              GLenum type,
85*8975f5c5SAndroid Build Coastguard Worker                              const gl::PixelPackState &pack,
86*8975f5c5SAndroid Build Coastguard Worker                              gl::Buffer *packBuffer,
87*8975f5c5SAndroid Build Coastguard Worker                              void *pixels) override;
88*8975f5c5SAndroid Build Coastguard Worker 
89*8975f5c5SAndroid Build Coastguard Worker     angle::Result blit(const gl::Context *context,
90*8975f5c5SAndroid Build Coastguard Worker                        const gl::Rectangle &sourceArea,
91*8975f5c5SAndroid Build Coastguard Worker                        const gl::Rectangle &destArea,
92*8975f5c5SAndroid Build Coastguard Worker                        GLbitfield mask,
93*8975f5c5SAndroid Build Coastguard Worker                        GLenum filter) override;
94*8975f5c5SAndroid Build Coastguard Worker 
95*8975f5c5SAndroid Build Coastguard Worker     gl::FramebufferStatus checkStatus(const gl::Context *context) const override;
96*8975f5c5SAndroid Build Coastguard Worker 
97*8975f5c5SAndroid Build Coastguard Worker     angle::Result syncState(const gl::Context *context,
98*8975f5c5SAndroid Build Coastguard Worker                             GLenum binding,
99*8975f5c5SAndroid Build Coastguard Worker                             const gl::Framebuffer::DirtyBits &dirtyBits,
100*8975f5c5SAndroid Build Coastguard Worker                             gl::Command command) override;
101*8975f5c5SAndroid Build Coastguard Worker 
102*8975f5c5SAndroid Build Coastguard Worker     const gl::AttachmentList &getColorAttachmentsForRender(const gl::Context *context);
103*8975f5c5SAndroid Build Coastguard Worker 
getLastColorAttachmentsForRenderMask()104*8975f5c5SAndroid Build Coastguard Worker     const gl::DrawBufferMask getLastColorAttachmentsForRenderMask() const
105*8975f5c5SAndroid Build Coastguard Worker     {
106*8975f5c5SAndroid Build Coastguard Worker         return mColorAttachmentsForRenderMask;
107*8975f5c5SAndroid Build Coastguard Worker     }
108*8975f5c5SAndroid Build Coastguard Worker 
109*8975f5c5SAndroid Build Coastguard Worker     void destroy(const gl::Context *context) override;
110*8975f5c5SAndroid Build Coastguard Worker 
111*8975f5c5SAndroid Build Coastguard Worker   private:
112*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result clearImpl(const gl::Context *context,
113*8975f5c5SAndroid Build Coastguard Worker                                     const ClearParameters &clearParams) = 0;
114*8975f5c5SAndroid Build Coastguard Worker 
115*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result readPixelsImpl(const gl::Context *context,
116*8975f5c5SAndroid Build Coastguard Worker                                          const gl::Rectangle &area,
117*8975f5c5SAndroid Build Coastguard Worker                                          GLenum format,
118*8975f5c5SAndroid Build Coastguard Worker                                          GLenum type,
119*8975f5c5SAndroid Build Coastguard Worker                                          size_t outputPitch,
120*8975f5c5SAndroid Build Coastguard Worker                                          const gl::PixelPackState &pack,
121*8975f5c5SAndroid Build Coastguard Worker                                          gl::Buffer *packBuffer,
122*8975f5c5SAndroid Build Coastguard Worker                                          uint8_t *pixels) = 0;
123*8975f5c5SAndroid Build Coastguard Worker 
124*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result blitImpl(const gl::Context *context,
125*8975f5c5SAndroid Build Coastguard Worker                                    const gl::Rectangle &sourceArea,
126*8975f5c5SAndroid Build Coastguard Worker                                    const gl::Rectangle &destArea,
127*8975f5c5SAndroid Build Coastguard Worker                                    const gl::Rectangle *scissor,
128*8975f5c5SAndroid Build Coastguard Worker                                    bool blitRenderTarget,
129*8975f5c5SAndroid Build Coastguard Worker                                    bool blitDepth,
130*8975f5c5SAndroid Build Coastguard Worker                                    bool blitStencil,
131*8975f5c5SAndroid Build Coastguard Worker                                    GLenum filter,
132*8975f5c5SAndroid Build Coastguard Worker                                    const gl::Framebuffer *sourceFramebuffer) = 0;
133*8975f5c5SAndroid Build Coastguard Worker 
134*8975f5c5SAndroid Build Coastguard Worker     RendererD3D *mRenderer;
135*8975f5c5SAndroid Build Coastguard Worker     Optional<gl::AttachmentList> mColorAttachmentsForRender;
136*8975f5c5SAndroid Build Coastguard Worker     gl::DrawBufferMask mCurrentActiveProgramOutputs;
137*8975f5c5SAndroid Build Coastguard Worker     gl::DrawBufferMask mColorAttachmentsForRenderMask;
138*8975f5c5SAndroid Build Coastguard Worker 
139*8975f5c5SAndroid Build Coastguard Worker     gl::FramebufferAttachment mMockAttachment;
140*8975f5c5SAndroid Build Coastguard Worker };
141*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
142*8975f5c5SAndroid Build Coastguard Worker 
143*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_RENDERER_D3D_FRAMBUFFERD3D_H_
144