Commit 3667dbd6 by Jamie Madill Committed by Commit Bot

D3D11: Cache multisample resolve texture.

This was showing up in profiles of the MotionMark benchmark, possibly due to re-creating the canvas many times. BUG=angleproject:1155 Change-Id: Id857b89770b846881fb381f7c3ab70c07b924271 Reviewed-on: https://chromium-review.googlesource.com/655478Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 3ed60424
......@@ -2380,6 +2380,8 @@ void Renderer11::releaseDeviceResources()
mDriverConstantBufferPS.reset();
mDriverConstantBufferCS.reset();
mSyncQuery.reset();
mCachedResolveTexture.reset();
}
// set notify to true to broadcast a message to all contexts of the device loss
......@@ -4024,25 +4026,31 @@ gl::ErrorOrResult<TextureHelper11> Renderer11::resolveMultisampledTexture(
sourceSRV.get()->GetDesc(&sourceSRVDesc);
ASSERT(sourceSRVDesc.ViewDimension == D3D_SRV_DIMENSION_TEXTURE2DMS);
D3D11_TEXTURE2D_DESC resolveDesc;
resolveDesc.Width = renderTarget->getWidth();
resolveDesc.Height = renderTarget->getHeight();
resolveDesc.MipLevels = 1;
resolveDesc.ArraySize = 1;
resolveDesc.Format = formatSet.texFormat;
resolveDesc.SampleDesc.Count = 1;
resolveDesc.SampleDesc.Quality = 0;
resolveDesc.Usage = D3D11_USAGE_DEFAULT;
resolveDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
resolveDesc.CPUAccessFlags = 0;
resolveDesc.MiscFlags = 0;
TextureHelper11 resolveTexture;
ANGLE_TRY(allocateTexture(resolveDesc, formatSet, &resolveTexture));
mDeviceContext->ResolveSubresource(resolveTexture.get(), 0, renderTarget->getTexture().get(),
if (!mCachedResolveTexture.valid() ||
mCachedResolveTexture.getExtents().width != renderTarget->getWidth() ||
mCachedResolveTexture.getExtents().height != renderTarget->getHeight() ||
mCachedResolveTexture.getFormat() != formatSet.texFormat)
{
D3D11_TEXTURE2D_DESC resolveDesc;
resolveDesc.Width = renderTarget->getWidth();
resolveDesc.Height = renderTarget->getHeight();
resolveDesc.MipLevels = 1;
resolveDesc.ArraySize = 1;
resolveDesc.Format = formatSet.texFormat;
resolveDesc.SampleDesc.Count = 1;
resolveDesc.SampleDesc.Quality = 0;
resolveDesc.Usage = D3D11_USAGE_DEFAULT;
resolveDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
resolveDesc.CPUAccessFlags = 0;
resolveDesc.MiscFlags = 0;
ANGLE_TRY(allocateTexture(resolveDesc, formatSet, &mCachedResolveTexture));
}
mDeviceContext->ResolveSubresource(mCachedResolveTexture.get(), 0,
renderTarget->getTexture().get(),
renderTarget->getSubresourceIndex(), formatSet.texFormat);
return resolveTexture;
return mCachedResolveTexture;
}
bool Renderer11::getLUID(LUID *adapterLuid) const
......
......@@ -625,6 +625,8 @@ class Renderer11 : public RendererD3D
mutable Optional<bool> mSupportsShareHandles;
ResourceManager11 mResourceManager11;
TextureHelper11 mCachedResolveTexture;
};
} // namespace rx
......
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