1 // 2 // Copyright 2019 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 #ifndef LIBANGLE_RENDERER_D3D_D3D11_EXTERNALIMAGESIBLINGIMPL11_H_ 8 #define LIBANGLE_RENDERER_D3D_D3D11_EXTERNALIMAGESIBLINGIMPL11_H_ 9 10 #include "libANGLE/renderer/ImageImpl.h" 11 #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h" 12 13 namespace rx 14 { 15 16 class Renderer11; 17 class RenderTargetD3D; 18 19 class ExternalImageSiblingImpl11 : public ExternalImageSiblingImpl 20 { 21 public: 22 ExternalImageSiblingImpl11(Renderer11 *renderer, 23 EGLClientBuffer clientBuffer, 24 const egl::AttributeMap &attribs); 25 ~ExternalImageSiblingImpl11() override; 26 27 // ExternalImageSiblingImpl interface 28 egl::Error initialize(const egl::Display *display) override; 29 gl::Format getFormat() const override; 30 bool isRenderable(const gl::Context *context) const override; 31 bool isTexturable(const gl::Context *context) const override; 32 bool isYUV() const override; 33 bool hasProtectedContent() const override; 34 gl::Extents getSize() const override; 35 size_t getSamples() const override; 36 37 // FramebufferAttachmentObjectImpl interface 38 angle::Result getAttachmentRenderTarget(const gl::Context *context, 39 GLenum binding, 40 const gl::ImageIndex &imageIndex, 41 GLsizei samples, 42 FramebufferAttachmentRenderTarget **rtOut) override; 43 angle::Result initializeContents(const gl::Context *context, 44 GLenum binding, 45 const gl::ImageIndex &imageIndex) override; 46 47 private: 48 angle::Result createRenderTarget(const gl::Context *context); 49 50 Renderer11 *mRenderer; 51 EGLClientBuffer mBuffer; 52 egl::AttributeMap mAttribs; 53 54 TextureHelper11 mTexture; 55 56 gl::Format mFormat = gl::Format::Invalid(); 57 bool mIsRenderable = false; 58 bool mIsTexturable = false; 59 bool mIsTextureArray = false; 60 EGLint mWidth = 0; 61 EGLint mHeight = 0; 62 GLsizei mSamples = 0; 63 UINT mArraySlice = 0; 64 65 std::unique_ptr<RenderTargetD3D> mRenderTarget; 66 }; 67 68 } // namespace rx 69 70 #endif // LIBANGLE_RENDERER_D3D_D3D11_EXTERNALIMAGESIBLINGIMPL11_H_ 71