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