narzoul / DDrawCompat

DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11
BSD Zero Clause License
925 stars 70 forks source link

R6 Rogue Spear Ultra too fast Framerate. #78

Closed DJ3dyo closed 3 years ago

DJ3dyo commented 3 years ago

As the title says my old wind 98 game, Rainbows Six: Rogue Spear is now running too fast,

I was using your old ddraw.dll fix from 2019/06 with it and now, since this last couple of win 10 updates, its no more running as smoothly as it was, framerate seems to run at a mad speed for some unknow reason in the menu and it makes the loading crashes, even whit any compatibility/admin setting turned on.

narzoul commented 3 years ago

I just retested it briefly and it's still running fine on my end, on Windows 10 20H2.

First of all, please test with the latest experimental release, as whatever issue you're having may have been fixed already.

What do you use for measuring frame rate? DDrawCompat is incompatible with most such 3rd party tools so please test after turning it off too.

Also, are you running it in windowed or full screen mode? Where exactly does it crash? On the loading screen just before the 3D world is entered?

DJ3dyo commented 3 years ago

I was using no tools for knowing that, but i can confirm it functions too fast, im currently on fresh install of windows 10 Pro build 1909, and to basically explain more in details the fault, when its running in fullscreen mode, in the main menu the mouse icon animation and the missions animation slides, goes at a crazy speed instead of shuffling slowly like they used to do, making pre mission selection/planning phrase unbearable to watch.

narzoul commented 3 years ago

Ok, so I force-disabled v-sync from the source code, which gives me over 3-4000 FPS in the menus (by default it has v-sync on, so it should be locked at your monitor's refresh rate), but it still doesn't make a difference in any of the animation speeds, nor does it cause any crashes. Those animations must be running on some timers and not tied to frame rate.

Have you restarted your PC recently? I know there are some 32-bit timers that can overflow if you haven't restarted in a while, causing various timing glitches in games. I haven't figured out which timer this game uses yet, but I'll look into it.

Other than that, I have no other ideas for now. If restarting doesn't solve the problem, then please download ddraw-debug.zip from the latest experimental release and use the ReleaseWithDebugLogs version from that to reproduce the issue. It will create a large debug log file (DDrawCompat-RogueSpear.log), please compress it and attach here.

DJ3dyo commented 3 years ago

will do.

DJ3dyo commented 3 years ago

DDrawCompat-RogueSpear.zip

narzoul commented 3 years ago

Thanks for the logs! It looks like you have a different issue now, correct? After the second IDirectDrawSurfaceVtbl::Flip call, all function calls take an abnormally long time to execute, presumably because some higher priority thread is keeping the CPU busy. My best guess is that it's the v-sync thread in DDrawCompat, which indeed runs at critical priority. It normally shouldn't consume much CPU at all. I even took some extra care so that if the D3DKMTWaitForVerticalBlankEvent function fails, it would sleep instead for 16 ms (simulating ~60 Hz v-sync frequency). But in your case it's probably returning successfully without actually waiting for v-sync.

I see from your logs that you have an NVIDIA GPU, which unfortunately I can't test at the moment. Do you have some special v-sync setting enabled in your drivers, such as Fast Sync? If yes, please turn it off (or just use regular v-sync) and see if it helps.

If that doesn't solve it, then also try enabling your other CPU cores while the game is running. You can do this from the Task Manager (Ctrl-Shift-Esc): go to the Details tab, right click on the executable, click "Set affinity", select the "All Processors" option and click OK. If you're having trouble seeing the Task Manager while the game is running (e.g. you're stuck on a black screen), you can try enabling "Always on top" in its Options menu.

narzoul commented 3 years ago

Closing due to inactivity. Feel free to reopen if you have more info available.