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