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 ...@@ -27,7 +27,8 @@ SwapChain11::SwapChain11(Renderer11 *renderer, NativeWindow nativeWindow, HANDLE
: SwapChainD3D(nativeWindow, shareHandle, backBufferFormat, depthBufferFormat), : SwapChainD3D(nativeWindow, shareHandle, backBufferFormat, depthBufferFormat),
mRenderer(renderer), mRenderer(renderer),
mColorRenderTarget(this, renderer, false), mColorRenderTarget(this, renderer, false),
mDepthStencilRenderTarget(this, renderer, true) mDepthStencilRenderTarget(this, renderer, true),
mPassThroughResourcesInit(false)
{ {
mSwapChain = NULL; mSwapChain = NULL;
mSwapChain1 = nullptr; mSwapChain1 = nullptr;
...@@ -48,7 +49,6 @@ SwapChain11::SwapChain11(Renderer11 *renderer, NativeWindow nativeWindow, HANDLE ...@@ -48,7 +49,6 @@ SwapChain11::SwapChain11(Renderer11 *renderer, NativeWindow nativeWindow, HANDLE
mHeight = -1; mHeight = -1;
mSwapInterval = 0; mSwapInterval = 0;
mAppCreatedShareHandle = mShareHandle != NULL; mAppCreatedShareHandle = mShareHandle != NULL;
mPassThroughResourcesInit = false;
} }
SwapChain11::~SwapChain11() SwapChain11::~SwapChain11()
...@@ -465,18 +465,16 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap ...@@ -465,18 +465,16 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
d3d11::SetDebugName(mBackBufferRTView, "Back buffer render target"); 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); return resetOffscreenTexture(backbufferWidth, backbufferHeight);
} }
void SwapChain11::initPassThroughResources() void SwapChain11::initPassThroughResources()
{ {
if (mPassThroughResourcesInit)
{
return;
}
TRACE_EVENT0("gpu.angle", "SwapChain11::initPassThroughResources"); TRACE_EVENT0("gpu.angle", "SwapChain11::initPassThroughResources");
ID3D11Device *device = mRenderer->getDevice(); ID3D11Device *device = mRenderer->getDevice();
...@@ -534,6 +532,8 @@ void SwapChain11::initPassThroughResources() ...@@ -534,6 +532,8 @@ void SwapChain11::initPassThroughResources()
result = device->CreatePixelShader(g_PS_PassthroughRGBA2D, sizeof(g_PS_PassthroughRGBA2D), NULL, &mPassThroughPS); result = device->CreatePixelShader(g_PS_PassthroughRGBA2D, sizeof(g_PS_PassthroughRGBA2D), NULL, &mPassThroughPS);
ASSERT(SUCCEEDED(result)); ASSERT(SUCCEEDED(result));
d3d11::SetDebugName(mPassThroughPS, "Swap chain pass through pixel shader"); d3d11::SetDebugName(mPassThroughPS, "Swap chain pass through pixel shader");
mPassThroughResourcesInit = true;
} }
// parameters should be validated/clamped by caller // parameters should be validated/clamped by caller
...@@ -544,6 +544,8 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height) ...@@ -544,6 +544,8 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
return EGL_SUCCESS; return EGL_SUCCESS;
} }
initPassThroughResources();
ID3D11Device *device = mRenderer->getDevice(); ID3D11Device *device = mRenderer->getDevice();
ID3D11DeviceContext *deviceContext = mRenderer->getDeviceContext(); 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