Commit 8fc55c8e by Jamie Madill

Lazily load SwapChain11 pass-through resources.

This allows Chromium to avoid initializing a whole bunch of resources and a shader when it collects GPU information. This should speed up startup. BUG=angleproject:1014 Change-Id: Id1e777c6ea86d66ad812540f9d8494744cda64de Reviewed-on: https://chromium-review.googlesource.com/282553Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarBrandon Jones <bajones@chromium.org> Reviewed-by: 's avatarZhenyao Mo <zmo@chromium.org>
parent e62cedd0
......@@ -27,7 +27,8 @@ SwapChain11::SwapChain11(Renderer11 *renderer, NativeWindow nativeWindow, HANDLE
: SwapChainD3D(nativeWindow, shareHandle, backBufferFormat, depthBufferFormat),
mRenderer(renderer),
mColorRenderTarget(this, renderer, false),
mDepthStencilRenderTarget(this, renderer, true)
mDepthStencilRenderTarget(this, renderer, true),
mPassThroughResourcesInit(false)
{
mSwapChain = NULL;
mSwapChain1 = nullptr;
......@@ -48,7 +49,6 @@ SwapChain11::SwapChain11(Renderer11 *renderer, NativeWindow nativeWindow, HANDLE
mHeight = -1;
mSwapInterval = 0;
mAppCreatedShareHandle = mShareHandle != NULL;
mPassThroughResourcesInit = false;
}
SwapChain11::~SwapChain11()
......@@ -465,18 +465,16 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
d3d11::SetDebugName(mBackBufferRTView, "Back buffer render target");
}
// If we are resizing the swap chain, we don't wish to recreate all the static resources
if (!mPassThroughResourcesInit)
{
mPassThroughResourcesInit = true;
initPassThroughResources();
}
return resetOffscreenTexture(backbufferWidth, backbufferHeight);
}
void SwapChain11::initPassThroughResources()
{
if (mPassThroughResourcesInit)
{
return;
}
TRACE_EVENT0("gpu.angle", "SwapChain11::initPassThroughResources");
ID3D11Device *device = mRenderer->getDevice();
......@@ -534,6 +532,8 @@ void SwapChain11::initPassThroughResources()
result = device->CreatePixelShader(g_PS_PassthroughRGBA2D, sizeof(g_PS_PassthroughRGBA2D), NULL, &mPassThroughPS);
ASSERT(SUCCEEDED(result));
d3d11::SetDebugName(mPassThroughPS, "Swap chain pass through pixel shader");
mPassThroughResourcesInit = true;
}
// parameters should be validated/clamped by caller
......@@ -544,6 +544,8 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
return EGL_SUCCESS;
}
initPassThroughResources();
ID3D11Device *device = mRenderer->getDevice();
ID3D11DeviceContext *deviceContext = mRenderer->getDeviceContext();
......
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