From: José Fonseca Date: Tue, 19 Feb 2013 13:29:26 +0000 (+0000) Subject: d3dretrace: Cope with _MAP_FLAG_DO_NOT_WAIT flags. X-Git-Url: https://git.cworth.org/git?p=apitrace;a=commitdiff_plain;h=999284fd424cbf7dde024f949cdece0f308d41db d3dretrace: Cope with _MAP_FLAG_DO_NOT_WAIT flags. If the map succeeded in the original trace, then we must wait. --- diff --git a/retrace/dxgiretrace.py b/retrace/dxgiretrace.py index 69bc3ba..6a51a4d 100644 --- a/retrace/dxgiretrace.py +++ b/retrace/dxgiretrace.py @@ -244,8 +244,17 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) { ''' 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': diff --git a/specs/stdapi.py b/specs/stdapi.py index b86668b..c652736 100644 --- a/specs/stdapi.py +++ b/specs/stdapi.py @@ -385,6 +385,12 @@ class Function: def argNames(self): return [arg.name for arg in self.args] + def getArgByName(self, name): + for arg in self.args: + if arg.name == name: + return arg + return None + def StdFunction(*args, **kwargs): kwargs.setdefault('call', '__stdcall')