blob: c1a5715e0e57d0cf72a14a372f757ac447e9a89e [file] [log] [blame]
//
// 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 ID3D11Resource *getTexture() const = 0;
virtual const d3d11::RenderTargetView &getRenderTargetView() const = 0;
virtual ID3D11DepthStencilView *getDepthStencilView() const = 0;
virtual ID3D11ShaderResourceView *getShaderResourceView() const = 0;
virtual ID3D11ShaderResourceView *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,
ID3D11Resource *resource,
ID3D11ShaderResourceView *srv,
ID3D11ShaderResourceView *blitSRV,
GLenum internalFormat,
const d3d11::Format &formatSet,
GLsizei width,
GLsizei height,
GLsizei depth,
GLsizei samples);
TextureRenderTarget11(ID3D11DepthStencilView *dsv,
ID3D11Resource *resource,
ID3D11ShaderResourceView *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;
ID3D11Resource *getTexture() const override;
const d3d11::RenderTargetView &getRenderTargetView() const override;
ID3D11DepthStencilView *getDepthStencilView() const override;
ID3D11ShaderResourceView *getShaderResourceView() const override;
ID3D11ShaderResourceView *getBlitShaderResourceView() const override;
unsigned int getSubresourceIndex() const override;
private:
GLsizei mWidth;
GLsizei mHeight;
GLsizei mDepth;
GLenum mInternalFormat;
GLsizei mSamples;
unsigned int mSubresourceIndex;
ID3D11Resource *mTexture;
d3d11::RenderTargetView mRenderTarget;
ID3D11DepthStencilView *mDepthStencil;
ID3D11ShaderResourceView *mShaderResource;
// Shader resource view to use with internal blit shaders. Not set for depth/stencil render
// targets.
ID3D11ShaderResourceView *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;
ID3D11Resource *getTexture() const override;
const d3d11::RenderTargetView &getRenderTargetView() const override;
ID3D11DepthStencilView *getDepthStencilView() const override;
ID3D11ShaderResourceView *getShaderResourceView() const override;
ID3D11ShaderResourceView *getBlitShaderResourceView() const override;
unsigned int getSubresourceIndex() const override;
private:
SwapChain11 *mSwapChain;
bool mDepth;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_D3D_D3D11_RENDERTARGET11_H_