Hash :
2c479d6e
Author :
Date :
2017-05-24T14:37:22
D3D11: Use TextureHelper11 everywhere. This consolidates all texture allocation into ResourceManager11. It removes a lot of error checking and resource management code. In a few places we're storing some redundant information, like in TextureStorage11, we might store the Format pointer in two places, or the Texture's size. BUG=angleproject:2034 Change-Id: I9369e76925a67632c444c662e5667c5ed7875547 Reviewed-on: https://chromium-review.googlesource.com/503252 Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
//
// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// RenderTarget11.h: Defines a DX11-specific wrapper for ID3D11View pointers
// retained by Renderbuffers.
#ifndef LIBANGLE_RENDERER_D3D_D3D11_RENDERTARGET11_H_
#define LIBANGLE_RENDERER_D3D_D3D11_RENDERTARGET11_H_
#include "libANGLE/renderer/d3d/RenderTargetD3D.h"
#include "libANGLE/renderer/d3d/d3d11/ResourceManager11.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
#include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
namespace rx
{
class SwapChain11;
class Renderer11;
class RenderTarget11 : public RenderTargetD3D
{
public:
RenderTarget11(const d3d11::Format &formatSet);
virtual ~RenderTarget11();
virtual const TextureHelper11 &getTexture() const = 0;
virtual const d3d11::RenderTargetView &getRenderTargetView() const = 0;
virtual const d3d11::DepthStencilView &getDepthStencilView() const = 0;
virtual const d3d11::SharedSRV &getShaderResourceView() const = 0;
virtual const d3d11::SharedSRV &getBlitShaderResourceView() const = 0;
virtual unsigned int getSubresourceIndex() const = 0;
void signalDirty() override;
OnRenderTargetDirtyChannel *getBroadcastChannel() { return &mBroadcastChannel; }
const d3d11::Format &getFormatSet() const { return mFormatSet; }
protected:
OnRenderTargetDirtyChannel mBroadcastChannel;
const d3d11::Format &mFormatSet;
};
class TextureRenderTarget11 : public RenderTarget11
{
public:
// TextureRenderTarget11 takes ownership of any D3D11 resources it is given and will AddRef them
TextureRenderTarget11(d3d11::RenderTargetView &&rtv,
const TextureHelper11 &resource,
const d3d11::SharedSRV &srv,
const d3d11::SharedSRV &blitSRV,
GLenum internalFormat,
const d3d11::Format &formatSet,
GLsizei width,
GLsizei height,
GLsizei depth,
GLsizei samples);
TextureRenderTarget11(d3d11::DepthStencilView &&dsv,
const TextureHelper11 &resource,
const d3d11::SharedSRV &srv,
GLenum internalFormat,
const d3d11::Format &formatSet,
GLsizei width,
GLsizei height,
GLsizei depth,
GLsizei samples);
virtual ~TextureRenderTarget11();
GLsizei getWidth() const override;
GLsizei getHeight() const override;
GLsizei getDepth() const override;
GLenum getInternalFormat() const override;
GLsizei getSamples() const override;
const TextureHelper11 &getTexture() const override;
const d3d11::RenderTargetView &getRenderTargetView() const override;
const d3d11::DepthStencilView &getDepthStencilView() const override;
const d3d11::SharedSRV &getShaderResourceView() const override;
const d3d11::SharedSRV &getBlitShaderResourceView() const override;
unsigned int getSubresourceIndex() const override;
private:
GLsizei mWidth;
GLsizei mHeight;
GLsizei mDepth;
GLenum mInternalFormat;
GLsizei mSamples;
unsigned int mSubresourceIndex;
TextureHelper11 mTexture;
d3d11::RenderTargetView mRenderTarget;
d3d11::DepthStencilView mDepthStencil;
d3d11::SharedSRV mShaderResource;
// Shader resource view to use with internal blit shaders. Not set for depth/stencil render
// targets.
d3d11::SharedSRV mBlitShaderResource;
};
class SurfaceRenderTarget11 : public RenderTarget11
{
public:
SurfaceRenderTarget11(SwapChain11 *swapChain, Renderer11 *renderer, bool depth);
virtual ~SurfaceRenderTarget11();
GLsizei getWidth() const override;
GLsizei getHeight() const override;
GLsizei getDepth() const override;
GLenum getInternalFormat() const override;
GLsizei getSamples() const override;
const TextureHelper11 &getTexture() const override;
const d3d11::RenderTargetView &getRenderTargetView() const override;
const d3d11::DepthStencilView &getDepthStencilView() const override;
const d3d11::SharedSRV &getShaderResourceView() const override;
const d3d11::SharedSRV &getBlitShaderResourceView() const override;
unsigned int getSubresourceIndex() const override;
private:
SwapChain11 *mSwapChain;
bool mDepth;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_D3D_D3D11_RENDERTARGET11_H_