xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/d3d/d3d11/RenderTarget11.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2012 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 // RenderTarget11.h: Defines a DX11-specific wrapper for ID3D11View pointers
8 // retained by Renderbuffers.
9 
10 #ifndef LIBANGLE_RENDERER_D3D_D3D11_RENDERTARGET11_H_
11 #define LIBANGLE_RENDERER_D3D_D3D11_RENDERTARGET11_H_
12 
13 #include "libANGLE/renderer/d3d/RenderTargetD3D.h"
14 #include "libANGLE/renderer/d3d/d3d11/ResourceManager11.h"
15 #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
16 #include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
17 
18 namespace rx
19 {
20 class SwapChain11;
21 class Renderer11;
22 
23 class RenderTarget11 : public RenderTargetD3D
24 {
25   public:
26     RenderTarget11(const d3d11::Format &formatSet);
27     ~RenderTarget11() override;
28 
29     virtual const TextureHelper11 &getTexture() const                                = 0;
30     virtual const d3d11::RenderTargetView &getRenderTargetView() const               = 0;
31     virtual const d3d11::DepthStencilView &getDepthStencilView() const               = 0;
32     virtual angle::Result getShaderResourceView(const gl::Context *context,
33                                                 const d3d11::SharedSRV **outSRV)     = 0;
34     virtual angle::Result getBlitShaderResourceView(const gl::Context *context,
35                                                     const d3d11::SharedSRV **outSRV) = 0;
36 
37     virtual unsigned int getSubresourceIndex() const = 0;
38 
getFormatSet()39     const d3d11::Format &getFormatSet() const { return mFormatSet; }
40 
41   protected:
42     const d3d11::Format &mFormatSet;
43 };
44 
45 class TextureRenderTarget11 : public RenderTarget11
46 {
47   public:
48     // TextureRenderTarget11 takes ownership of any D3D11 resources it is given and will AddRef them
49     TextureRenderTarget11(d3d11::RenderTargetView &&rtv,
50                           const TextureHelper11 &resource,
51                           const d3d11::SharedSRV &srv,
52                           const d3d11::SharedSRV &blitSRV,
53                           GLenum internalFormat,
54                           const d3d11::Format &formatSet,
55                           GLsizei width,
56                           GLsizei height,
57                           GLsizei depth,
58                           GLsizei samples);
59     TextureRenderTarget11(d3d11::DepthStencilView &&dsv,
60                           const TextureHelper11 &resource,
61                           const d3d11::SharedSRV &srv,
62                           GLenum internalFormat,
63                           const d3d11::Format &formatSet,
64                           GLsizei width,
65                           GLsizei height,
66                           GLsizei depth,
67                           GLsizei samples);
68     ~TextureRenderTarget11() override;
69 
70     GLsizei getWidth() const override;
71     GLsizei getHeight() const override;
72     GLsizei getDepth() const override;
73     GLenum getInternalFormat() const override;
74     GLsizei getSamples() const override;
75 
76     const TextureHelper11 &getTexture() const override;
77     const d3d11::RenderTargetView &getRenderTargetView() const override;
78     const d3d11::DepthStencilView &getDepthStencilView() const override;
79     angle::Result getShaderResourceView(const gl::Context *context,
80                                         const d3d11::SharedSRV **outSRV) override;
81     angle::Result getBlitShaderResourceView(const gl::Context *context,
82                                             const d3d11::SharedSRV **outSRV) override;
83 
84     unsigned int getSubresourceIndex() const override;
85 
86   private:
87     GLsizei mWidth;
88     GLsizei mHeight;
89     GLsizei mDepth;
90     GLenum mInternalFormat;
91     GLsizei mSamples;
92 
93     unsigned int mSubresourceIndex;
94     TextureHelper11 mTexture;
95     d3d11::RenderTargetView mRenderTarget;
96     d3d11::DepthStencilView mDepthStencil;
97     d3d11::SharedSRV mShaderResource;
98 
99     // Shader resource view to use with internal blit shaders. Not set for depth/stencil render
100     // targets.
101     d3d11::SharedSRV mBlitShaderResource;
102 };
103 
104 class SurfaceRenderTarget11 : public RenderTarget11
105 {
106   public:
107     SurfaceRenderTarget11(SwapChain11 *swapChain, Renderer11 *renderer, bool depth);
108     ~SurfaceRenderTarget11() override;
109 
110     GLsizei getWidth() const override;
111     GLsizei getHeight() const override;
112     GLsizei getDepth() const override;
113     GLenum getInternalFormat() const override;
114     GLsizei getSamples() const override;
115 
116     const TextureHelper11 &getTexture() const override;
117     const d3d11::RenderTargetView &getRenderTargetView() const override;
118     const d3d11::DepthStencilView &getDepthStencilView() const override;
119     angle::Result getShaderResourceView(const gl::Context *context,
120                                         const d3d11::SharedSRV **outSRV) override;
121     angle::Result getBlitShaderResourceView(const gl::Context *context,
122                                             const d3d11::SharedSRV **outSRV) override;
123 
124     unsigned int getSubresourceIndex() const override;
125 
126   private:
127     SwapChain11 *mSwapChain;
128     bool mDepth;
129 };
130 
131 }  // namespace rx
132 
133 #endif  // LIBANGLE_RENDERER_D3D_D3D11_RENDERTARGET11_H_
134