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() ...@@ -2380,6 +2380,8 @@ void Renderer11::releaseDeviceResources()
mDriverConstantBufferPS.reset(); mDriverConstantBufferPS.reset();
mDriverConstantBufferCS.reset(); mDriverConstantBufferCS.reset();
mSyncQuery.reset(); mSyncQuery.reset();
mCachedResolveTexture.reset();
} }
// set notify to true to broadcast a message to all contexts of the device loss // set notify to true to broadcast a message to all contexts of the device loss
...@@ -4024,25 +4026,31 @@ gl::ErrorOrResult<TextureHelper11> Renderer11::resolveMultisampledTexture( ...@@ -4024,25 +4026,31 @@ gl::ErrorOrResult<TextureHelper11> Renderer11::resolveMultisampledTexture(
sourceSRV.get()->GetDesc(&sourceSRVDesc); sourceSRV.get()->GetDesc(&sourceSRVDesc);
ASSERT(sourceSRVDesc.ViewDimension == D3D_SRV_DIMENSION_TEXTURE2DMS); ASSERT(sourceSRVDesc.ViewDimension == D3D_SRV_DIMENSION_TEXTURE2DMS);
D3D11_TEXTURE2D_DESC resolveDesc; if (!mCachedResolveTexture.valid() ||
resolveDesc.Width = renderTarget->getWidth(); mCachedResolveTexture.getExtents().width != renderTarget->getWidth() ||
resolveDesc.Height = renderTarget->getHeight(); mCachedResolveTexture.getExtents().height != renderTarget->getHeight() ||
resolveDesc.MipLevels = 1; mCachedResolveTexture.getFormat() != formatSet.texFormat)
resolveDesc.ArraySize = 1; {
resolveDesc.Format = formatSet.texFormat; D3D11_TEXTURE2D_DESC resolveDesc;
resolveDesc.SampleDesc.Count = 1; resolveDesc.Width = renderTarget->getWidth();
resolveDesc.SampleDesc.Quality = 0; resolveDesc.Height = renderTarget->getHeight();
resolveDesc.Usage = D3D11_USAGE_DEFAULT; resolveDesc.MipLevels = 1;
resolveDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE; resolveDesc.ArraySize = 1;
resolveDesc.CPUAccessFlags = 0; resolveDesc.Format = formatSet.texFormat;
resolveDesc.MiscFlags = 0; resolveDesc.SampleDesc.Count = 1;
resolveDesc.SampleDesc.Quality = 0;
TextureHelper11 resolveTexture; resolveDesc.Usage = D3D11_USAGE_DEFAULT;
ANGLE_TRY(allocateTexture(resolveDesc, formatSet, &resolveTexture)); resolveDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
resolveDesc.CPUAccessFlags = 0;
mDeviceContext->ResolveSubresource(resolveTexture.get(), 0, renderTarget->getTexture().get(), resolveDesc.MiscFlags = 0;
ANGLE_TRY(allocateTexture(resolveDesc, formatSet, &mCachedResolveTexture));
}
mDeviceContext->ResolveSubresource(mCachedResolveTexture.get(), 0,
renderTarget->getTexture().get(),
renderTarget->getSubresourceIndex(), formatSet.texFormat); renderTarget->getSubresourceIndex(), formatSet.texFormat);
return resolveTexture; return mCachedResolveTexture;
} }
bool Renderer11::getLUID(LUID *adapterLuid) const bool Renderer11::getLUID(LUID *adapterLuid) const
......
...@@ -625,6 +625,8 @@ class Renderer11 : public RendererD3D ...@@ -625,6 +625,8 @@ class Renderer11 : public RendererD3D
mutable Optional<bool> mSupportsShareHandles; mutable Optional<bool> mSupportsShareHandles;
ResourceManager11 mResourceManager11; ResourceManager11 mResourceManager11;
TextureHelper11 mCachedResolveTexture;
}; };
} // namespace rx } // 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