Commit 403c1682 by Jamie Madill Committed by Commit Bot

D3D11: Add resource manager classes.

The resource manager tracks the allocations and deallocations of all D3D11 resources that have device memory: Buffers and Textures (which are either 2D or 3D). It also tracks the number of active Views (DSV, RTV, and SRV, potentially UAV with ES 3.1). A new smart pointer type will wrap the resource deallocation so that the object notifies the manager when ANGLE is done with the resouce. This allows us to track precisely how much GPU memory we think we're using at any point, and will help prevent resource leaks for these object types. It also makes initialization and releasing much more trivial. The base class for a resource uses a template template parameter so that we can use a unique or shared pointer depending on if the object in question needs unique or shared ownership. For some resources (in our case, SRVs are shared between the TextureStorage11 and RenderTarget11 classes, and Textures are shared in many places) we need to have the ability to have shared ownership. Unique ownership is a little bit more efficient so supporting both can be helpful. In this patch RenderTargetView allocation is moved to use the unique smart pointer. BUG=angleproject:2034 Change-Id: Idb1245c24cd66733b8b5ca524c727350b2d2c745 Reviewed-on: https://chromium-review.googlesource.com/503248 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent 9f10b775
...@@ -583,7 +583,7 @@ Blit11::Blit11(Renderer11 *renderer) ...@@ -583,7 +583,7 @@ Blit11::Blit11(Renderer11 *renderer)
ArraySize(g_PS_ResolveStencil), ArraySize(g_PS_ResolveStencil),
"Blit11::mResolveStencilPS"), "Blit11::mResolveStencilPS"),
mStencilSRV(nullptr), mStencilSRV(nullptr),
mResolvedDepthStencilRTView(nullptr) mResolvedDepthStencilRTView()
{ {
} }
...@@ -982,7 +982,7 @@ Blit11::ShaderSupport Blit11::getShaderSupport(const Shader &shader) ...@@ -982,7 +982,7 @@ Blit11::ShaderSupport Blit11::getShaderSupport(const Shader &shader)
} }
gl::Error Blit11::swizzleTexture(ID3D11ShaderResourceView *source, gl::Error Blit11::swizzleTexture(ID3D11ShaderResourceView *source,
ID3D11RenderTargetView *dest, const d3d11::RenderTargetView &dest,
const gl::Extents &size, const gl::Extents &size,
const gl::SwizzleState &swizzleTarget) const gl::SwizzleState &swizzleTarget)
{ {
...@@ -1096,7 +1096,7 @@ gl::Error Blit11::swizzleTexture(ID3D11ShaderResourceView *source, ...@@ -1096,7 +1096,7 @@ gl::Error Blit11::swizzleTexture(ID3D11ShaderResourceView *source,
stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, nullptr); stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, nullptr);
// Apply render target // Apply render target
stateManager->setOneTimeRenderTarget(dest, nullptr); stateManager->setOneTimeRenderTarget(dest.get(), nullptr);
// Set the viewport // Set the viewport
D3D11_VIEWPORT viewport; D3D11_VIEWPORT viewport;
...@@ -1132,7 +1132,7 @@ gl::Error Blit11::swizzleTexture(ID3D11ShaderResourceView *source, ...@@ -1132,7 +1132,7 @@ gl::Error Blit11::swizzleTexture(ID3D11ShaderResourceView *source,
gl::Error Blit11::copyTexture(ID3D11ShaderResourceView *source, gl::Error Blit11::copyTexture(ID3D11ShaderResourceView *source,
const gl::Box &sourceArea, const gl::Box &sourceArea,
const gl::Extents &sourceSize, const gl::Extents &sourceSize,
ID3D11RenderTargetView *dest, const d3d11::RenderTargetView &dest,
const gl::Box &destArea, const gl::Box &destArea,
const gl::Extents &destSize, const gl::Extents &destSize,
const gl::Rectangle *scissor, const gl::Rectangle *scissor,
...@@ -1232,7 +1232,7 @@ gl::Error Blit11::copyTexture(ID3D11ShaderResourceView *source, ...@@ -1232,7 +1232,7 @@ gl::Error Blit11::copyTexture(ID3D11ShaderResourceView *source,
stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, nullptr); stateManager->setShaderResource(gl::SAMPLER_PIXEL, 0, nullptr);
// Apply render target // Apply render target
stateManager->setOneTimeRenderTarget(dest, nullptr); stateManager->setOneTimeRenderTarget(dest.get(), nullptr);
// Set the viewport // Set the viewport
D3D11_VIEWPORT viewport; D3D11_VIEWPORT viewport;
...@@ -2107,15 +2107,9 @@ gl::Error Blit11::initResolveDepthStencil(const gl::Extents &extents) ...@@ -2107,15 +2107,9 @@ gl::Error Blit11::initResolveDepthStencil(const gl::Extents &extents)
} }
d3d11::SetDebugName(resolvedDepthStencil, "Blit11::mResolvedDepthStencil"); d3d11::SetDebugName(resolvedDepthStencil, "Blit11::mResolvedDepthStencil");
ASSERT(mResolvedDepthStencilRTView == nullptr); ANGLE_TRY(
hr = device->CreateRenderTargetView(resolvedDepthStencil, nullptr, mRenderer->allocateResourceNoDesc(resolvedDepthStencil, &mResolvedDepthStencilRTView));
mResolvedDepthStencilRTView.GetAddressOf()); mResolvedDepthStencilRTView.setDebugName("Blit11::mResolvedDepthStencilRTView");
if (FAILED(hr))
{
return gl::OutOfMemory() << "Failed to allocate Blit11::mResolvedDepthStencilRTView, "
<< hr;
}
d3d11::SetDebugName(mResolvedDepthStencilRTView, "Blit11::mResolvedDepthStencilRTView");
mResolvedDepthStencil = TextureHelper11::MakeAndPossess2D(resolvedDepthStencil, formatSet); mResolvedDepthStencil = TextureHelper11::MakeAndPossess2D(resolvedDepthStencil, formatSet);
...@@ -2169,6 +2163,8 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(RenderTarget11 *depthS ...@@ -2169,6 +2163,8 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(RenderTarget11 *depthS
// Notify the Renderer that all state should be invalidated. // Notify the Renderer that all state should be invalidated.
mRenderer->markAllStateDirty(); mRenderer->markAllStateDirty();
ID3D11RenderTargetView *rtvs[] = {mResolvedDepthStencilRTView.get()};
// Apply the necessary state changes to the D3D11 immediate device context. // Apply the necessary state changes to the D3D11 immediate device context.
context->IASetInputLayout(nullptr); context->IASetInputLayout(nullptr);
context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
...@@ -2176,7 +2172,7 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(RenderTarget11 *depthS ...@@ -2176,7 +2172,7 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(RenderTarget11 *depthS
context->GSSetShader(nullptr, nullptr, 0); context->GSSetShader(nullptr, nullptr, 0);
context->RSSetState(nullptr); context->RSSetState(nullptr);
context->OMSetDepthStencilState(nullptr, 0xFFFFFFFF); context->OMSetDepthStencilState(nullptr, 0xFFFFFFFF);
context->OMSetRenderTargets(1, mResolvedDepthStencilRTView.GetAddressOf(), nullptr); context->OMSetRenderTargets(1, rtvs, nullptr);
context->OMSetBlendState(nullptr, nullptr, 0xFFFFFFF); context->OMSetBlendState(nullptr, nullptr, 0xFFFFFFF);
// Set the viewport // Set the viewport
...@@ -2231,7 +2227,7 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(RenderTarget11 *depthS ...@@ -2231,7 +2227,7 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(RenderTarget11 *depthS
void Blit11::releaseResolveDepthStencilResources() void Blit11::releaseResolveDepthStencilResources()
{ {
mStencilSRV.Reset(); mStencilSRV.Reset();
mResolvedDepthStencilRTView.Reset(); mResolvedDepthStencilRTView.reset();
} }
} // namespace rx } // namespace rx
...@@ -10,8 +10,9 @@ ...@@ -10,8 +10,9 @@
#define LIBANGLE_RENDERER_D3D_D3D11_BLIT11_H_ #define LIBANGLE_RENDERER_D3D_D3D11_BLIT11_H_
#include "common/angleutils.h" #include "common/angleutils.h"
#include "libANGLE/angletypes.h"
#include "libANGLE/Error.h" #include "libANGLE/Error.h"
#include "libANGLE/angletypes.h"
#include "libANGLE/renderer/d3d/d3d11/ResourceManager11.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h" #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
#include <map> #include <map>
...@@ -27,14 +28,14 @@ class Blit11 : angle::NonCopyable ...@@ -27,14 +28,14 @@ class Blit11 : angle::NonCopyable
~Blit11(); ~Blit11();
gl::Error swizzleTexture(ID3D11ShaderResourceView *source, gl::Error swizzleTexture(ID3D11ShaderResourceView *source,
ID3D11RenderTargetView *dest, const d3d11::RenderTargetView &dest,
const gl::Extents &size, const gl::Extents &size,
const gl::SwizzleState &swizzleTarget); const gl::SwizzleState &swizzleTarget);
gl::Error copyTexture(ID3D11ShaderResourceView *source, gl::Error copyTexture(ID3D11ShaderResourceView *source,
const gl::Box &sourceArea, const gl::Box &sourceArea,
const gl::Extents &sourceSize, const gl::Extents &sourceSize,
ID3D11RenderTargetView *dest, const d3d11::RenderTargetView &dest,
const gl::Box &destArea, const gl::Box &destArea,
const gl::Extents &destSize, const gl::Extents &destSize,
const gl::Rectangle *scissor, const gl::Rectangle *scissor,
...@@ -287,7 +288,7 @@ class Blit11 : angle::NonCopyable ...@@ -287,7 +288,7 @@ class Blit11 : angle::NonCopyable
d3d11::LazyShader<ID3D11PixelShader> mResolveStencilPS; d3d11::LazyShader<ID3D11PixelShader> mResolveStencilPS;
angle::ComPtr<ID3D11ShaderResourceView> mStencilSRV; angle::ComPtr<ID3D11ShaderResourceView> mStencilSRV;
TextureHelper11 mResolvedDepthStencil; TextureHelper11 mResolvedDepthStencil;
angle::ComPtr<ID3D11RenderTargetView> mResolvedDepthStencilRTView; d3d11::RenderTargetView mResolvedDepthStencilRTView;
TextureHelper11 mResolvedDepth; TextureHelper11 mResolvedDepth;
angle::ComPtr<ID3D11DepthStencilView> mResolvedDepthDSView; angle::ComPtr<ID3D11DepthStencilView> mResolvedDepthDSView;
}; };
......
...@@ -409,8 +409,8 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams, ...@@ -409,8 +409,8 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
continue; continue;
} }
ID3D11RenderTargetView *framebufferRTV = renderTarget->getRenderTargetView(); const d3d11::RenderTargetView &framebufferRTV = renderTarget->getRenderTargetView();
if (!framebufferRTV) if (!framebufferRTV.valid())
{ {
return gl::OutOfMemory() return gl::OutOfMemory()
<< "Clear11: Render target view pointer unexpectedly null."; << "Clear11: Render target view pointer unexpectedly null.";
...@@ -423,7 +423,7 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams, ...@@ -423,7 +423,7 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
(formatInfo.blueBits > 0 && !clearParams.colorMaskBlue) || (formatInfo.blueBits > 0 && !clearParams.colorMaskBlue) ||
(formatInfo.alphaBits > 0 && !clearParams.colorMaskAlpha)) (formatInfo.alphaBits > 0 && !clearParams.colorMaskAlpha))
{ {
rtvs[numRtvs] = framebufferRTV; rtvs[numRtvs] = framebufferRTV.get();
rtvMasks[numRtvs] = gl_d3d11::GetColorMask(&formatInfo) & colorMask; rtvMasks[numRtvs] = gl_d3d11::GetColorMask(&formatInfo) & colorMask;
numRtvs++; numRtvs++;
} }
...@@ -470,23 +470,23 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams, ...@@ -470,23 +470,23 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
rect.top = clearParams.scissor.y; rect.top = clearParams.scissor.y;
rect.bottom = clearParams.scissor.y + clearParams.scissor.height; rect.bottom = clearParams.scissor.y + clearParams.scissor.height;
deviceContext1->ClearView(framebufferRTV, clearValues, &rect, 1); deviceContext1->ClearView(framebufferRTV.get(), clearValues, &rect, 1);
if (mRenderer->getWorkarounds().callClearTwiceOnSmallTarget) if (mRenderer->getWorkarounds().callClearTwiceOnSmallTarget)
{ {
if (clearParams.scissor.width <= 16 || clearParams.scissor.height <= 16) if (clearParams.scissor.width <= 16 || clearParams.scissor.height <= 16)
{ {
deviceContext1->ClearView(framebufferRTV, clearValues, &rect, 1); deviceContext1->ClearView(framebufferRTV.get(), clearValues, &rect, 1);
} }
} }
} }
else else
{ {
deviceContext->ClearRenderTargetView(framebufferRTV, clearValues); deviceContext->ClearRenderTargetView(framebufferRTV.get(), clearValues);
if (mRenderer->getWorkarounds().callClearTwiceOnSmallTarget) if (mRenderer->getWorkarounds().callClearTwiceOnSmallTarget)
{ {
if (framebufferSize.width <= 16 || framebufferSize.height <= 16) if (framebufferSize.width <= 16 || framebufferSize.height <= 16)
{ {
deviceContext->ClearRenderTargetView(framebufferRTV, clearValues); deviceContext->ClearRenderTargetView(framebufferRTV.get(), clearValues);
} }
} }
} }
......
...@@ -241,11 +241,11 @@ gl::Error Framebuffer11::invalidateAttachment(const gl::FramebufferAttachment *a ...@@ -241,11 +241,11 @@ gl::Error Framebuffer11::invalidateAttachment(const gl::FramebufferAttachment *a
RenderTarget11 *renderTarget = nullptr; RenderTarget11 *renderTarget = nullptr;
ANGLE_TRY(attachment->getRenderTarget(&renderTarget)); ANGLE_TRY(attachment->getRenderTarget(&renderTarget));
ID3D11View *view = renderTarget->getRenderTargetView(); const auto &rtv = renderTarget->getRenderTargetView();
if (view != nullptr) if (rtv.valid())
{ {
deviceContext1->DiscardView(view); deviceContext1->DiscardView(rtv.get());
} }
return gl::NoError(); return gl::NoError();
......
...@@ -206,8 +206,9 @@ gl::Error PixelTransfer11::copyBufferToTexture(const gl::PixelUnpackState &unpac ...@@ -206,8 +206,9 @@ gl::Error PixelTransfer11::copyBufferToTexture(const gl::PixelUnpackState &unpac
ANGLE_TRY_RESULT(bufferStorage11->getSRV(srvFormat), bufferSRV); ANGLE_TRY_RESULT(bufferStorage11->getSRV(srvFormat), bufferSRV);
ASSERT(bufferSRV != nullptr); ASSERT(bufferSRV != nullptr);
ID3D11RenderTargetView *textureRTV = GetAs<RenderTarget11>(destRenderTarget)->getRenderTargetView(); const d3d11::RenderTargetView &textureRTV =
ASSERT(textureRTV != nullptr); GetAs<RenderTarget11>(destRenderTarget)->getRenderTargetView();
ASSERT(textureRTV.valid());
CopyShaderParams shaderParams; CopyShaderParams shaderParams;
setBufferToTextureCopyParams(destArea, destSize, sourceglFormatInfo.sizedInternalFormat, unpack, setBufferToTextureCopyParams(destArea, destSize, sourceglFormatInfo.sizedInternalFormat, unpack,
...@@ -234,7 +235,7 @@ gl::Error PixelTransfer11::copyBufferToTexture(const gl::PixelUnpackState &unpac ...@@ -234,7 +235,7 @@ gl::Error PixelTransfer11::copyBufferToTexture(const gl::PixelUnpackState &unpac
deviceContext->OMSetDepthStencilState(mCopyDepthStencilState, 0xFFFFFFFF); deviceContext->OMSetDepthStencilState(mCopyDepthStencilState, 0xFFFFFFFF);
deviceContext->RSSetState(mCopyRasterizerState); deviceContext->RSSetState(mCopyRasterizerState);
stateManager->setOneTimeRenderTarget(textureRTV, nullptr); stateManager->setOneTimeRenderTarget(textureRTV.get(), nullptr);
if (!StructEquals(mParamsData, shaderParams)) if (!StructEquals(mParamsData, shaderParams))
{ {
......
...@@ -211,7 +211,7 @@ void RenderTarget11::signalDirty() ...@@ -211,7 +211,7 @@ void RenderTarget11::signalDirty()
mBroadcastChannel.reset(); mBroadcastChannel.reset();
} }
TextureRenderTarget11::TextureRenderTarget11(ID3D11RenderTargetView *rtv, TextureRenderTarget11::TextureRenderTarget11(d3d11::RenderTargetView &&rtv,
ID3D11Resource *resource, ID3D11Resource *resource,
ID3D11ShaderResourceView *srv, ID3D11ShaderResourceView *srv,
ID3D11ShaderResourceView *blitSRV, ID3D11ShaderResourceView *blitSRV,
...@@ -229,7 +229,7 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11RenderTargetView *rtv, ...@@ -229,7 +229,7 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11RenderTargetView *rtv,
mSamples(samples), mSamples(samples),
mSubresourceIndex(0), mSubresourceIndex(0),
mTexture(resource), mTexture(resource),
mRenderTarget(rtv), mRenderTarget(std::move(rtv)),
mDepthStencil(nullptr), mDepthStencil(nullptr),
mShaderResource(srv), mShaderResource(srv),
mBlitShaderResource(blitSRV) mBlitShaderResource(blitSRV)
...@@ -239,11 +239,6 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11RenderTargetView *rtv, ...@@ -239,11 +239,6 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11RenderTargetView *rtv,
mTexture->AddRef(); mTexture->AddRef();
} }
if (mRenderTarget)
{
mRenderTarget->AddRef();
}
if (mShaderResource) if (mShaderResource)
{ {
mShaderResource->AddRef(); mShaderResource->AddRef();
...@@ -254,9 +249,9 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11RenderTargetView *rtv, ...@@ -254,9 +249,9 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11RenderTargetView *rtv,
mBlitShaderResource->AddRef(); mBlitShaderResource->AddRef();
} }
if (mRenderTarget && mTexture) if (mRenderTarget.valid() && mTexture)
{ {
mSubresourceIndex = GetRTVSubresourceIndex(mTexture, mRenderTarget); mSubresourceIndex = GetRTVSubresourceIndex(mTexture, mRenderTarget.get());
} }
ASSERT(mFormatSet.formatID != angle::Format::ID::NONE || mWidth == 0 || mHeight == 0); ASSERT(mFormatSet.formatID != angle::Format::ID::NONE || mWidth == 0 || mHeight == 0);
} }
...@@ -278,7 +273,7 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11DepthStencilView *dsv, ...@@ -278,7 +273,7 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11DepthStencilView *dsv,
mSamples(samples), mSamples(samples),
mSubresourceIndex(0), mSubresourceIndex(0),
mTexture(resource), mTexture(resource),
mRenderTarget(nullptr), mRenderTarget(),
mDepthStencil(dsv), mDepthStencil(dsv),
mShaderResource(srv), mShaderResource(srv),
mBlitShaderResource(nullptr) mBlitShaderResource(nullptr)
...@@ -308,7 +303,6 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11DepthStencilView *dsv, ...@@ -308,7 +303,6 @@ TextureRenderTarget11::TextureRenderTarget11(ID3D11DepthStencilView *dsv,
TextureRenderTarget11::~TextureRenderTarget11() TextureRenderTarget11::~TextureRenderTarget11()
{ {
SafeRelease(mTexture); SafeRelease(mTexture);
SafeRelease(mRenderTarget);
SafeRelease(mDepthStencil); SafeRelease(mDepthStencil);
SafeRelease(mShaderResource); SafeRelease(mShaderResource);
SafeRelease(mBlitShaderResource); SafeRelease(mBlitShaderResource);
...@@ -319,7 +313,7 @@ ID3D11Resource *TextureRenderTarget11::getTexture() const ...@@ -319,7 +313,7 @@ ID3D11Resource *TextureRenderTarget11::getTexture() const
return mTexture; return mTexture;
} }
ID3D11RenderTargetView *TextureRenderTarget11::getRenderTargetView() const const d3d11::RenderTargetView &TextureRenderTarget11::getRenderTargetView() const
{ {
return mRenderTarget; return mRenderTarget;
} }
...@@ -413,9 +407,10 @@ ID3D11Resource *SurfaceRenderTarget11::getTexture() const ...@@ -413,9 +407,10 @@ ID3D11Resource *SurfaceRenderTarget11::getTexture() const
return (mDepth ? mSwapChain->getDepthStencilTexture() : mSwapChain->getOffscreenTexture()); return (mDepth ? mSwapChain->getDepthStencilTexture() : mSwapChain->getOffscreenTexture());
} }
ID3D11RenderTargetView *SurfaceRenderTarget11::getRenderTargetView() const const d3d11::RenderTargetView &SurfaceRenderTarget11::getRenderTargetView() const
{ {
return (mDepth ? nullptr : mSwapChain->getRenderTarget()); ASSERT(!mDepth);
return mSwapChain->getRenderTarget();
} }
ID3D11DepthStencilView *SurfaceRenderTarget11::getDepthStencilView() const ID3D11DepthStencilView *SurfaceRenderTarget11::getDepthStencilView() const
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#define LIBANGLE_RENDERER_D3D_D3D11_RENDERTARGET11_H_ #define LIBANGLE_RENDERER_D3D_D3D11_RENDERTARGET11_H_
#include "libANGLE/renderer/d3d/RenderTargetD3D.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/renderer11_utils.h"
#include "libANGLE/renderer/d3d/d3d11/texture_format_table.h" #include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
...@@ -27,7 +27,7 @@ class RenderTarget11 : public RenderTargetD3D ...@@ -27,7 +27,7 @@ class RenderTarget11 : public RenderTargetD3D
virtual ~RenderTarget11(); virtual ~RenderTarget11();
virtual ID3D11Resource *getTexture() const = 0; virtual ID3D11Resource *getTexture() const = 0;
virtual ID3D11RenderTargetView *getRenderTargetView() const = 0; virtual const d3d11::RenderTargetView &getRenderTargetView() const = 0;
virtual ID3D11DepthStencilView *getDepthStencilView() const = 0; virtual ID3D11DepthStencilView *getDepthStencilView() const = 0;
virtual ID3D11ShaderResourceView *getShaderResourceView() const = 0; virtual ID3D11ShaderResourceView *getShaderResourceView() const = 0;
virtual ID3D11ShaderResourceView *getBlitShaderResourceView() const = 0; virtual ID3D11ShaderResourceView *getBlitShaderResourceView() const = 0;
...@@ -48,7 +48,7 @@ class TextureRenderTarget11 : public RenderTarget11 ...@@ -48,7 +48,7 @@ class TextureRenderTarget11 : public RenderTarget11
{ {
public: public:
// TextureRenderTarget11 takes ownership of any D3D11 resources it is given and will AddRef them // TextureRenderTarget11 takes ownership of any D3D11 resources it is given and will AddRef them
TextureRenderTarget11(ID3D11RenderTargetView *rtv, TextureRenderTarget11(d3d11::RenderTargetView &&rtv,
ID3D11Resource *resource, ID3D11Resource *resource,
ID3D11ShaderResourceView *srv, ID3D11ShaderResourceView *srv,
ID3D11ShaderResourceView *blitSRV, ID3D11ShaderResourceView *blitSRV,
...@@ -76,7 +76,7 @@ class TextureRenderTarget11 : public RenderTarget11 ...@@ -76,7 +76,7 @@ class TextureRenderTarget11 : public RenderTarget11
GLsizei getSamples() const override; GLsizei getSamples() const override;
ID3D11Resource *getTexture() const override; ID3D11Resource *getTexture() const override;
ID3D11RenderTargetView *getRenderTargetView() const override; const d3d11::RenderTargetView &getRenderTargetView() const override;
ID3D11DepthStencilView *getDepthStencilView() const override; ID3D11DepthStencilView *getDepthStencilView() const override;
ID3D11ShaderResourceView *getShaderResourceView() const override; ID3D11ShaderResourceView *getShaderResourceView() const override;
ID3D11ShaderResourceView *getBlitShaderResourceView() const override; ID3D11ShaderResourceView *getBlitShaderResourceView() const override;
...@@ -92,7 +92,7 @@ class TextureRenderTarget11 : public RenderTarget11 ...@@ -92,7 +92,7 @@ class TextureRenderTarget11 : public RenderTarget11
unsigned int mSubresourceIndex; unsigned int mSubresourceIndex;
ID3D11Resource *mTexture; ID3D11Resource *mTexture;
ID3D11RenderTargetView *mRenderTarget; d3d11::RenderTargetView mRenderTarget;
ID3D11DepthStencilView *mDepthStencil; ID3D11DepthStencilView *mDepthStencil;
ID3D11ShaderResourceView *mShaderResource; ID3D11ShaderResourceView *mShaderResource;
...@@ -114,7 +114,7 @@ class SurfaceRenderTarget11 : public RenderTarget11 ...@@ -114,7 +114,7 @@ class SurfaceRenderTarget11 : public RenderTarget11
GLsizei getSamples() const override; GLsizei getSamples() const override;
ID3D11Resource *getTexture() const override; ID3D11Resource *getTexture() const override;
ID3D11RenderTargetView *getRenderTargetView() const override; const d3d11::RenderTargetView &getRenderTargetView() const override;
ID3D11DepthStencilView *getDepthStencilView() const override; ID3D11DepthStencilView *getDepthStencilView() const override;
ID3D11ShaderResourceView *getShaderResourceView() const override; ID3D11ShaderResourceView *getShaderResourceView() const override;
ID3D11ShaderResourceView *getBlitShaderResourceView() const override; ID3D11ShaderResourceView *getBlitShaderResourceView() const override;
......
...@@ -3260,8 +3260,9 @@ gl::Error Renderer11::copyImageInternal(const gl::Framebuffer *framebuffer, ...@@ -3260,8 +3260,9 @@ gl::Error Renderer11::copyImageInternal(const gl::Framebuffer *framebuffer,
ID3D11ShaderResourceView *source = sourceRenderTarget->getBlitShaderResourceView(); ID3D11ShaderResourceView *source = sourceRenderTarget->getBlitShaderResourceView();
ASSERT(source); ASSERT(source);
ID3D11RenderTargetView *dest = GetAs<RenderTarget11>(destRenderTarget)->getRenderTargetView(); const d3d11::RenderTargetView &dest =
ASSERT(dest); GetAs<RenderTarget11>(destRenderTarget)->getRenderTargetView();
ASSERT(dest.valid());
gl::Box sourceArea(sourceRect.x, sourceRect.y, 0, sourceRect.width, sourceRect.height, 1); gl::Box sourceArea(sourceRect.x, sourceRect.y, 0, sourceRect.width, sourceRect.height, 1);
gl::Extents sourceSize(sourceRenderTarget->getWidth(), sourceRenderTarget->getHeight(), 1); gl::Extents sourceSize(sourceRenderTarget->getWidth(), sourceRenderTarget->getHeight(), 1);
...@@ -3437,8 +3438,8 @@ gl::Error Renderer11::copyTexture(const gl::Texture *source, ...@@ -3437,8 +3438,8 @@ gl::Error Renderer11::copyTexture(const gl::Texture *source,
RenderTarget11 *destRenderTarget11 = GetAs<RenderTarget11>(destRenderTargetD3D); RenderTarget11 *destRenderTarget11 = GetAs<RenderTarget11>(destRenderTargetD3D);
ID3D11RenderTargetView *destRTV = destRenderTarget11->getRenderTargetView(); const d3d11::RenderTargetView &destRTV = destRenderTarget11->getRenderTargetView();
ASSERT(destRTV); ASSERT(destRTV.valid());
gl::Box sourceArea(sourceRect.x, sourceRect.y, 0, sourceRect.width, sourceRect.height, 1); gl::Box sourceArea(sourceRect.x, sourceRect.y, 0, sourceRect.width, sourceRect.height, 1);
gl::Extents sourceSize( gl::Extents sourceSize(
...@@ -3645,29 +3646,24 @@ gl::Error Renderer11::createRenderTarget(int width, ...@@ -3645,29 +3646,24 @@ gl::Error Renderer11::createRenderTarget(int width,
: D3D11_RTV_DIMENSION_TEXTURE2DMS; : D3D11_RTV_DIMENSION_TEXTURE2DMS;
rtvDesc.Texture2D.MipSlice = 0; rtvDesc.Texture2D.MipSlice = 0;
ID3D11RenderTargetView *rtv = nullptr; d3d11::RenderTargetView rtv;
result = mDevice->CreateRenderTargetView(texture, &rtvDesc, &rtv); gl::Error err = allocateResource(rtvDesc, texture, &rtv);
if (FAILED(result)) if (err.isError())
{ {
ASSERT(result == E_OUTOFMEMORY);
SafeRelease(texture); SafeRelease(texture);
SafeRelease(srv); SafeRelease(srv);
SafeRelease(blitSRV); SafeRelease(blitSRV);
return gl::Error(GL_OUT_OF_MEMORY, return err;
"Failed to create render target render target view, result: 0x%X.",
result);
} }
if (formatInfo.dataInitializerFunction != nullptr) if (formatInfo.dataInitializerFunction != nullptr)
{ {
const float clearValues[4] = {0.0f, 0.0f, 0.0f, 1.0f}; const float clearValues[4] = {0.0f, 0.0f, 0.0f, 1.0f};
mDeviceContext->ClearRenderTargetView(rtv, clearValues); mDeviceContext->ClearRenderTargetView(rtv.get(), clearValues);
} }
*outRT = new TextureRenderTarget11(rtv, texture, srv, blitSRV, format, formatInfo, *outRT = new TextureRenderTarget11(std::move(rtv), texture, srv, blitSRV, format,
width, height, 1, supportedSamples); formatInfo, width, height, 1, supportedSamples);
SafeRelease(rtv);
} }
else else
{ {
...@@ -3681,7 +3677,7 @@ gl::Error Renderer11::createRenderTarget(int width, ...@@ -3681,7 +3677,7 @@ gl::Error Renderer11::createRenderTarget(int width,
else else
{ {
*outRT = new TextureRenderTarget11( *outRT = new TextureRenderTarget11(
static_cast<ID3D11RenderTargetView *>(nullptr), nullptr, nullptr, nullptr, format, d3d11::RenderTargetView(), nullptr, nullptr, nullptr, format,
d3d11::Format::Get(GL_NONE, mRenderer11DeviceCaps), width, height, 1, supportedSamples); d3d11::Format::Get(GL_NONE, mRenderer11DeviceCaps), width, height, 1, supportedSamples);
} }
...@@ -4277,7 +4273,6 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn, ...@@ -4277,7 +4273,6 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
TextureHelper11 drawTexture = TextureHelper11::MakeAndReference( TextureHelper11 drawTexture = TextureHelper11::MakeAndReference(
drawRenderTarget11->getTexture(), drawRenderTarget11->getFormatSet()); drawRenderTarget11->getTexture(), drawRenderTarget11->getFormatSet());
unsigned int drawSubresource = drawRenderTarget11->getSubresourceIndex(); unsigned int drawSubresource = drawRenderTarget11->getSubresourceIndex();
ID3D11RenderTargetView *drawRTV = drawRenderTarget11->getRenderTargetView();
ID3D11DepthStencilView *drawDSV = drawRenderTarget11->getDepthStencilView(); ID3D11DepthStencilView *drawDSV = drawRenderTarget11->getDepthStencilView();
RenderTarget11 *readRenderTarget11 = GetAs<RenderTarget11>(readRenderTarget); RenderTarget11 *readRenderTarget11 = GetAs<RenderTarget11>(readRenderTarget);
...@@ -4516,6 +4511,8 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn, ...@@ -4516,6 +4511,8 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
} }
else else
{ {
const d3d11::RenderTargetView &drawRTV = drawRenderTarget11->getRenderTargetView();
// We don't currently support masking off any other channel than alpha // We don't currently support masking off any other channel than alpha
bool maskOffAlpha = colorMaskingNeeded && colorMask.alpha; bool maskOffAlpha = colorMaskingNeeded && colorMask.alpha;
ASSERT(readSRV); ASSERT(readSRV);
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h" #include "libANGLE/renderer/d3d/d3d11/DebugAnnotator11.h"
#include "libANGLE/renderer/d3d/d3d11/InputLayoutCache.h" #include "libANGLE/renderer/d3d/d3d11/InputLayoutCache.h"
#include "libANGLE/renderer/d3d/d3d11/RenderStateCache.h" #include "libANGLE/renderer/d3d/d3d11/RenderStateCache.h"
#include "libANGLE/renderer/d3d/d3d11/ResourceManager11.h"
#include "libANGLE/renderer/d3d/d3d11/StateManager11.h" #include "libANGLE/renderer/d3d/d3d11/StateManager11.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h" #include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
...@@ -403,6 +404,18 @@ class Renderer11 : public RendererD3D ...@@ -403,6 +404,18 @@ class Renderer11 : public RendererD3D
const std::vector<D3DUniform *> &uniformArray) override; const std::vector<D3DUniform *> &uniformArray) override;
gl::Error applyComputeShader(const gl::ContextState &data); gl::Error applyComputeShader(const gl::ContextState &data);
template <typename DescT, typename InitDataT, typename ResourceT>
gl::Error allocateResource(const DescT &desc, InitDataT *initData, ResourceT *resourceOut)
{
return mResourceManager11.allocate(this, &desc, initData, resourceOut);
}
template <typename InitDataT, typename ResourceT>
gl::Error allocateResourceNoDesc(InitDataT *initData, ResourceT *resourceOut)
{
return mResourceManager11.allocate(this, nullptr, initData, resourceOut);
}
protected: protected:
gl::Error clearTextures(gl::SamplerType samplerType, gl::Error clearTextures(gl::SamplerType samplerType,
size_t rangeStart, size_t rangeStart,
...@@ -626,6 +639,7 @@ class Renderer11 : public RendererD3D ...@@ -626,6 +639,7 @@ class Renderer11 : public RendererD3D
gl::DebugAnnotator *mAnnotator; gl::DebugAnnotator *mAnnotator;
mutable Optional<bool> mSupportsShareHandles; mutable Optional<bool> mSupportsShareHandles;
ResourceManager11 mResourceManager11;
}; };
} // namespace rx } // namespace rx
......
//
// Copyright 2017 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.
//
// ResourceManager11:
// Centralized point of allocation for all D3D11 Resources.
#include "libANGLE/renderer/d3d/d3d11/ResourceManager11.h"
#include "common/debug.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
namespace rx
{
namespace
{
template <typename T>
size_t ComputeMemoryUsage(const T *desc)
{
return 0;
}
HRESULT CreateResource(ID3D11Device *device,
const D3D11_RENDER_TARGET_VIEW_DESC *desc,
ID3D11Resource *resource,
ID3D11RenderTargetView **renderTargetView)
{
return device->CreateRenderTargetView(resource, desc, renderTargetView);
}
#define ANGLE_RESOURCE_STRINGIFY_OP(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) #RESTYPE
constexpr std::array<const char *, NumResourceTypes> kResourceTypeNames = {
{ANGLE_RESOURCE_TYPE_OP(Stringify, ANGLE_RESOURCE_STRINGIFY_OP)}};
} // anonymous namespace
// ResourceManager11 Implementation.
ResourceManager11::ResourceManager11()
: mAllocatedResourceCounts({{}}), mAllocatedResourceDeviceMemory({{}})
{
}
ResourceManager11::~ResourceManager11()
{
for (size_t count : mAllocatedResourceCounts)
{
ASSERT(count == 0);
}
for (size_t memorySize : mAllocatedResourceDeviceMemory)
{
ASSERT(memorySize == 0);
}
}
template <typename T>
gl::Error ResourceManager11::allocate(Renderer11 *renderer,
const GetDescFromD3D11<T> *desc,
GetInitDataFromD3D11<T> *initData,
Resource11<T> *resourceOut)
{
ID3D11Device *device = renderer->getDevice();
T *resource = nullptr;
HRESULT hr = CreateResource(device, desc, initData, &resource);
if (FAILED(hr))
{
ASSERT(!resource);
if (d3d11::isDeviceLostError(hr))
{
renderer->notifyDeviceLost();
}
return gl::OutOfMemory() << "Error allocating "
<< std::string(kResourceTypeNames[ResourceTypeIndex<T>()]) << ". "
<< gl::FmtHR(hr);
}
ASSERT(resource);
incrResource(GetResourceTypeFromD3D11<T>(), ComputeMemoryUsage(desc));
*resourceOut = std::move(Resource11<T>(resource, this));
return gl::NoError();
}
void ResourceManager11::incrResource(ResourceType resourceType, size_t memorySize)
{
mAllocatedResourceCounts[ResourceTypeIndex(resourceType)]++;
mAllocatedResourceDeviceMemory[ResourceTypeIndex(resourceType)] += memorySize;
}
void ResourceManager11::decrResource(ResourceType resourceType, size_t memorySize)
{
ASSERT(mAllocatedResourceCounts[ResourceTypeIndex(resourceType)] > 0);
mAllocatedResourceCounts[ResourceTypeIndex(resourceType)]--;
ASSERT(mAllocatedResourceDeviceMemory[ResourceTypeIndex(resourceType)] >= memorySize);
mAllocatedResourceDeviceMemory[ResourceTypeIndex(resourceType)] -= memorySize;
}
template <typename T>
void ResourceManager11::onRelease(T *resource)
{
ASSERT(resource);
GetDescFromD3D11<T> desc;
resource->GetDesc(&desc);
decrResource(GetResourceTypeFromD3D11<T>(), ComputeMemoryUsage(&desc));
}
#define ANGLE_INSTANTIATE_OP(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
\
template gl::Error \
ResourceManager11::allocate(\
Renderer11 *, \
\
const DESCTYPE *, \
\
INITDATATYPE *, \
\
Resource11<D3D11TYPE> *); \
\
\
template void \
ResourceManager11::onRelease(D3D11TYPE *);
ANGLE_RESOURCE_TYPE_OP(Instantitate, ANGLE_INSTANTIATE_OP)
} // namespace rx
//
// Copyright 2017 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.
//
// ResourceManager11:
// Centralized point of allocation for all D3D11 Resources.
#ifndef LIBANGLE_RENDERER_D3D_D3D11_RESOURCEFACTORY11_H_
#define LIBANGLE_RENDERER_D3D_D3D11_RESOURCEFACTORY11_H_
#include <array>
#include <memory>
#include "common/angleutils.h"
#include "common/debug.h"
#include "libANGLE/Error.h"
namespace rx
{
class Renderer11;
class ResourceManager11;
// Format: ResourceType, D3D11 type, DESC type, init data type.
#define ANGLE_RESOURCE_TYPE_OP(NAME, OP) \
OP(NAME, RenderTargetView, ID3D11RenderTargetView, D3D11_RENDER_TARGET_VIEW_DESC, \
ID3D11Resource)
#define ANGLE_RESOURCE_TYPE_LIST(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) RESTYPE,
enum class ResourceType
{
ANGLE_RESOURCE_TYPE_OP(List, ANGLE_RESOURCE_TYPE_LIST) Last
};
#undef ANGLE_RESOURCE_TYPE_LIST
constexpr size_t ResourceTypeIndex(ResourceType resourceType)
{
return static_cast<size_t>(resourceType);
}
constexpr size_t NumResourceTypes = ResourceTypeIndex(ResourceType::Last);
#define ANGLE_RESOURCE_TYPE_TO_D3D11(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
\
template<> struct NAME<ResourceType::RESTYPE> \
{ \
using Value = D3D11TYPE; \
};
#define ANGLE_RESOURCE_TYPE_TO_DESC(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
\
template<> struct NAME<ResourceType::RESTYPE> \
{ \
using Value = DESCTYPE; \
};
#define ANGLE_RESOURCE_TYPE_TO_INIT_DATA(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
\
template<> struct NAME<ResourceType::RESTYPE> \
{ \
using Value = INITDATATYPE; \
};
#define ANGLE_RESOURCE_TYPE_TO_TYPE(NAME, OP) \
template <ResourceType Param> \
struct NAME; \
ANGLE_RESOURCE_TYPE_OP(NAME, OP) \
\
template<ResourceType Param> struct NAME \
{ \
}; \
\
template<ResourceType Param> using Get##NAME = typename NAME<Param>::Value;
ANGLE_RESOURCE_TYPE_TO_TYPE(D3D11Type, ANGLE_RESOURCE_TYPE_TO_D3D11)
ANGLE_RESOURCE_TYPE_TO_TYPE(DescType, ANGLE_RESOURCE_TYPE_TO_DESC)
ANGLE_RESOURCE_TYPE_TO_TYPE(InitDataType, ANGLE_RESOURCE_TYPE_TO_INIT_DATA)
#undef ANGLE_RESOURCE_TYPE_TO_D3D11
#undef ANGLE_RESOURCE_TYPE_TO_DESC
#undef ANGLE_RESOURCE_TYPE_TO_INIT_DATA
#undef ANGLE_RESOURCE_TYPE_TO_TYPE
#define ANGLE_TYPE_TO_RESOURCE_TYPE(NAME, OP) \
template <typename Param> \
struct NAME; \
ANGLE_RESOURCE_TYPE_OP(NAME, OP) \
\
template<typename Param> struct NAME \
{ \
}; \
\
template<typename Param> constexpr ResourceType Get##NAME() \
{ \
return NAME<Param>::Value; \
}
#define ANGLE_D3D11_TO_RESOURCE_TYPE(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
\
template<> struct NAME<D3D11TYPE> \
{ \
static constexpr ResourceType Value = ResourceType::RESTYPE; \
};
ANGLE_TYPE_TO_RESOURCE_TYPE(ResourceTypeFromD3D11, ANGLE_D3D11_TO_RESOURCE_TYPE)
#undef ANGLE_D3D11_TO_RESOURCE_TYPE
#undef ANGLE_TYPE_TO_RESOURCE_TYPE
template <typename T>
using GetDescFromD3D11 = GetDescType<ResourceTypeFromD3D11<T>::Value>;
template <typename T>
using GetInitDataFromD3D11 = GetInitDataType<ResourceTypeFromD3D11<T>::Value>;
template <typename T>
constexpr size_t ResourceTypeIndex()
{
return static_cast<size_t>(GetResourceTypeFromD3D11<T>());
}
template <typename T>
struct TypedData
{
TypedData() {}
~TypedData();
T *object = nullptr;
ResourceManager11 *manager = nullptr;
};
// Smart pointer type. Wraps the resource and a factory for safe deletion.
template <typename T, template <class> class Pointer, typename DataT>
class Resource11Base : angle::NonCopyable
{
public:
T *get() const { return mData->object; }
void setDebugName(const char *name) { d3d11::SetDebugName(mData->object, name); }
void set(T *object)
{
ASSERT(!valid());
mData->object = object;
}
bool valid() const { return (mData->object != nullptr); }
void reset() { mData.reset(new DataT()); }
protected:
friend class TextureHelper11;
Resource11Base() : mData(new DataT()) {}
Resource11Base(Resource11Base &&movedObj) : mData(new DataT())
{
std::swap(mData, movedObj.mData);
}
virtual ~Resource11Base() { mData.reset(); }
Resource11Base &operator=(Resource11Base &&movedObj)
{
std::swap(mData, movedObj.mData);
return *this;
}
Pointer<DataT> mData;
};
template <typename T>
using UniquePtr = typename std::unique_ptr<T, std::default_delete<T>>;
template <typename ResourceT>
class Resource11 : public Resource11Base<ResourceT, UniquePtr, TypedData<ResourceT>>
{
public:
Resource11() {}
Resource11(Resource11 &&other)
: Resource11Base<ResourceT, UniquePtr, TypedData<ResourceT>>(std::move(other))
{
}
Resource11 &operator=(Resource11 &&other)
{
std::swap(this->mData, other.mData);
return *this;
}
private:
friend class ResourceManager11;
Resource11(ResourceT *object, ResourceManager11 *manager)
{
this->mData->object = object;
this->mData->manager = manager;
}
};
class ResourceManager11 final : angle::NonCopyable
{
public:
ResourceManager11();
~ResourceManager11();
template <typename T>
gl::Error allocate(Renderer11 *renderer,
const GetDescFromD3D11<T> *desc,
GetInitDataFromD3D11<T> *initData,
Resource11<T> *resourceOut);
template <typename T>
void onRelease(T *resource);
private:
void incrResource(ResourceType resourceType, size_t memorySize);
void decrResource(ResourceType resourceType, size_t memorySize);
std::array<size_t, NumResourceTypes> mAllocatedResourceCounts;
std::array<size_t, NumResourceTypes> mAllocatedResourceDeviceMemory;
};
template <typename ResourceT>
TypedData<ResourceT>::~TypedData()
{
if (object)
{
// We can have a nullptr factory when holding passed-in resources.
if (manager)
{
manager->onRelease(object);
}
object->Release();
}
}
#define ANGLE_RESOURCE_TYPE_CLASS(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
using RESTYPE = Resource11<D3D11TYPE>;
namespace d3d11
{
ANGLE_RESOURCE_TYPE_OP(ClassList, ANGLE_RESOURCE_TYPE_CLASS)
} // namespace d3d11
#undef ANGLE_RESOURCE_TYPE_CLASS
} // namespace rx
#endif // LIBANGLE_RENDERER_D3D_D3D11_RESOURCEFACTORY11_H_
...@@ -1046,7 +1046,7 @@ gl::Error StateManager11::syncFramebuffer(ContextImpl *contextImpl, gl::Framebuf ...@@ -1046,7 +1046,7 @@ gl::Error StateManager11::syncFramebuffer(ContextImpl *contextImpl, gl::Framebuf
if (renderTarget) if (renderTarget)
{ {
framebufferRTVs[appliedRTIndex] = renderTarget->getRenderTargetView(); framebufferRTVs[appliedRTIndex] = renderTarget->getRenderTargetView().get();
ASSERT(framebufferRTVs[appliedRTIndex]); ASSERT(framebufferRTVs[appliedRTIndex]);
maxExistingRT = static_cast<UINT>(appliedRTIndex) + 1; maxExistingRT = static_cast<UINT>(appliedRTIndex) + 1;
......
...@@ -71,11 +71,11 @@ SwapChain11::SwapChain11(Renderer11 *renderer, ...@@ -71,11 +71,11 @@ SwapChain11::SwapChain11(Renderer11 *renderer,
mSwapChain1(nullptr), mSwapChain1(nullptr),
mKeyedMutex(nullptr), mKeyedMutex(nullptr),
mBackBufferTexture(nullptr), mBackBufferTexture(nullptr),
mBackBufferRTView(nullptr), mBackBufferRTView(),
mBackBufferSRView(nullptr), mBackBufferSRView(nullptr),
mNeedsOffscreenTexture(NeedsOffscreenTexture(renderer, nativeWindow, orientation)), mNeedsOffscreenTexture(NeedsOffscreenTexture(renderer, nativeWindow, orientation)),
mOffscreenTexture(nullptr), mOffscreenTexture(nullptr),
mOffscreenRTView(nullptr), mOffscreenRTView(),
mOffscreenSRView(nullptr), mOffscreenSRView(nullptr),
mDepthStencilTexture(nullptr), mDepthStencilTexture(nullptr),
mDepthStencilDSView(nullptr), mDepthStencilDSView(nullptr),
...@@ -112,10 +112,10 @@ void SwapChain11::release() ...@@ -112,10 +112,10 @@ void SwapChain11::release()
SafeRelease(mSwapChain); SafeRelease(mSwapChain);
SafeRelease(mKeyedMutex); SafeRelease(mKeyedMutex);
SafeRelease(mBackBufferTexture); SafeRelease(mBackBufferTexture);
SafeRelease(mBackBufferRTView); mBackBufferRTView.reset();
SafeRelease(mBackBufferSRView); SafeRelease(mBackBufferSRView);
SafeRelease(mOffscreenTexture); SafeRelease(mOffscreenTexture);
SafeRelease(mOffscreenRTView); mOffscreenRTView.reset();
SafeRelease(mOffscreenSRView); SafeRelease(mOffscreenSRView);
SafeRelease(mDepthStencilTexture); SafeRelease(mDepthStencilTexture);
SafeRelease(mDepthStencilDSView); SafeRelease(mDepthStencilDSView);
...@@ -136,7 +136,7 @@ void SwapChain11::release() ...@@ -136,7 +136,7 @@ void SwapChain11::release()
void SwapChain11::releaseOffscreenColorBuffer() void SwapChain11::releaseOffscreenColorBuffer()
{ {
SafeRelease(mOffscreenTexture); SafeRelease(mOffscreenTexture);
SafeRelease(mOffscreenRTView); mOffscreenRTView.reset();
SafeRelease(mOffscreenSRView); SafeRelease(mOffscreenSRView);
} }
...@@ -294,9 +294,10 @@ EGLint SwapChain11::resetOffscreenColorBuffer(int backbufferWidth, int backbuffe ...@@ -294,9 +294,10 @@ EGLint SwapChain11::resetOffscreenColorBuffer(int backbufferWidth, int backbuffe
(mEGLSamples <= 1) ? D3D11_RTV_DIMENSION_TEXTURE2D : D3D11_RTV_DIMENSION_TEXTURE2DMS; (mEGLSamples <= 1) ? D3D11_RTV_DIMENSION_TEXTURE2D : D3D11_RTV_DIMENSION_TEXTURE2DMS;
offscreenRTVDesc.Texture2D.MipSlice = 0; offscreenRTVDesc.Texture2D.MipSlice = 0;
HRESULT result = device->CreateRenderTargetView(mOffscreenTexture, &offscreenRTVDesc, &mOffscreenRTView); gl::Error err =
ASSERT(SUCCEEDED(result)); mRenderer->allocateResource(offscreenRTVDesc, mOffscreenTexture, &mOffscreenRTView);
d3d11::SetDebugName(mOffscreenRTView, "Offscreen back buffer render target"); ASSERT(!err.isError());
mOffscreenRTView.setDebugName("Offscreen back buffer render target");
D3D11_SHADER_RESOURCE_VIEW_DESC offscreenSRVDesc; D3D11_SHADER_RESOURCE_VIEW_DESC offscreenSRVDesc;
offscreenSRVDesc.Format = backbufferFormatInfo.srvFormat; offscreenSRVDesc.Format = backbufferFormatInfo.srvFormat;
...@@ -307,8 +308,8 @@ EGLint SwapChain11::resetOffscreenColorBuffer(int backbufferWidth, int backbuffe ...@@ -307,8 +308,8 @@ EGLint SwapChain11::resetOffscreenColorBuffer(int backbufferWidth, int backbuffe
if (offscreenTextureDesc.BindFlags & D3D11_BIND_SHADER_RESOURCE) if (offscreenTextureDesc.BindFlags & D3D11_BIND_SHADER_RESOURCE)
{ {
result = device->CreateShaderResourceView(mOffscreenTexture, &offscreenSRVDesc, HRESULT result = device->CreateShaderResourceView(mOffscreenTexture, &offscreenSRVDesc,
&mOffscreenSRView); &mOffscreenSRView);
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
d3d11::SetDebugName(mOffscreenSRView, "Offscreen back buffer shader resource"); d3d11::SetDebugName(mOffscreenSRView, "Offscreen back buffer shader resource");
} }
...@@ -440,10 +441,10 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight) ...@@ -440,10 +441,10 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight)
} }
// Can only call resize if we have already created our swap buffer and resources // Can only call resize if we have already created our swap buffer and resources
ASSERT(mSwapChain && mBackBufferTexture && mBackBufferRTView && mBackBufferSRView); ASSERT(mSwapChain && mBackBufferTexture && mBackBufferRTView.valid() && mBackBufferSRView);
SafeRelease(mBackBufferTexture); SafeRelease(mBackBufferTexture);
SafeRelease(mBackBufferRTView); mBackBufferRTView.reset();
SafeRelease(mBackBufferSRView); SafeRelease(mBackBufferSRView);
// Resize swap chain // Resize swap chain
...@@ -478,12 +479,10 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight) ...@@ -478,12 +479,10 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight)
if (SUCCEEDED(result)) if (SUCCEEDED(result))
{ {
d3d11::SetDebugName(mBackBufferTexture, "Back buffer texture"); d3d11::SetDebugName(mBackBufferTexture, "Back buffer texture");
result = device->CreateRenderTargetView(mBackBufferTexture, nullptr, &mBackBufferRTView);
ASSERT(SUCCEEDED(result)); gl::Error err = mRenderer->allocateResourceNoDesc(mBackBufferTexture, &mBackBufferRTView);
if (SUCCEEDED(result)) ASSERT(!err.isError());
{ mBackBufferRTView.setDebugName("Back buffer render target");
d3d11::SetDebugName(mBackBufferRTView, "Back buffer render target");
}
result = device->CreateShaderResourceView(mBackBufferTexture, nullptr, &mBackBufferSRView); result = device->CreateShaderResourceView(mBackBufferTexture, nullptr, &mBackBufferSRView);
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
...@@ -555,7 +554,7 @@ EGLint SwapChain11::reset(EGLint backbufferWidth, EGLint backbufferHeight, EGLin ...@@ -555,7 +554,7 @@ EGLint SwapChain11::reset(EGLint backbufferWidth, EGLint backbufferHeight, EGLin
SafeRelease(mSwapChain1); SafeRelease(mSwapChain1);
SafeRelease(mSwapChain); SafeRelease(mSwapChain);
SafeRelease(mBackBufferTexture); SafeRelease(mBackBufferTexture);
SafeRelease(mBackBufferRTView); mBackBufferRTView.reset();
// EGL allows creating a surface with 0x0 dimension, however, DXGI does not like 0x0 swapchains // EGL allows creating a surface with 0x0 dimension, however, DXGI does not like 0x0 swapchains
if (backbufferWidth < 1 || backbufferHeight < 1) if (backbufferWidth < 1 || backbufferHeight < 1)
...@@ -595,9 +594,9 @@ EGLint SwapChain11::reset(EGLint backbufferWidth, EGLint backbufferHeight, EGLin ...@@ -595,9 +594,9 @@ EGLint SwapChain11::reset(EGLint backbufferWidth, EGLint backbufferHeight, EGLin
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
d3d11::SetDebugName(mBackBufferTexture, "Back buffer texture"); d3d11::SetDebugName(mBackBufferTexture, "Back buffer texture");
result = device->CreateRenderTargetView(mBackBufferTexture, nullptr, &mBackBufferRTView); gl::Error err = mRenderer->allocateResourceNoDesc(mBackBufferTexture, &mBackBufferRTView);
ASSERT(SUCCEEDED(result)); ASSERT(!err.isError());
d3d11::SetDebugName(mBackBufferRTView, "Back buffer render target"); mBackBufferRTView.setDebugName("Back buffer render target");
result = device->CreateShaderResourceView(mBackBufferTexture, nullptr, &mBackBufferSRView); result = device->CreateShaderResourceView(mBackBufferTexture, nullptr, &mBackBufferSRView);
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
...@@ -798,7 +797,7 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width, ...@@ -798,7 +797,7 @@ EGLint SwapChain11::copyOffscreenToBackbuffer(EGLint x, EGLint y, EGLint width,
auto stateManager = mRenderer->getStateManager(); auto stateManager = mRenderer->getStateManager();
// Apply render targets // Apply render targets
stateManager->setOneTimeRenderTarget(mBackBufferRTView, nullptr); stateManager->setOneTimeRenderTarget(mBackBufferRTView.get(), nullptr);
// Set the viewport // Set the viewport
D3D11_VIEWPORT viewport; D3D11_VIEWPORT viewport;
...@@ -896,7 +895,7 @@ ID3D11Texture2D *SwapChain11::getOffscreenTexture() ...@@ -896,7 +895,7 @@ ID3D11Texture2D *SwapChain11::getOffscreenTexture()
return mNeedsOffscreenTexture ? mOffscreenTexture : mBackBufferTexture; return mNeedsOffscreenTexture ? mOffscreenTexture : mBackBufferTexture;
} }
ID3D11RenderTargetView *SwapChain11::getRenderTarget() const d3d11::RenderTargetView &SwapChain11::getRenderTarget()
{ {
return mNeedsOffscreenTexture ? mOffscreenRTView : mBackBufferRTView; return mNeedsOffscreenTexture ? mOffscreenRTView : mBackBufferRTView;
} }
......
...@@ -40,7 +40,7 @@ class SwapChain11 final : public SwapChainD3D ...@@ -40,7 +40,7 @@ class SwapChain11 final : public SwapChainD3D
RenderTargetD3D *getDepthStencilRenderTarget() override { return &mDepthStencilRenderTarget; } RenderTargetD3D *getDepthStencilRenderTarget() override { return &mDepthStencilRenderTarget; }
ID3D11Texture2D *getOffscreenTexture(); ID3D11Texture2D *getOffscreenTexture();
ID3D11RenderTargetView *getRenderTarget(); const d3d11::RenderTargetView &getRenderTarget();
ID3D11ShaderResourceView *getRenderTargetShaderResource(); ID3D11ShaderResourceView *getRenderTargetShaderResource();
ID3D11Texture2D *getDepthStencilTexture(); ID3D11Texture2D *getDepthStencilTexture();
...@@ -86,12 +86,12 @@ class SwapChain11 final : public SwapChainD3D ...@@ -86,12 +86,12 @@ class SwapChain11 final : public SwapChainD3D
IDXGIKeyedMutex *mKeyedMutex; IDXGIKeyedMutex *mKeyedMutex;
ID3D11Texture2D *mBackBufferTexture; ID3D11Texture2D *mBackBufferTexture;
ID3D11RenderTargetView *mBackBufferRTView; d3d11::RenderTargetView mBackBufferRTView;
ID3D11ShaderResourceView *mBackBufferSRView; ID3D11ShaderResourceView *mBackBufferSRView;
const bool mNeedsOffscreenTexture; const bool mNeedsOffscreenTexture;
ID3D11Texture2D *mOffscreenTexture; ID3D11Texture2D *mOffscreenTexture;
ID3D11RenderTargetView *mOffscreenRTView; d3d11::RenderTargetView mOffscreenRTView;
ID3D11ShaderResourceView *mOffscreenSRView; ID3D11ShaderResourceView *mOffscreenSRView;
ID3D11Texture2D *mDepthStencilTexture; ID3D11Texture2D *mDepthStencilTexture;
......
...@@ -10,9 +10,10 @@ ...@@ -10,9 +10,10 @@
#ifndef LIBANGLE_RENDERER_D3D_D3D11_TEXTURESTORAGE11_H_ #ifndef LIBANGLE_RENDERER_D3D_D3D11_TEXTURESTORAGE11_H_
#define LIBANGLE_RENDERER_D3D_D3D11_TEXTURESTORAGE11_H_ #define LIBANGLE_RENDERER_D3D_D3D11_TEXTURESTORAGE11_H_
#include "libANGLE/Texture.h"
#include "libANGLE/Error.h" #include "libANGLE/Error.h"
#include "libANGLE/Texture.h"
#include "libANGLE/renderer/d3d/TextureStorage.h" #include "libANGLE/renderer/d3d/TextureStorage.h"
#include "libANGLE/renderer/d3d/d3d11/ResourceManager11.h"
#include "libANGLE/renderer/d3d/d3d11/texture_format_table.h" #include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
#include <array> #include <array>
...@@ -91,7 +92,8 @@ class TextureStorage11 : public TextureStorage ...@@ -91,7 +92,8 @@ class TextureStorage11 : public TextureStorage
virtual gl::Error getMippedResource(ID3D11Resource **outResource) { return getResource(outResource); } virtual gl::Error getMippedResource(ID3D11Resource **outResource) { return getResource(outResource); }
virtual gl::Error getSwizzleTexture(ID3D11Resource **outTexture) = 0; virtual gl::Error getSwizzleTexture(ID3D11Resource **outTexture) = 0;
virtual gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV) = 0; virtual gl::Error getSwizzleRenderTarget(int mipLevel,
const d3d11::RenderTargetView **outRTV) = 0;
gl::Error getSRVLevel(int mipLevel, bool blitSRV, ID3D11ShaderResourceView **outSRV); gl::Error getSRVLevel(int mipLevel, bool blitSRV, ID3D11ShaderResourceView **outSRV);
// Get a version of a depth texture with only depth information, not stencil. // Get a version of a depth texture with only depth information, not stencil.
...@@ -170,7 +172,7 @@ class TextureStorage11_2D : public TextureStorage11 ...@@ -170,7 +172,7 @@ class TextureStorage11_2D : public TextureStorage11
protected: protected:
gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override; gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override;
gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV) override; gl::Error getSwizzleRenderTarget(int mipLevel, const d3d11::RenderTargetView **outRTV) override;
gl::ErrorOrResult<DropStencil> ensureDropStencilTexture() override; gl::ErrorOrResult<DropStencil> ensureDropStencilTexture() override;
...@@ -202,7 +204,7 @@ class TextureStorage11_2D : public TextureStorage11 ...@@ -202,7 +204,7 @@ class TextureStorage11_2D : public TextureStorage11
// Swizzle-related variables // Swizzle-related variables
ID3D11Texture2D *mSwizzleTexture; ID3D11Texture2D *mSwizzleTexture;
ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; d3d11::RenderTargetView mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
Image11 *mAssociatedImages[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; Image11 *mAssociatedImages[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
}; };
...@@ -228,7 +230,7 @@ class TextureStorage11_External : public TextureStorage11 ...@@ -228,7 +230,7 @@ class TextureStorage11_External : public TextureStorage11
protected: protected:
gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override; gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override;
gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV) override; gl::Error getSwizzleRenderTarget(int mipLevel, const d3d11::RenderTargetView **outRTV) override;
private: private:
gl::Error createSRV(int baseLevel, gl::Error createSRV(int baseLevel,
...@@ -269,7 +271,7 @@ class TextureStorage11_EGLImage final : public TextureStorage11 ...@@ -269,7 +271,7 @@ class TextureStorage11_EGLImage final : public TextureStorage11
protected: protected:
gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override; gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override;
gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV) override; gl::Error getSwizzleRenderTarget(int mipLevel, const d3d11::RenderTargetView **outRTV) override;
private: private:
// Check if the EGL image's render target has been updated due to orphaning and delete // Check if the EGL image's render target has been updated due to orphaning and delete
...@@ -289,7 +291,7 @@ class TextureStorage11_EGLImage final : public TextureStorage11 ...@@ -289,7 +291,7 @@ class TextureStorage11_EGLImage final : public TextureStorage11
// Swizzle-related variables // Swizzle-related variables
ID3D11Texture2D *mSwizzleTexture; ID3D11Texture2D *mSwizzleTexture;
std::vector<ID3D11RenderTargetView *> mSwizzleRenderTargets; std::vector<d3d11::RenderTargetView> mSwizzleRenderTargets;
}; };
class TextureStorage11_Cube : public TextureStorage11 class TextureStorage11_Cube : public TextureStorage11
...@@ -315,7 +317,7 @@ class TextureStorage11_Cube : public TextureStorage11 ...@@ -315,7 +317,7 @@ class TextureStorage11_Cube : public TextureStorage11
protected: protected:
gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override; gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override;
gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV) override; gl::Error getSwizzleRenderTarget(int mipLevel, const d3d11::RenderTargetView **outRTV) override;
gl::ErrorOrResult<DropStencil> ensureDropStencilTexture() override; gl::ErrorOrResult<DropStencil> ensureDropStencilTexture() override;
...@@ -343,7 +345,7 @@ class TextureStorage11_Cube : public TextureStorage11 ...@@ -343,7 +345,7 @@ class TextureStorage11_Cube : public TextureStorage11
bool mUseLevelZeroTexture; bool mUseLevelZeroTexture;
ID3D11Texture2D *mSwizzleTexture; ID3D11Texture2D *mSwizzleTexture;
ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; d3d11::RenderTargetView mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
Image11 *mAssociatedImages[CUBE_FACE_COUNT][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; Image11 *mAssociatedImages[CUBE_FACE_COUNT][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
}; };
...@@ -367,7 +369,7 @@ class TextureStorage11_3D : public TextureStorage11 ...@@ -367,7 +369,7 @@ class TextureStorage11_3D : public TextureStorage11
protected: protected:
gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override; gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override;
gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV) override; gl::Error getSwizzleRenderTarget(int mipLevel, const d3d11::RenderTargetView **outRTV) override;
private: private:
gl::Error createSRV(int baseLevel, gl::Error createSRV(int baseLevel,
...@@ -384,7 +386,7 @@ class TextureStorage11_3D : public TextureStorage11 ...@@ -384,7 +386,7 @@ class TextureStorage11_3D : public TextureStorage11
ID3D11Texture3D *mTexture; ID3D11Texture3D *mTexture;
ID3D11Texture3D *mSwizzleTexture; ID3D11Texture3D *mSwizzleTexture;
ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; d3d11::RenderTargetView mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
Image11 *mAssociatedImages[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; Image11 *mAssociatedImages[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
}; };
...@@ -406,7 +408,7 @@ class TextureStorage11_2DArray : public TextureStorage11 ...@@ -406,7 +408,7 @@ class TextureStorage11_2DArray : public TextureStorage11
protected: protected:
gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override; gl::Error getSwizzleTexture(ID3D11Resource **outTexture) override;
gl::Error getSwizzleRenderTarget(int mipLevel, ID3D11RenderTargetView **outRTV) override; gl::Error getSwizzleRenderTarget(int mipLevel, const d3d11::RenderTargetView **outRTV) override;
gl::ErrorOrResult<DropStencil> ensureDropStencilTexture() override; gl::ErrorOrResult<DropStencil> ensureDropStencilTexture() override;
...@@ -428,7 +430,7 @@ class TextureStorage11_2DArray : public TextureStorage11 ...@@ -428,7 +430,7 @@ class TextureStorage11_2DArray : public TextureStorage11
ID3D11Texture2D *mTexture; ID3D11Texture2D *mTexture;
ID3D11Texture2D *mSwizzleTexture; ID3D11Texture2D *mSwizzleTexture;
ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; d3d11::RenderTargetView mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
typedef std::map<LevelLayerKey, Image11*> ImageMap; typedef std::map<LevelLayerKey, Image11*> ImageMap;
ImageMap mAssociatedImages; ImageMap mAssociatedImages;
......
...@@ -408,6 +408,8 @@ ...@@ -408,6 +408,8 @@
'libANGLE/renderer/d3d/d3d11/Query11.h', 'libANGLE/renderer/d3d/d3d11/Query11.h',
'libANGLE/renderer/d3d/d3d11/Renderer11.cpp', 'libANGLE/renderer/d3d/d3d11/Renderer11.cpp',
'libANGLE/renderer/d3d/d3d11/Renderer11.h', 'libANGLE/renderer/d3d/d3d11/Renderer11.h',
'libANGLE/renderer/d3d/d3d11/ResourceManager11.cpp',
'libANGLE/renderer/d3d/d3d11/ResourceManager11.h',
'libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp', 'libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp',
'libANGLE/renderer/d3d/d3d11/renderer11_utils.h', 'libANGLE/renderer/d3d/d3d11/renderer11_utils.h',
'libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp', 'libANGLE/renderer/d3d/d3d11/RenderStateCache.cpp',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment