From 472fa28fe03219b20a50da287238c873e20884c5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Tue, 23 Apr 2013 18:00:40 +0100 Subject: [PATCH] d3dretrace: Give more helpful messages for d3d debug layer failures. --- retrace/dxgiretrace.py | 27 ++++++++++++++++++++++++++- retrace/retrace.py | 2 +- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/retrace/dxgiretrace.py b/retrace/dxgiretrace.py index d6d7e96..1be70fe 100644 --- a/retrace/dxgiretrace.py +++ b/retrace/dxgiretrace.py @@ -95,7 +95,16 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) { # Toggle debugging print r' Flags &= ~D3D11_CREATE_DEVICE_DEBUG;' print r' if (retrace::debug) {' - print r' if (LoadLibraryA("d3d11sdklayers")) {' + print r' OSVERSIONINFO osvi;' + print r' BOOL bIsWindows8orLater;' + print r' ZeroMemory(&osvi, sizeof osvi);' + print r' osvi.dwOSVersionInfoSize = sizeof osvi;' + print r' GetVersionEx(&osvi);' + print r' bIsWindows8orLater = ' + print r' (osvi.dwMajorVersion > 6) ||' + print r' (osvi.dwMajorVersion == 6 && osvi.dwMinorVersion >= 2);' + print r' const char *szD3d11SdkLayers = bIsWindows8orLater ? "d3d11_1sdklayers" : "d3d11sdklayers";' + print r' if (LoadLibraryA(szD3d11SdkLayers)) {' print r' Flags |= D3D11_CREATE_DEVICE_DEBUG;' print r' }' print r' }' @@ -105,6 +114,22 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) { Retracer.invokeFunction(self, function) + if function.name in self.createDeviceFunctionNames: + print r' if (FAILED(_result)) {' + + if function.name.startswith('D3D10CreateDevice'): + print r' if (_result == E_FAIL && (Flags & D3D10_CREATE_DEVICE_DEBUG)) {' + print r' retrace::warning(call) << "debug layer (d3d10sdklayers.dll) not installed\n";' + print r' }' + + if function.name.startswith('D3D11CreateDevice'): + print r' if (_result == E_FAIL && (Flags & D3D11_CREATE_DEVICE_DEBUG)) {' + print r' retrace::warning(call) << "debug layer (d3d11sdklayers.dll for Windows 7, d3d11_1sdklayers.dll for Windows 8 or Windows 7 with KB 2670838) not properly installed\n";' + print r' }' + + print r' exit(1);' + print r' }' + def forceDriver(self, enum): # This can only work when pAdapter is NULL. For non-NULL pAdapter we # need to override inside the EnumAdapters call below diff --git a/retrace/retrace.py b/retrace/retrace.py index 70926c0..cc3081d 100644 --- a/retrace/retrace.py +++ b/retrace/retrace.py @@ -493,7 +493,7 @@ class Retracer: def checkResult(self, resultType): if str(resultType) == 'HRESULT': print r' if (FAILED(_result)) {' - print r' retrace::warning(call) << "failed\n";' + print r' retrace::warning(call) << "failed (0x" << std::hex << _result << std::dec << ")\n";' print r' }' def filterFunction(self, function): -- 2.43.0