1 // 2 // Copyright (c) 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 const d3d11::SharedSRV &getShaderResourceView() const = 0; 33 virtual const d3d11::SharedSRV &getBlitShaderResourceView() const = 0; 34 35 virtual unsigned int getSubresourceIndex() const = 0; 36 37 void signalDirty(const gl::Context *context) override; getBroadcastChannel()38 OnRenderTargetDirtyChannel *getBroadcastChannel() { return &mBroadcastChannel; } 39 getFormatSet()40 const d3d11::Format &getFormatSet() const { return mFormatSet; } 41 42 protected: 43 OnRenderTargetDirtyChannel mBroadcastChannel; 44 const d3d11::Format &mFormatSet; 45 }; 46 47 class TextureRenderTarget11 : public RenderTarget11 48 { 49 public: 50 // TextureRenderTarget11 takes ownership of any D3D11 resources it is given and will AddRef them 51 TextureRenderTarget11(d3d11::RenderTargetView &&rtv, 52 const TextureHelper11 &resource, 53 const d3d11::SharedSRV &srv, 54 const d3d11::SharedSRV &blitSRV, 55 GLenum internalFormat, 56 const d3d11::Format &formatSet, 57 GLsizei width, 58 GLsizei height, 59 GLsizei depth, 60 GLsizei samples); 61 TextureRenderTarget11(d3d11::DepthStencilView &&dsv, 62 const TextureHelper11 &resource, 63 const d3d11::SharedSRV &srv, 64 GLenum internalFormat, 65 const d3d11::Format &formatSet, 66 GLsizei width, 67 GLsizei height, 68 GLsizei depth, 69 GLsizei samples); 70 ~TextureRenderTarget11() override; 71 72 GLsizei getWidth() const override; 73 GLsizei getHeight() const override; 74 GLsizei getDepth() const override; 75 GLenum getInternalFormat() const override; 76 GLsizei getSamples() const override; 77 78 const TextureHelper11 &getTexture() const override; 79 const d3d11::RenderTargetView &getRenderTargetView() const override; 80 const d3d11::DepthStencilView &getDepthStencilView() const override; 81 const d3d11::SharedSRV &getShaderResourceView() const override; 82 const d3d11::SharedSRV &getBlitShaderResourceView() const 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 const d3d11::SharedSRV &getShaderResourceView() const override; 120 const d3d11::SharedSRV &getBlitShaderResourceView() const override; 121 122 unsigned int getSubresourceIndex() const override; 123 124 private: 125 SwapChain11 *mSwapChain; 126 bool mDepth; 127 }; 128 129 } // namespace rx 130 131 #endif // LIBANGLE_RENDERER_D3D_D3D11_RENDERTARGET11_H_ 132