# 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' }'
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
print r' d3d10Dumper.unbindDevice(_this);'
else:
print r' d3d10Dumper.bindDevice(_this);'
- if interface.name in ('ID3D11DeviceContext',):
+ if interface.name in ('ID3D11DeviceContext', 'ID3D11DeviceContext1'):
if method.name == 'Release':
print r' d3d11Dumper.unbindDevice(_this);'
else:
'''
print r' _result = _this->CreateTexture2D(&Desc, &InitialData, (ID3D10Texture2D**)ppResource);'
self.checkResult(method.type)
- else:
- Retracer.invokeInterfaceMethod(self, interface, method)
+ return
+
+ if method.name == 'Map':
+ # Reset _DO_NOT_WAIT flags. Otherwise they may fail, and we have no
+ # way to cope with it (other than retry).
+ mapFlagsArg = method.getArgByName('MapFlags')
+ for flag in mapFlagsArg.type.values:
+ if flag.endswith('_MAP_FLAG_DO_NOT_WAIT'):
+ print r' MapFlags &= ~%s;' % flag
+
+ Retracer.invokeInterfaceMethod(self, interface, method)
# process events after presents
if method.name == 'Present':