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