(08-21-2009, 02:28 AM)xaxton Wrote: [ -> ]Yup, probably going to sound the fool, but Ive tried to download your latest plug-in on http://pcsx2.dyndns.org/index.php#GSdx but it doesn't appear to have the directx10 support. i do own vista and tried on both 9.6 and the beta but i only have the options for dx9?
sure that your gpu properly supports dx10? updated your graphics drivers?
Kazaki:
Code:
pcsx2 ..... 1 ..... 2 ..... 3 ..... 50 fps
vsync ..... 1 ..... 2 ..... 3 ..... 50 Hz
----- pcsx2 waits
+ pcsx2 calls gsdx
----- d3d waits
+ d3d vsync
----- pcsx2 waits
+ pcsx2 calls gsdx
Frame rate about halved.
Code:
pcsx2 ..... 1 ..... 2 ..... 3 ..... 50 fps
vsync .... 1 .... 2 .... 3 .... 60 Hz (intervals are shorter)
----- pcsx2 waits
+ pcsx2 calls gsdx
--- d3d waits
+ d3d vsync
----- pcsx2 waits
+ pcsx2 calls gsdx
Complete mess
Code:
pcsx2 .... 1 .... 2 .... 3 .... 60 fps
vsync ..... 1 ..... 2 ..... 3 ..... 50 Hz
---- pcsx2 waits
+ pcsx2 calls gsdx
+ d3d vsync (right on time!)
--- pcsx2 waits
+ pcsx2 calls gsdx
* d3d waits (for a very short time)
+ d3d vsync
-- pcsx2 waits
+ pcsx2 calls gsdx
* d3d waits (still a short time)
+ d3d vsync
Here d3d gets ahead in small steps but eventually in the future it rolls over and becomes synced again with a small hickup.
And these were only the ideal cases, when every drawing happens instantly.
Is there anyway to double or triple buffer in gsdx to help keep the speed up?
It's already double buffered, but that does not help here. Having two different rates to synchronize to at the same time is simply bad.
What basically happens here is that gsdx cannot display the frame at the time pcsx2 schedules it because it also must wait the monitor vsync.
Btw, to have a frame ready before every monitor update the fps should be at least twice the refresh rate. That means either the game should be told to render at 100/120 fps (impossible) or we need to set the monitor to 25/30 Hz.
Yeah as I thought on it I figured it wouldn't be much help even if it wasn't because it still has to wait on vsync for the drawing cycle. Is the regular gsdx without vysnc double buffered as well? If not that might help a little with tearing though it will still tear when the buffer is swapped before drawing is finished. The only thing I can think of to completely fix tearing is to never swap the buffer until drawing is completed. But that could cause some crazy input lag and sync issues.
Just thought of something. Waiting in pcsx2 wastes too much time, GSVsync should be called as early as possible and after that it can sleep as much as it wants. With MTGS it is possible to do it asynchronously. I have to check how it does this whole timing thing first. (well, it already seems to be doing it that way
maybe waiting every second frame twice as much could have a similar effect as double buffering? with vsync it would be still smooth)
waiting every second fram twice seems as if it would be just a waste and I assume with the timeframes we are talking about here would be pretty detrimental to speed.Also with the timeframe here I would hope both PCSX2 and gsdx/d3d are using spinlocks vs event wakes.
Ok, so I take it alt-tabbing between windowed and fullscreen mode causes the d3d to be ahead of pcsx2 for a period then? Which is why that eliminates the lag?
In any case, the two of you seem to be considering vsync solutions (yay!) so I will just step back at this point. I look forward to whatever you guys come up with!
Hi, I just posted a thread on the main discussion forum but think it might be related to gsdx, so I'm putting down the link here. hope you guys can help me out. thanks.
http://forums.pcsx2.net/thread-9523.html