Commit f17959aa by Jamie Madill

D3D11: Record more explicit error codes in Renderer init.

Our data shows the most common D3D11CreateDevice failure as being 'other error'. Explicitly enumerate more error codes so we can figure out which value we're getting. BUG=47701 Change-Id: Ibcda5e8ff1bb0368b1bfe3c8e7e3ffbb404771ce Reviewed-on: https://chromium-review.googlesource.com/265939Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 5ed74cfd
......@@ -161,6 +161,11 @@ void CalculateConstantBufferParams(GLintptr offset, GLsizeiptr size, UINT *outFi
// https://msdn.microsoft.com/en-us/library/windows/desktop/hh404649%28v=vs.85%29.aspx
}
egl::Error GenerateD3D11CreateDeviceErr(HRESULT errorCode)
{
return egl::Error(EGL_NOT_INITIALIZED, errorCode, "Could not create D3D11 device.");
}
}
Renderer11::Renderer11(egl::Display *display)
......@@ -344,20 +349,36 @@ egl::Error Renderer11::initialize()
&mFeatureLevel,
&mDeviceContext);
if (result == E_INVALIDARG)
{
// Cleanup done by destructor through glDestroyRenderer
return egl::Error(EGL_NOT_INITIALIZED,
D3D11_INIT_CREATEDEVICE_INVALIDARG,
"Could not create D3D11 device.");
}
if (!mDevice || FAILED(result))
{
// Cleanup done by destructor through glDestroyRenderer
return egl::Error(EGL_NOT_INITIALIZED,
D3D11_INIT_CREATEDEVICE_ERROR,
"Could not create D3D11 device.");
// Cleanup done by destructor
// Most likely error codes, see
// https://msdn.microsoft.com/en-us/library/windows/desktop/ff476082%28v=vs.85%29.aspx
// And https://msdn.microsoft.com/en-us/library/windows/desktop/ff476174(v=vs.85).aspx
switch (result)
{
case E_INVALIDARG:
return GenerateD3D11CreateDeviceErr(D3D11_INIT_CREATEDEVICE_INVALIDARG);
case E_FAIL:
return GenerateD3D11CreateDeviceErr(D3D11_INIT_CREATEDEVICE_FAIL);
case E_NOTIMPL:
return GenerateD3D11CreateDeviceErr(D3D11_INIT_CREATEDEVICE_NOTIMPL);
case E_OUTOFMEMORY:
return GenerateD3D11CreateDeviceErr(D3D11_INIT_CREATEDEVICE_OUTOFMEMORY);
case DXGI_ERROR_INVALID_CALL:
return GenerateD3D11CreateDeviceErr(D3D11_INIT_CREATEDEVICE_INVALIDCALL);
case DXGI_ERROR_SDK_COMPONENT_MISSING:
return GenerateD3D11CreateDeviceErr(D3D11_INIT_CREATEDEVICE_COMPONENTMISSING);
case DXGI_ERROR_WAS_STILL_DRAWING:
return GenerateD3D11CreateDeviceErr(D3D11_INIT_CREATEDEVICE_WASSTILLDRAWING);
case DXGI_ERROR_NOT_CURRENTLY_AVAILABLE:
return GenerateD3D11CreateDeviceErr(D3D11_INIT_CREATEDEVICE_NOTAVAILABLE);
case DXGI_ERROR_DEVICE_HUNG:
return GenerateD3D11CreateDeviceErr(D3D11_INIT_CREATEDEVICE_DEVICEHUNG);
default:
if (!mDevice || FAILED(result))
{
return GenerateD3D11CreateDeviceErr(D3D11_INIT_CREATEDEVICE_ERROR);
}
}
}
......
......@@ -62,6 +62,22 @@ enum D3D11InitError
D3D11_INIT_INCOMPATIBLE_DXGI,
// Other initialization error
D3D11_INIT_OTHER_ERROR,
// CreateDevice returned E_FAIL
D3D11_INIT_CREATEDEVICE_FAIL,
// CreateDevice returned E_NOTIMPL
D3D11_INIT_CREATEDEVICE_NOTIMPL,
// CreateDevice returned E_OUTOFMEMORY
D3D11_INIT_CREATEDEVICE_OUTOFMEMORY,
// CreateDevice returned DXGI_ERROR_INVALID_CALL
D3D11_INIT_CREATEDEVICE_INVALIDCALL,
// CreateDevice returned DXGI_ERROR_SDK_COMPONENT_MISSING
D3D11_INIT_CREATEDEVICE_COMPONENTMISSING,
// CreateDevice returned DXGI_ERROR_WAS_STILL_DRAWING
D3D11_INIT_CREATEDEVICE_WASSTILLDRAWING,
// CreateDevice returned DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
D3D11_INIT_CREATEDEVICE_NOTAVAILABLE,
// CreateDevice returned DXGI_ERROR_DEVICE_HUNG
D3D11_INIT_CREATEDEVICE_DEVICEHUNG,
NUM_D3D11_INIT_ERRORS
};
......
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