[Bug 23765] Fraps cannot measure FPS

wine-bugs at winehq.org wine-bugs at winehq.org
Mon Jan 27 07:29:49 CST 2014


http://bugs.winehq.org/show_bug.cgi?id=23765

--- Comment #3 from Stefan Dösinger <stefan at codeweavers.com> ---
I investigated this problem. Fraps mostly works for OpenGL applications. For
d3d-based apps there are a number of problems:

1) IDirect3DDevice9::PresentEx, IDirect3DSwapChain8::Present,
IDirectDrawSurface::Unlock/Blt/Flip need DECLSPEC_HOTPATCH. This is fairly easy
to fix.

2) Fraps assumes that IDirect3DDevice8::Present calls
IDirect3DSwapChain8::Present. Fixable. It also assumes that IDirectDrawSurface7
calls back to DirectDrawSurface1 rather than the other way around. Also
fixable, but needs some more checks.

3) Fraps assumes that the offset of functions inside ddraw, d3d8 and d3d9 is
constant. It calculates IDirect3DSwapChain9::Present - d3d9_handle in its main
process, sends this address to the injection DLL inside the client app and
hooks client_d3d9_handle + offset.

The last problem is tricky to fix. A workaround is to give ddraw, d3d8 and d3d9
(and later on d3d10 and d3d11) fixed load addresses. Alexandre already said no
to this approach.

Another workaround might be to use the offset between IDirect3DCreate9 and
hooked functions. This is something the Fraps maintainers have to do though. I
have suggested this idea to them. I guess it isn't a guarantee either, but more
likely to work because both address are in the code area of the d3d9 binary.

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.


More information about the wine-bugs mailing list