Commit 7a5814e2 by Jamie Madill Committed by Commit Bot

D3D11: Use angle::Result error pattern. 3/3

This completes the initial refactor for the D3D11 back-end. Bug: angleproject:2738 Change-Id: I6bc59d6a1a724b3c64d6cd904e6748c2acf8f67d Reviewed-on: https://chromium-review.googlesource.com/1151452 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 038e725a
......@@ -1068,7 +1068,8 @@ angle::Result Buffer11::NativeStorage::resize(const gl::Context *context,
FillBufferDesc(&bufferDesc, mRenderer, mUsage, static_cast<unsigned int>(size));
d3d11::Buffer newBuffer;
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(bufferDesc, &newBuffer));
ANGLE_TRY(
mRenderer->allocateResource(SafeGetImplAs<Context11>(context), bufferDesc, &newBuffer));
newBuffer.setDebugName("Buffer11::NativeStorage");
if (mBuffer.valid() && preserveData)
......@@ -1222,8 +1223,8 @@ angle::Result Buffer11::NativeStorage::getSRVForFormat(const gl::Context *contex
bufferSRVDesc.ViewDimension = D3D11_SRV_DIMENSION_BUFFER;
bufferSRVDesc.Format = srvFormat;
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(bufferSRVDesc, mBuffer.get(),
&mBufferResourceViews[srvFormat]));
ANGLE_TRY(mRenderer->allocateResource(GetImplAs<Context11>(context), bufferSRVDesc,
mBuffer.get(), &mBufferResourceViews[srvFormat]));
*srvOut = &mBufferResourceViews[srvFormat];
return angle::Result::Continue();
......@@ -1342,8 +1343,8 @@ angle::Result Buffer11::EmulatedIndexedStorage::getBuffer(const gl::Context *con
D3D11_SUBRESOURCE_DATA subResourceData = {expandedData.data(), 0, 0};
ANGLE_TRY_HANDLE(context,
mRenderer->allocateResource(bufferDesc, &subResourceData, &mBuffer));
ANGLE_TRY(mRenderer->allocateResource(GetImplAs<Context11>(context), bufferDesc,
&subResourceData, &mBuffer));
mBuffer.setDebugName("Buffer11::EmulatedIndexedStorage");
}
......
......@@ -14,6 +14,7 @@
#include "libANGLE/FramebufferAttachment.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/renderer/d3d/FramebufferD3D.h"
#include "libANGLE/renderer/d3d/d3d11/Context11.h"
#include "libANGLE/renderer/d3d/d3d11/RenderTarget11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
......@@ -155,12 +156,14 @@ angle::Result Clear11::ShaderManager::getShadersAndLayout(const gl::Context *con
const d3d11::GeometryShader **gs,
const d3d11::PixelShader **ps)
{
Context11 *context11 = GetImplAs<Context11>(context);
if (renderer->getRenderer11DeviceCaps().featureLevel <= D3D_FEATURE_LEVEL_9_3)
{
ASSERT(clearType == GL_FLOAT);
ANGLE_TRY_HANDLE(context, mVs9.resolve(renderer));
ANGLE_TRY_HANDLE(context, mPsFloat9.resolve(renderer));
ANGLE_TRY(mVs9.resolve(context11, renderer));
ANGLE_TRY(mPsFloat9.resolve(context11, renderer));
if (!mIl9.valid())
{
......@@ -170,8 +173,7 @@ angle::Result Clear11::ShaderManager::getShadersAndLayout(const gl::Context *con
InputElementArray ilDescArray(ilDesc);
ShaderData vertexShader(g_VS_Clear_FL9);
ANGLE_TRY_HANDLE(context,
renderer->allocateResource(ilDescArray, &vertexShader, &mIl9));
ANGLE_TRY(renderer->allocateResource(context11, ilDescArray, &vertexShader, &mIl9));
}
*vs = &mVs9.getObj();
......@@ -183,15 +185,15 @@ angle::Result Clear11::ShaderManager::getShadersAndLayout(const gl::Context *con
if (!hasLayeredLayout)
{
ANGLE_TRY_HANDLE(context, mVs.resolve(renderer));
ANGLE_TRY(mVs.resolve(context11, renderer));
*vs = &mVs.getObj();
*gs = nullptr;
}
else
{
// For layered framebuffers we have to use the multi-view versions of the VS and GS.
ANGLE_TRY_HANDLE(context, mVsMultiview.resolve(renderer));
ANGLE_TRY_HANDLE(context, mGsMultiview.resolve(renderer));
ANGLE_TRY(mVsMultiview.resolve(context11, renderer));
ANGLE_TRY(mGsMultiview.resolve(context11, renderer));
*vs = &mVsMultiview.getObj();
*gs = &mGsMultiview.getObj();
}
......@@ -200,7 +202,7 @@ angle::Result Clear11::ShaderManager::getShadersAndLayout(const gl::Context *con
if (numRTs == 0)
{
ANGLE_TRY_HANDLE(context, mPsDepth.resolve(renderer));
ANGLE_TRY(mPsDepth.resolve(context11, renderer));
*ps = &mPsDepth.getObj();
return angle::Result::Continue();
}
......@@ -208,15 +210,15 @@ angle::Result Clear11::ShaderManager::getShadersAndLayout(const gl::Context *con
switch (clearType)
{
case GL_FLOAT:
ANGLE_TRY_HANDLE(context, mPsFloat[numRTs - 1].resolve(renderer));
ANGLE_TRY(mPsFloat[numRTs - 1].resolve(context11, renderer));
*ps = &mPsFloat[numRTs - 1].getObj();
break;
case GL_UNSIGNED_INT:
ANGLE_TRY_HANDLE(context, mPsUInt[numRTs - 1].resolve(renderer));
ANGLE_TRY(mPsUInt[numRTs - 1].resolve(context11, renderer));
*ps = &mPsUInt[numRTs - 1].getObj();
break;
case GL_INT:
ANGLE_TRY_HANDLE(context, mPsSInt[numRTs - 1].resolve(renderer));
ANGLE_TRY(mPsSInt[numRTs - 1].resolve(context11, renderer));
*ps = &mPsSInt[numRTs - 1].getObj();
break;
default:
......@@ -275,12 +277,13 @@ angle::Result Clear11::ensureResourcesInitialized(const gl::Context *context)
rsDesc.MultisampleEnable = FALSE;
rsDesc.AntialiasedLineEnable = FALSE;
ANGLE_TRY_HANDLE(context,
mRenderer->allocateResource(rsDesc, &mScissorDisabledRasterizerState));
Context11 *context11 = GetImplAs<Context11>(context);
ANGLE_TRY(mRenderer->allocateResource(context11, rsDesc, &mScissorDisabledRasterizerState));
mScissorDisabledRasterizerState.setDebugName("Clear11 Rasterizer State with scissor disabled");
rsDesc.ScissorEnable = TRUE;
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(rsDesc, &mScissorEnabledRasterizerState));
ANGLE_TRY(mRenderer->allocateResource(context11, rsDesc, &mScissorEnabledRasterizerState));
mScissorEnabledRasterizerState.setDebugName("Clear11 Rasterizer State with scissor enabled");
// Initialize Depthstencil state with defaults
......@@ -343,8 +346,8 @@ angle::Result Clear11::ensureConstantBufferCreated(const gl::Context *context)
initialData.SysMemPitch = g_ConstantBufferSize;
initialData.SysMemSlicePitch = g_ConstantBufferSize;
ANGLE_TRY_HANDLE(context,
mRenderer->allocateResource(bufferDesc, &initialData, &mConstantBuffer));
ANGLE_TRY(mRenderer->allocateResource(GetImplAs<Context11>(context), bufferDesc, &initialData,
&mConstantBuffer));
mConstantBuffer.setDebugName("Clear11 Constant Buffer");
return angle::Result::Continue();
}
......@@ -381,8 +384,8 @@ angle::Result Clear11::ensureVertexBufferCreated(const gl::Context *context)
initialData.SysMemPitch = vbSize;
initialData.SysMemSlicePitch = initialData.SysMemPitch;
ANGLE_TRY_HANDLE(context,
mRenderer->allocateResource(bufferDesc, &initialData, &mVertexBuffer));
ANGLE_TRY(mRenderer->allocateResource(GetImplAs<Context11>(context), bufferDesc, &initialData,
&mVertexBuffer));
mVertexBuffer.setDebugName("Clear11 Vertex Buffer");
return angle::Result::Continue();
}
......
......@@ -241,12 +241,12 @@ std::vector<PathImpl *> Context11::createPaths(GLsizei)
gl::Error Context11::flush(const gl::Context *context)
{
return mRenderer->flush();
return mRenderer->flush(this);
}
gl::Error Context11::finish(const gl::Context *context)
{
return mRenderer->finish();
return mRenderer->finish(this);
}
gl::Error Context11::drawArrays(const gl::Context *context,
......
......@@ -14,6 +14,7 @@
#include "libANGLE/Framebuffer.h"
#include "libANGLE/FramebufferAttachment.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/renderer/d3d/d3d11/Context11.h"
#include "libANGLE/renderer/d3d/d3d11/RenderTarget11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/TextureStorage11.h"
......@@ -477,7 +478,8 @@ angle::Result Image11::copyWithoutConversion(const gl::Context *context,
resolveDesc.MiscFlags = 0;
d3d11::Texture2D resolveTex;
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(resolveDesc, &resolveTex));
ANGLE_TRY(
mRenderer->allocateResource(GetImplAs<Context11>(context), resolveDesc, &resolveTex));
deviceContext->ResolveSubresource(resolveTex.get(), 0, textureHelper.get(),
sourceSubResource, textureHelper.getFormat());
......@@ -533,6 +535,8 @@ angle::Result Image11::createStagingTexture(const gl::Context *context)
// adjust size if needed for compressed textures
d3d11::MakeValidSize(false, dxgiFormat, &width, &height, &lodOffset);
Context11 *context11 = GetImplAs<Context11>(context);
switch (mType)
{
case gl::TextureType::_3D:
......@@ -555,14 +559,13 @@ angle::Result Image11::createStagingTexture(const gl::Context *context)
context, mInternalFormat, mRenderer->getRenderer11DeviceCaps(), width, height,
mDepth, lodOffset + 1, &initialData));
ANGLE_TRY_HANDLE(context,
mRenderer->allocateTexture(desc, formatInfo, initialData.data(),
&mStagingTexture));
ANGLE_TRY(mRenderer->allocateTexture(context11, desc, formatInfo,
initialData.data(), &mStagingTexture));
}
else
{
ANGLE_TRY_HANDLE(context,
mRenderer->allocateTexture(desc, formatInfo, &mStagingTexture));
ANGLE_TRY(
mRenderer->allocateTexture(context11, desc, formatInfo, &mStagingTexture));
}
mStagingTexture.setDebugName("Image11::StagingTexture3D");
......@@ -594,14 +597,13 @@ angle::Result Image11::createStagingTexture(const gl::Context *context)
context, mInternalFormat, mRenderer->getRenderer11DeviceCaps(), width, height,
1, lodOffset + 1, &initialData));
ANGLE_TRY_HANDLE(context,
mRenderer->allocateTexture(desc, formatInfo, initialData.data(),
&mStagingTexture));
ANGLE_TRY(mRenderer->allocateTexture(context11, desc, formatInfo,
initialData.data(), &mStagingTexture));
}
else
{
ANGLE_TRY_HANDLE(context,
mRenderer->allocateTexture(desc, formatInfo, &mStagingTexture));
ANGLE_TRY(
mRenderer->allocateTexture(context11, desc, formatInfo, &mStagingTexture));
}
mStagingTexture.setDebugName("Image11::StagingTexture2D");
......
......@@ -8,6 +8,8 @@
#include "libANGLE/renderer/d3d/d3d11/IndexBuffer11.h"
#include "libANGLE/Context.h"
#include "libANGLE/renderer/d3d/d3d11/Context11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
......@@ -42,7 +44,7 @@ gl::Error IndexBuffer11::initialize(const gl::Context *context,
bufferDesc.MiscFlags = 0;
bufferDesc.StructureByteStride = 0;
ANGLE_TRY(mRenderer->allocateResource(bufferDesc, &mBuffer));
ANGLE_TRY(mRenderer->allocateResource(GetImplAs<Context11>(context), bufferDesc, &mBuffer));
if (dynamic)
{
......
......@@ -301,8 +301,8 @@ angle::Result InputLayoutCache::createInputLayout(
InputElementArray inputElementArray(inputElements.data(), inputElementCount);
ShaderData vertexShaderData(shader11->getFunction(), shader11->getLength());
ANGLE_TRY_HANDLE(
context, renderer->allocateResource(inputElementArray, &vertexShaderData, inputLayoutOut));
ANGLE_TRY(renderer->allocateResource(GetImplAs<Context11>(context), inputElementArray,
&vertexShaderData, inputLayoutOut));
return angle::Result::Continue();
}
......
......@@ -13,15 +13,16 @@
#include "libANGLE/Buffer.h"
#include "libANGLE/Context.h"
#include "libANGLE/Texture.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/renderer/d3d/d3d11/Buffer11.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/Context11.h"
#include "libANGLE/renderer/d3d/d3d11/RenderTarget11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/TextureStorage11.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
#include "libANGLE/renderer/d3d/d3d11/RenderTarget11.h"
#include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
#include "libANGLE/renderer/d3d/d3d11/TextureStorage11.h"
#include "libANGLE/Texture.h"
// Precompiled shaders
#include "libANGLE/renderer/d3d/d3d11/shaders/compiled/buffertotexture11_gs.h"
......@@ -67,7 +68,9 @@ angle::Result PixelTransfer11::loadResources(const gl::Context *context)
rasterDesc.MultisampleEnable = FALSE;
rasterDesc.AntialiasedLineEnable = FALSE;
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(rasterDesc, &mCopyRasterizerState));
Context11 *context11 = GetImplAs<Context11>(context);
ANGLE_TRY(mRenderer->allocateResource(context11, rasterDesc, &mCopyRasterizerState));
D3D11_DEPTH_STENCIL_DESC depthStencilDesc;
depthStencilDesc.DepthEnable = true;
......@@ -85,8 +88,7 @@ angle::Result PixelTransfer11::loadResources(const gl::Context *context)
depthStencilDesc.BackFace.StencilPassOp = D3D11_STENCIL_OP_KEEP;
depthStencilDesc.BackFace.StencilFunc = D3D11_COMPARISON_ALWAYS;
ANGLE_TRY_HANDLE(context,
mRenderer->allocateResource(depthStencilDesc, &mCopyDepthStencilState));
ANGLE_TRY(mRenderer->allocateResource(context11, depthStencilDesc, &mCopyDepthStencilState));
D3D11_BUFFER_DESC constantBufferDesc = { 0 };
constantBufferDesc.ByteWidth = roundUp<UINT>(sizeof(CopyShaderParams), 32u);
......@@ -96,17 +98,16 @@ angle::Result PixelTransfer11::loadResources(const gl::Context *context)
constantBufferDesc.MiscFlags = 0;
constantBufferDesc.StructureByteStride = 0;
ANGLE_TRY_HANDLE(context,
mRenderer->allocateResource(constantBufferDesc, &mParamsConstantBuffer));
ANGLE_TRY(mRenderer->allocateResource(context11, constantBufferDesc, &mParamsConstantBuffer));
mParamsConstantBuffer.setDebugName("PixelTransfer11 constant buffer");
// init shaders
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(ShaderData(g_VS_BufferToTexture),
&mBufferToTextureVS));
ANGLE_TRY(mRenderer->allocateResource(context11, ShaderData(g_VS_BufferToTexture),
&mBufferToTextureVS));
mBufferToTextureVS.setDebugName("BufferToTexture VS");
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(ShaderData(g_GS_BufferToTexture),
&mBufferToTextureGS));
ANGLE_TRY(mRenderer->allocateResource(context11, ShaderData(g_GS_BufferToTexture),
&mBufferToTextureGS));
mBufferToTextureGS.setDebugName("BufferToTexture GS");
ANGLE_TRY(buildShaderMap(context));
......@@ -229,12 +230,14 @@ angle::Result PixelTransfer11::buildShaderMap(const gl::Context *context)
d3d11::PixelShader bufferToTextureInt;
d3d11::PixelShader bufferToTextureUint;
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(ShaderData(g_PS_BufferToTexture_4F),
&bufferToTextureFloat));
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(ShaderData(g_PS_BufferToTexture_4I),
&bufferToTextureInt));
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(ShaderData(g_PS_BufferToTexture_4UI),
&bufferToTextureUint));
Context11 *context11 = GetImplAs<Context11>(context);
ANGLE_TRY(mRenderer->allocateResource(context11, ShaderData(g_PS_BufferToTexture_4F),
&bufferToTextureFloat));
ANGLE_TRY(mRenderer->allocateResource(context11, ShaderData(g_PS_BufferToTexture_4I),
&bufferToTextureInt));
ANGLE_TRY(mRenderer->allocateResource(context11, ShaderData(g_PS_BufferToTexture_4UI),
&bufferToTextureUint));
bufferToTextureFloat.setDebugName("BufferToTexture RGBA ps");
bufferToTextureInt.setDebugName("BufferToTexture RGBA-I ps");
......
......@@ -165,7 +165,7 @@ angle::Result Query11::resume(Context11 *context11)
queryDesc.Query = d3dQueryType;
queryDesc.MiscFlags = 0;
ANGLE_TRY_HANDLE(context11, mRenderer->allocateResource(queryDesc, &mActiveQuery->query));
ANGLE_TRY(mRenderer->allocateResource(context11, queryDesc, &mActiveQuery->query));
// If we are doing time elapsed we also need a query to actually query the timestamp
if (type == gl::QueryType::TimeElapsed)
......@@ -174,10 +174,8 @@ angle::Result Query11::resume(Context11 *context11)
desc.Query = D3D11_QUERY_TIMESTAMP;
desc.MiscFlags = 0;
ANGLE_TRY_HANDLE(context11,
mRenderer->allocateResource(desc, &mActiveQuery->beginTimestamp));
ANGLE_TRY_HANDLE(context11,
mRenderer->allocateResource(desc, &mActiveQuery->endTimestamp));
ANGLE_TRY(mRenderer->allocateResource(context11, desc, &mActiveQuery->beginTimestamp));
ANGLE_TRY(mRenderer->allocateResource(context11, desc, &mActiveQuery->endTimestamp));
}
ID3D11DeviceContext *context = mRenderer->getDeviceContext();
......
......@@ -15,6 +15,7 @@
#include "libANGLE/Context.h"
#include "libANGLE/Framebuffer.h"
#include "libANGLE/FramebufferAttachment.h"
#include "libANGLE/renderer/d3d/d3d11/Context11.h"
#include "libANGLE/renderer/d3d/d3d11/Framebuffer11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
......@@ -115,7 +116,7 @@ angle::Result RenderStateCache::getBlendState(const gl::Context *context,
}
d3d11::BlendState d3dBlendState;
ANGLE_TRY_HANDLE(context, renderer->allocateResource(blendDesc, &d3dBlendState));
ANGLE_TRY(renderer->allocateResource(GetImplAs<Context11>(context), blendDesc, &d3dBlendState));
const auto &iter = mBlendStateCache.Put(key, std::move(d3dBlendState));
*outBlendState = &iter->second;
......@@ -174,7 +175,8 @@ angle::Result RenderStateCache::getRasterizerState(const gl::Context *context,
}
d3d11::RasterizerState dx11RasterizerState;
ANGLE_TRY_HANDLE(context, renderer->allocateResource(rasterDesc, &dx11RasterizerState));
ANGLE_TRY(renderer->allocateResource(GetImplAs<Context11>(context), rasterDesc,
&dx11RasterizerState));
*outRasterizerState = dx11RasterizerState.get();
mRasterizerStateCache.Put(key, std::move(dx11RasterizerState));
......@@ -212,7 +214,8 @@ angle::Result RenderStateCache::getDepthStencilState(const gl::Context *context,
dsDesc.BackFace.StencilFunc = ConvertComparison(glState.stencilBackFunc);
d3d11::DepthStencilState dx11DepthStencilState;
ANGLE_TRY_HANDLE(context, renderer->allocateResource(dsDesc, &dx11DepthStencilState));
ANGLE_TRY(
renderer->allocateResource(GetImplAs<Context11>(context), dsDesc, &dx11DepthStencilState));
const auto &iter = mDepthStencilStateCache.Put(glState, std::move(dx11DepthStencilState));
*outDSState = &iter->second;
......@@ -267,7 +270,8 @@ angle::Result RenderStateCache::getSamplerState(const gl::Context *context,
}
d3d11::SamplerState dx11SamplerState;
ANGLE_TRY_HANDLE(context, renderer->allocateResource(samplerDesc, &dx11SamplerState));
ANGLE_TRY(
renderer->allocateResource(GetImplAs<Context11>(context), samplerDesc, &dx11SamplerState));
*outSamplerState = dx11SamplerState.get();
mSamplerStateCache.Put(samplerState, std::move(dx11SamplerState));
......
......@@ -9,6 +9,8 @@
#include "libANGLE/renderer/d3d/d3d11/RenderTarget11.h"
#include "libANGLE/Context.h"
#include "libANGLE/renderer/d3d/d3d11/Context11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/SwapChain11.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
......@@ -280,12 +282,14 @@ const d3d11::DepthStencilView &TextureRenderTarget11::getDepthStencilView() cons
return mDepthStencil;
}
const d3d11::SharedSRV &TextureRenderTarget11::getShaderResourceView() const
const d3d11::SharedSRV &TextureRenderTarget11::getShaderResourceView(
const gl::Context *context) const
{
return mShaderResource;
}
const d3d11::SharedSRV &TextureRenderTarget11::getBlitShaderResourceView() const
const d3d11::SharedSRV &TextureRenderTarget11::getBlitShaderResourceView(
const gl::Context *context) const
{
return mBlitShaderResource;
}
......@@ -376,16 +380,18 @@ const d3d11::DepthStencilView &SurfaceRenderTarget11::getDepthStencilView() cons
return mSwapChain->getDepthStencil();
}
const d3d11::SharedSRV &SurfaceRenderTarget11::getShaderResourceView() const
const d3d11::SharedSRV &SurfaceRenderTarget11::getShaderResourceView(
const gl::Context *context) const
{
return (mDepth ? mSwapChain->getDepthStencilShaderResource()
: mSwapChain->getRenderTargetShaderResource());
: mSwapChain->getRenderTargetShaderResource(GetImplAs<Context11>(context)));
}
const d3d11::SharedSRV &SurfaceRenderTarget11::getBlitShaderResourceView() const
const d3d11::SharedSRV &SurfaceRenderTarget11::getBlitShaderResourceView(
const gl::Context *context) const
{
// The SurfaceRenderTargetView format should always be such that the normal SRV works for blits.
return getShaderResourceView();
return getShaderResourceView(context);
}
unsigned int SurfaceRenderTarget11::getSubresourceIndex() const
......
......@@ -29,8 +29,8 @@ class RenderTarget11 : public RenderTargetD3D
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 const d3d11::SharedSRV &getShaderResourceView(const gl::Context *context) const = 0;
virtual const d3d11::SharedSRV &getBlitShaderResourceView(const gl::Context *context) const = 0;
virtual unsigned int getSubresourceIndex() const = 0;
......@@ -74,8 +74,8 @@ class TextureRenderTarget11 : public RenderTarget11
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;
const d3d11::SharedSRV &getShaderResourceView(const gl::Context *context) const override;
const d3d11::SharedSRV &getBlitShaderResourceView(const gl::Context *context) const override;
unsigned int getSubresourceIndex() const override;
......@@ -112,8 +112,8 @@ class SurfaceRenderTarget11 : public RenderTarget11
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;
const d3d11::SharedSRV &getShaderResourceView(const gl::Context *context) const override;
const d3d11::SharedSRV &getBlitShaderResourceView(const gl::Context *context) const override;
unsigned int getSubresourceIndex() const override;
......
......@@ -124,8 +124,8 @@ class Renderer11 : public RendererD3D
ContextImpl *createContext(const gl::ContextState &state) override;
gl::Error flush();
gl::Error finish();
gl::Error flush(Context11 *context11);
gl::Error finish(Context11 *context11);
bool isValidNativeWindow(EGLNativeWindowType window) const override;
NativeWindowD3D *createNativeWindow(EGLNativeWindowType window,
......@@ -415,40 +415,48 @@ class Renderer11 : public RendererD3D
TextureHelper11 *textureOut);
template <typename DescT, typename ResourceT>
gl::Error allocateResource(const DescT &desc, ResourceT *resourceOut)
angle::Result allocateResource(d3d::Context *context, const DescT &desc, ResourceT *resourceOut)
{
return mResourceManager11.allocate(this, &desc, nullptr, resourceOut);
return mResourceManager11.allocate(context, this, &desc, nullptr, resourceOut);
}
template <typename DescT, typename InitDataT, typename ResourceT>
gl::Error allocateResource(const DescT &desc, InitDataT *initData, ResourceT *resourceOut)
angle::Result allocateResource(d3d::Context *context,
const DescT &desc,
InitDataT *initData,
ResourceT *resourceOut)
{
return mResourceManager11.allocate(this, &desc, initData, resourceOut);
return mResourceManager11.allocate(context, this, &desc, initData, resourceOut);
}
template <typename InitDataT, typename ResourceT>
gl::Error allocateResourceNoDesc(InitDataT *initData, ResourceT *resourceOut)
angle::Result allocateResourceNoDesc(d3d::Context *context,
InitDataT *initData,
ResourceT *resourceOut)
{
return mResourceManager11.allocate(this, nullptr, initData, resourceOut);
return mResourceManager11.allocate(context, this, nullptr, initData, resourceOut);
}
template <typename DescT>
gl::Error allocateTexture(const DescT &desc,
const d3d11::Format &format,
TextureHelper11 *textureOut)
angle::Result allocateTexture(d3d::Context *context,
const DescT &desc,
const d3d11::Format &format,
TextureHelper11 *textureOut)
{
return allocateTexture(desc, format, nullptr, textureOut);
return allocateTexture(context, desc, format, nullptr, textureOut);
}
gl::Error allocateTexture(const D3D11_TEXTURE2D_DESC &desc,
const d3d11::Format &format,
const D3D11_SUBRESOURCE_DATA *initData,
TextureHelper11 *textureOut);
gl::Error allocateTexture(const D3D11_TEXTURE3D_DESC &desc,
const d3d11::Format &format,
const D3D11_SUBRESOURCE_DATA *initData,
TextureHelper11 *textureOut);
angle::Result allocateTexture(d3d::Context *context,
const D3D11_TEXTURE2D_DESC &desc,
const d3d11::Format &format,
const D3D11_SUBRESOURCE_DATA *initData,
TextureHelper11 *textureOut);
angle::Result allocateTexture(d3d::Context *context,
const D3D11_TEXTURE3D_DESC &desc,
const d3d11::Format &format,
const D3D11_SUBRESOURCE_DATA *initData,
TextureHelper11 *textureOut);
gl::Error clearRenderTarget(const gl::Context *context,
RenderTargetD3D *renderTarget,
......
......@@ -260,18 +260,22 @@ DXGI_FORMAT GetTypedDepthStencilFormat(DXGI_FORMAT dxgiFormat)
}
template <typename DescT, typename ResourceT>
gl::Error ClearResource(Renderer11 *renderer, const DescT *desc, ResourceT *texture)
angle::Result ClearResource(d3d::Context *context,
Renderer11 *renderer,
const DescT *desc,
ResourceT *texture)
{
// No-op.
return gl::NoError();
return angle::Result::Continue();
}
template <>
gl::Error ClearResource(Renderer11 *renderer,
const D3D11_TEXTURE2D_DESC *desc,
ID3D11Texture2D *texture)
angle::Result ClearResource(d3d::Context *context,
Renderer11 *renderer,
const D3D11_TEXTURE2D_DESC *desc,
ID3D11Texture2D *texture)
{
ID3D11DeviceContext *context = renderer->getDeviceContext();
ID3D11DeviceContext *deviceContext = renderer->getDeviceContext();
if ((desc->BindFlags & D3D11_BIND_DEPTH_STENCIL) != 0)
{
......@@ -297,46 +301,48 @@ gl::Error ClearResource(Renderer11 *renderer,
}
d3d11::DepthStencilView dsv;
ANGLE_TRY(renderer->allocateResource(dsvDesc, texture, &dsv));
ANGLE_TRY(renderer->allocateResource(context, dsvDesc, texture, &dsv));
context->ClearDepthStencilView(dsv.get(), clearFlags, kDebugDepthInitValue,
kDebugStencilInitValue);
deviceContext->ClearDepthStencilView(dsv.get(), clearFlags, kDebugDepthInitValue,
kDebugStencilInitValue);
}
}
else
{
ASSERT((desc->BindFlags & D3D11_BIND_RENDER_TARGET) != 0);
d3d11::RenderTargetView rtv;
ANGLE_TRY(renderer->allocateResourceNoDesc(texture, &rtv));
ANGLE_TRY(renderer->allocateResourceNoDesc(context, texture, &rtv));
context->ClearRenderTargetView(rtv.get(), kDebugColorInitClearValue);
deviceContext->ClearRenderTargetView(rtv.get(), kDebugColorInitClearValue);
}
return gl::NoError();
return angle::Result::Continue();
}
template <>
gl::Error ClearResource(Renderer11 *renderer,
const D3D11_TEXTURE3D_DESC *desc,
ID3D11Texture3D *texture)
angle::Result ClearResource(d3d::Context *context,
Renderer11 *renderer,
const D3D11_TEXTURE3D_DESC *desc,
ID3D11Texture3D *texture)
{
ID3D11DeviceContext *context = renderer->getDeviceContext();
ID3D11DeviceContext *deviceContext = renderer->getDeviceContext();
ASSERT((desc->BindFlags & D3D11_BIND_DEPTH_STENCIL) == 0);
ASSERT((desc->BindFlags & D3D11_BIND_RENDER_TARGET) != 0);
d3d11::RenderTargetView rtv;
ANGLE_TRY(renderer->allocateResourceNoDesc(texture, &rtv));
ANGLE_TRY(renderer->allocateResourceNoDesc(context, texture, &rtv));
context->ClearRenderTargetView(rtv.get(), kDebugColorInitClearValue);
return gl::NoError();
deviceContext->ClearRenderTargetView(rtv.get(), kDebugColorInitClearValue);
return angle::Result::Continue();
}
#define ANGLE_RESOURCE_STRINGIFY_OP(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) #RESTYPE,
#define ANGLE_RESOURCE_STRINGIFY_OP(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
"Error allocating " #RESTYPE,
constexpr std::array<const char *, NumResourceTypes> kResourceTypeNames = {
constexpr std::array<const char *, NumResourceTypes> kResourceTypeErrors = {
{ANGLE_RESOURCE_TYPE_OP(Stringify, ANGLE_RESOURCE_STRINGIFY_OP)}};
static_assert(kResourceTypeNames[NumResourceTypes - 1] != nullptr,
static_assert(kResourceTypeErrors[NumResourceTypes - 1] != nullptr,
"All members must be initialized.");
} // anonymous namespace
......@@ -363,10 +369,11 @@ ResourceManager11::~ResourceManager11()
}
template <typename T>
gl::Error ResourceManager11::allocate(Renderer11 *renderer,
const GetDescFromD3D11<T> *desc,
GetInitDataFromD3D11<T> *initData,
Resource11<T> *resourceOut)
angle::Result ResourceManager11::allocate(d3d::Context *context,
Renderer11 *renderer,
const GetDescFromD3D11<T> *desc,
GetInitDataFromD3D11<T> *initData,
Resource11<T> *resourceOut)
{
ID3D11Device *device = renderer->getDevice();
T *resource = nullptr;
......@@ -378,27 +385,17 @@ gl::Error ResourceManager11::allocate(Renderer11 *renderer,
}
HRESULT hr = CreateResource(device, desc, shadowInitData, &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);
}
ANGLE_TRY_HR(context, hr, kResourceTypeErrors[ResourceTypeIndex<T>()]);
if (!shadowInitData && mInitializeAllocations)
{
ANGLE_TRY(ClearResource(renderer, desc, resource));
ANGLE_TRY(ClearResource(context, renderer, desc, resource));
}
ASSERT(resource);
incrResource(GetResourceTypeFromD3D11<T>(), ComputeMemoryUsage(desc));
*resourceOut = std::move(Resource11<T>(resource, this));
return gl::NoError();
return angle::Result::Continue();
}
void ResourceManager11::incrResource(ResourceType resourceType, uint64_t memorySize)
......@@ -530,11 +527,11 @@ void ResourceManager11::setAllocationsInitialized(bool initialize)
mInitializeAllocations = initialize;
}
#define ANGLE_INSTANTIATE_OP(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
#define ANGLE_INSTANTIATE_OP(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
\
template \
gl::Error \
ResourceManager11::allocate(Renderer11 *, const DESCTYPE *, INITDATATYPE *, \
angle::Result \
ResourceManager11::allocate(d3d::Context *, Renderer11 *, const DESCTYPE *, INITDATATYPE *, \
Resource11<D3D11TYPE> *);
ANGLE_RESOURCE_TYPE_OP(Instantitate, ANGLE_INSTANTIATE_OP)
......
......@@ -32,6 +32,11 @@ HRESULT SetDebugName(angle::ComPtr<T> &resource, const char *name)
}
} // namespace d3d11
namespace d3d
{
class Context;
} // namespace d3d
class Renderer11;
class ResourceManager11;
template <typename T>
......@@ -294,19 +299,21 @@ class ResourceManager11 final : angle::NonCopyable
~ResourceManager11();
template <typename T>
gl::Error allocate(Renderer11 *renderer,
const GetDescFromD3D11<T> *desc,
GetInitDataFromD3D11<T> *initData,
Resource11<T> *resourceOut);
angle::Result allocate(d3d::Context *context,
Renderer11 *renderer,
const GetDescFromD3D11<T> *desc,
GetInitDataFromD3D11<T> *initData,
Resource11<T> *resourceOut);
template <typename T>
gl::Error allocate(Renderer11 *renderer,
const GetDescFromD3D11<T> *desc,
GetInitDataFromD3D11<T> *initData,
SharedResource11<T> *sharedRes)
angle::Result allocate(d3d::Context *context,
Renderer11 *renderer,
const GetDescFromD3D11<T> *desc,
GetInitDataFromD3D11<T> *initData,
SharedResource11<T> *sharedRes)
{
Resource11<T> res;
ANGLE_TRY(allocate(renderer, desc, initData, &res));
ANGLE_TRY(allocate(context, renderer, desc, initData, &res));
*sharedRes = std::move(res);
return angle::Result::Continue();
}
......
......@@ -10,6 +10,7 @@
#include "libANGLE/renderer/d3d/d3d11/ShaderExecutable11.h"
#include "libANGLE/Context.h"
#include "libANGLE/renderer/d3d/d3d11/Context11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
namespace rx
......@@ -113,7 +114,8 @@ angle::Result UniformStorage11::getConstantBuffer(const gl::Context *context,
desc.Usage = D3D11_USAGE_DEFAULT;
desc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
ANGLE_TRY_HANDLE(context, renderer->allocateResource(desc, &mConstantBuffer));
ANGLE_TRY(
renderer->allocateResource(GetImplAs<Context11>(context), desc, &mConstantBuffer));
}
*bufferOut = &mConstantBuffer;
......
......@@ -2791,6 +2791,8 @@ angle::Result StateManager11::applyVertexBuffers(const gl::Context *context,
queueVertexBufferChange(bufferIndex, buffer, vertexStride, vertexOffset);
}
Context11 *context11 = GetImplAs<Context11>(context);
// Instanced PointSprite emulation requires two additional ID3D11Buffers. A vertex buffer needs
// to be created and added to the list of current buffers, strides and offsets collections.
// This buffer contains the vertices for a single PointSprite quad.
......@@ -2823,9 +2825,8 @@ angle::Result StateManager11::applyVertexBuffers(const gl::Context *context,
vertexBufferDesc.MiscFlags = 0;
vertexBufferDesc.StructureByteStride = 0;
ANGLE_TRY_HANDLE(context,
mRenderer->allocateResource(vertexBufferDesc, &vertexBufferData,
&mPointSpriteVertexBuffer));
ANGLE_TRY(mRenderer->allocateResource(context11, vertexBufferDesc, &vertexBufferData,
&mPointSpriteVertexBuffer));
}
// Set the stride to 0 if GL_POINTS mode is not being used to instruct the driver to avoid
......@@ -2849,8 +2850,8 @@ angle::Result StateManager11::applyVertexBuffers(const gl::Context *context,
indexBufferDesc.MiscFlags = 0;
indexBufferDesc.StructureByteStride = 0;
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(indexBufferDesc, &indexBufferData,
&mPointSpriteIndexBuffer));
ANGLE_TRY(mRenderer->allocateResource(context11, indexBufferDesc, &indexBufferData,
&mPointSpriteIndexBuffer));
}
if (instancedPointSpritesActive)
......@@ -3100,8 +3101,8 @@ angle::Result StateManager11::applyDriverUniformsForShader(const gl::Context *co
D3D11_BUFFER_DESC constantBufferDescription = {0};
d3d11::InitConstantBufferDesc(&constantBufferDescription, requiredSize);
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(constantBufferDescription,
&shaderDriverConstantBuffer));
ANGLE_TRY(mRenderer->allocateResource(
GetImplAs<Context11>(context), constantBufferDescription, &shaderDriverConstantBuffer));
ID3D11Buffer *driverConstants = shaderDriverConstantBuffer.get();
switch (shaderType)
......@@ -3196,9 +3197,9 @@ angle::Result StateManager11::applyComputeUniforms(const gl::Context *context,
D3D11_BUFFER_DESC constantBufferDescription = {0};
d3d11::InitConstantBufferDesc(&constantBufferDescription, requiredSize);
ANGLE_TRY_HANDLE(context, mRenderer->allocateResource(
constantBufferDescription,
&mShaderDriverConstantBuffers[gl::ShaderType::Compute]));
ANGLE_TRY(
mRenderer->allocateResource(GetImplAs<Context11>(context), constantBufferDescription,
&mShaderDriverConstantBuffers[gl::ShaderType::Compute]));
ID3D11Buffer *buffer = mShaderDriverConstantBuffers[gl::ShaderType::Compute].get();
deviceContext->CSSetConstantBuffers(d3d11::RESERVED_CONSTANT_BUFFER_SLOT_DRIVER, 1,
&buffer);
......
......@@ -48,7 +48,7 @@ class SwapChain11 final : public SwapChainD3D
const TextureHelper11 &getOffscreenTexture();
const d3d11::RenderTargetView &getRenderTarget();
const d3d11::SharedSRV &getRenderTargetShaderResource();
const d3d11::SharedSRV &getRenderTargetShaderResource(d3d::Context *context);
const TextureHelper11 &getDepthStencilTexture();
const d3d11::DepthStencilView &getDepthStencil();
......@@ -63,7 +63,7 @@ class SwapChain11 final : public SwapChainD3D
private:
void release();
void initPassThroughResources();
angle::Result initPassThroughResources(DisplayD3D *displayD3D);
void releaseOffscreenColorBuffer();
void releaseOffscreenDepthBuffer();
......@@ -71,7 +71,9 @@ class SwapChain11 final : public SwapChainD3D
EGLint resetOffscreenColorBuffer(DisplayD3D *displayD3D,
int backbufferWidth,
int backbufferHeight);
EGLint resetOffscreenDepthBuffer(int backbufferWidth, int backbufferHeight);
EGLint resetOffscreenDepthBuffer(DisplayD3D *displayD3D,
int backbufferWidth,
int backbufferHeight);
DXGI_FORMAT getSwapChainNativeFormat() const;
......
......@@ -9,11 +9,13 @@
#include "libANGLE/renderer/d3d/d3d11/VertexBuffer11.h"
#include "libANGLE/Buffer.h"
#include "libANGLE/Context.h"
#include "libANGLE/VertexAttribute.h"
#include "libANGLE/formatutils.h"
#include "libANGLE/renderer/d3d/d3d11/Buffer11.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/Context11.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
namespace rx
......@@ -50,7 +52,7 @@ gl::Error VertexBuffer11::initialize(const gl::Context *context,
bufferDesc.MiscFlags = 0;
bufferDesc.StructureByteStride = 0;
ANGLE_TRY(mRenderer->allocateResource(bufferDesc, &mBuffer));
ANGLE_TRY(mRenderer->allocateResource(GetImplAs<Context11>(context), bufferDesc, &mBuffer));
if (dynamicUsage)
{
......
......@@ -2170,45 +2170,54 @@ HRESULT SetDebugName(ID3D11DeviceChild *resource, const char *name)
// allocateResource is only compatible with Clang and MSVS, which support calling a
// method on a forward declared class in a template.
template <ResourceType ResourceT>
gl::Error LazyResource<ResourceT>::resolveImpl(Renderer11 *renderer,
const GetDescType<ResourceT> &desc,
GetInitDataType<ResourceT> *initData,
const char *name)
angle::Result LazyResource<ResourceT>::resolveImpl(d3d::Context *context,
Renderer11 *renderer,
const GetDescType<ResourceT> &desc,
GetInitDataType<ResourceT> *initData,
const char *name)
{
if (!mResource.valid())
{
ANGLE_TRY(renderer->allocateResource(desc, initData, &mResource));
ANGLE_TRY(renderer->allocateResource(context, desc, initData, &mResource));
mResource.setDebugName(name);
}
return angle::Result::Continue();
}
template gl::Error LazyResource<ResourceType::BlendState>::resolveImpl(Renderer11 *renderer,
const D3D11_BLEND_DESC &desc,
void *initData,
const char *name);
template gl::Error LazyResource<ResourceType::ComputeShader>::resolveImpl(Renderer11 *renderer,
const ShaderData &desc,
void *initData,
const char *name);
template gl::Error LazyResource<ResourceType::GeometryShader>::resolveImpl(
template angle::Result LazyResource<ResourceType::BlendState>::resolveImpl(
d3d::Context *context,
Renderer11 *renderer,
const D3D11_BLEND_DESC &desc,
void *initData,
const char *name);
template angle::Result LazyResource<ResourceType::ComputeShader>::resolveImpl(
d3d::Context *context,
Renderer11 *renderer,
const ShaderData &desc,
void *initData,
const char *name);
template angle::Result LazyResource<ResourceType::GeometryShader>::resolveImpl(
d3d::Context *context,
Renderer11 *renderer,
const ShaderData &desc,
const std::vector<D3D11_SO_DECLARATION_ENTRY> *initData,
const char *name);
template gl::Error LazyResource<ResourceType::InputLayout>::resolveImpl(
template angle::Result LazyResource<ResourceType::InputLayout>::resolveImpl(
d3d::Context *context,
Renderer11 *renderer,
const InputElementArray &desc,
const ShaderData *initData,
const char *name);
template gl::Error LazyResource<ResourceType::PixelShader>::resolveImpl(Renderer11 *renderer,
const ShaderData &desc,
void *initData,
const char *name);
template gl::Error LazyResource<ResourceType::VertexShader>::resolveImpl(Renderer11 *renderer,
const ShaderData &desc,
void *initData,
const char *name);
template angle::Result LazyResource<ResourceType::PixelShader>::resolveImpl(d3d::Context *context,
Renderer11 *renderer,
const ShaderData &desc,
void *initData,
const char *name);
template angle::Result LazyResource<ResourceType::VertexShader>::resolveImpl(d3d::Context *context,
Renderer11 *renderer,
const ShaderData &desc,
void *initData,
const char *name);
LazyInputLayout::LazyInputLayout(const D3D11_INPUT_ELEMENT_DESC *inputDesc,
size_t inputDescLen,
......@@ -2223,9 +2232,9 @@ LazyInputLayout::~LazyInputLayout()
{
}
gl::Error LazyInputLayout::resolve(Renderer11 *renderer)
angle::Result LazyInputLayout::resolve(d3d::Context *context, Renderer11 *renderer)
{
return resolveImpl(renderer, mInputDesc, &mByteCode, mDebugName);
return resolveImpl(context, renderer, mInputDesc, &mByteCode, mDebugName);
}
LazyBlendState::LazyBlendState(const D3D11_BLEND_DESC &desc, const char *debugName)
......@@ -2233,9 +2242,9 @@ LazyBlendState::LazyBlendState(const D3D11_BLEND_DESC &desc, const char *debugNa
{
}
gl::Error LazyBlendState::resolve(Renderer11 *renderer)
angle::Result LazyBlendState::resolve(d3d::Context *context, Renderer11 *renderer)
{
return resolveImpl(renderer, mDesc, nullptr, mDebugName);
return resolveImpl(context, renderer, mDesc, nullptr, mDebugName);
}
angle::WorkaroundsD3D GenerateWorkarounds(const Renderer11DeviceCaps &deviceCaps,
......
......@@ -198,7 +198,7 @@ class LazyResource : angle::NonCopyable
constexpr LazyResource() : mResource() {}
virtual ~LazyResource() {}
virtual gl::Error resolve(Renderer11 *renderer) = 0;
virtual angle::Result resolve(d3d::Context *context, Renderer11 *renderer) = 0;
void reset() { mResource.reset(); }
GetD3D11Type<ResourceT> *get() const
{
......@@ -212,10 +212,11 @@ class LazyResource : angle::NonCopyable
LazyResource(LazyResource &&other) : mResource(std::move(other.mResource)) {}
// Specialized in the cpp file to avoid MSVS/Clang specific code.
gl::Error resolveImpl(Renderer11 *renderer,
const GetDescType<ResourceT> &desc,
GetInitDataType<ResourceT> *initData,
const char *name);
angle::Result resolveImpl(d3d::Context *context,
Renderer11 *renderer,
const GetDescType<ResourceT> &desc,
GetInitDataType<ResourceT> *initData,
const char *name);
Resource11<GetD3D11Type<ResourceT>> mResource;
};
......@@ -237,9 +238,9 @@ class LazyShader final : public LazyResource<GetResourceTypeFromD3D11<D3D11Shade
{
}
gl::Error resolve(Renderer11 *renderer) override
angle::Result resolve(d3d::Context *context, Renderer11 *renderer) override
{
return this->resolveImpl(renderer, mByteCode, nullptr, mName);
return this->resolveImpl(context, renderer, mByteCode, nullptr, mName);
}
private:
......@@ -257,7 +258,7 @@ class LazyInputLayout final : public LazyResource<ResourceType::InputLayout>
const char *debugName);
~LazyInputLayout() override;
gl::Error resolve(Renderer11 *renderer) override;
angle::Result resolve(d3d::Context *context, Renderer11 *renderer) override;
private:
InputElementArray mInputDesc;
......@@ -270,7 +271,7 @@ class LazyBlendState final : public LazyResource<ResourceType::BlendState>
public:
LazyBlendState(const D3D11_BLEND_DESC &desc, const char *debugName);
gl::Error resolve(Renderer11 *renderer) override;
angle::Result resolve(d3d::Context *context, Renderer11 *renderer) override;
private:
D3D11_BLEND_DESC mDesc;
......
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