xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/d3d/d3d11/ExternalImageSiblingImpl11.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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