Take the 2-minute tour ×
Game Development Stack Exchange is a question and answer site for professional and independent game developers. It's 100% free, no registration required.

In my research for a stuttering problem in my game engine, I think, I have found the problem, but don't have any idea why this is happening, that's why I ask you if you have an idea !

The situation : DirectX10 under win7 simple engine. If running fullscreen (and only in fullscreen), with Vsync On and the rendering loop going much more faster than the vsync ==> Stutter (Frame dropped by the driver).

My base solution at this moment : Make the call to device.present() not faster than the Vsync !

My questions : - What is happening here ? It seems that the called to .present() "is caching" frames, and if the cache is full, it can go to throw away a frame ==> It makes the stutter ! - Why is it not happening in windowed mode under the exact same situation (back buffer resolution, scene, ...) ???

Edit : Here is a Pix debugging screen (big picture), showing the stuttering : http://www.s33m3.be/PIX/PIX3.png You can see that frame 912, that did exactly the same amount of work as other frames, wasn't processed by the GPU. (No GPU start/Duration). And after debugging, it just that for this frame the call to .Present() was really low (more then 10 times faster than the average .Present() of the other frames !

So how can I disable in DirectX10 this "feature" to throw aways frames ? I would prefer the Present method to hold instead of dropping a frame !

share|improve this question
add comment

2 Answers 2

That's not vsync. The call to Present() will block until the appropriate time if you have vsync enabled. This means that unless you're trying multi-threaded rendering, which DX10 does not support, this shouldn't happen- that is, it should be impossible to Present() multiple times a frame.

share|improve this answer
    
Then how is this things possible (Pix debugging the fullscreen stutering things) : s33m3.be/PIX/PIX.png. As you can see, multiple frames are rendered at once in full screen ! (even with Vsync enabled). And the next frame doesn't wait the end of the previous one to start ! I can also show you (from pix) frame generated by the cpu, but never send to the GPU (throw away = stutter) –  Fabian May 5 '11 at 14:45
    
@Fabian: Have you tried changing the "maximum pre-rendered frames" setting in the NVIDIA Control Panel? –  Neverender May 6 '11 at 23:37
add comment

After weeks of investigations I found the problem : Nvidia DX10 driver are really a mess !!!!

=> Tested my application with ATI = No problem => Migrated to DX11 => No problem at all ! (Instead of a gpu "bound" in full screen, my gpu now is idle 95% of the time !!)

share|improve this answer
1  
Are you sure they are a mess, or are you just somehow messing it up? Seeing how a lot of Game Devs use DX10, I am going to suspect it is somehow your error. –  AttackingHobo May 7 '11 at 7:22
    
The only things I can say : The same application running on ATI card : No problem. Going into DirectX11 API => No problem at all. And as stated : The application is running perfectly in windowed mode "at fullscreen resolution", but laggy as hell in true full screen. –  Fabian May 12 '11 at 15:08
    
I could also said, that running the DX10 sample from slimDX guys (you know a simple triangle displayed) is not running smootly in fullscreen either. In fact to be 100% honest, the problem is not the "Fullscreen", it is the fullscreen with Vsync that makes problem. But As I have a 120hz screen with 3dvision driver, the Vsync is forced On when going into fullscreen. Other information : Even AAA game have this problem : forums.steampowered.com/forums/showthread.php?t=1881758 –  Fabian May 12 '11 at 15:13
    
One last things : I did this test, that leads me to this driver problem : If i manage myself the rendering speed (limiting in my code manually the FPS to 60 mainly putting sleep(X) in main loop), the stuttering stops ! (Remember that I was not GPU bound neither - as this stuttering things is also happening with a single triangle demo). –  Fabian May 12 '11 at 15:26
1  
Eh? Magica is not a AAA game. And that problem is an XNA specific glitch that is fixed with editing the updating code, not the rendering code. –  AttackingHobo May 13 '11 at 2:41
show 2 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.