Followers 0

# Vsync lag in DirectX 9 Fullscreen

## 3 posts in this topic

I have vsync enabled in my game. In windowed mode, input lag seems to be much less than compared to fullscreen mode. I've tried to pinpoint where this input lag is coming from while in fullscreen, but I just don't know where to look anymore.

This is my windows message loop:

do
{
MSG msg;
while(PeekMessage(&msg,0,0,0,PM_REMOVE) > 0)
{
if(msg.message == WM_QUIT)
{
return false;
}

TranslateMessage( &msg );
DispatchMessage( &msg );
}

if(m_bPaused)
{
Sleep(20);
}

} while(m_bPaused);

return true;

And this is how I init directx 9:

D3DPRESENT_PARAMETERS m_D3DParameters;

m_D3DParameters.BackBufferWidth            = width;
m_D3DParameters.BackBufferHeight           = height;
m_D3DParameters.BackBufferFormat           = D3DFMT_X8R8G8B8;
m_D3DParameters.BackBufferCount            = 1;
m_D3DParameters.MultiSampleType            = D3DMULTISAMPLE_NONE;
m_D3DParameters.MultiSampleQuality         = 0;
m_D3DParameters.hDeviceWindow              = windowHandle;
m_D3DParameters.Windowed                   = false;
m_D3DParameters.EnableAutoDepthStencil     = true;
m_D3DParameters.AutoDepthStencilFormat     = D3DFMT_D24S8;
m_D3DParameters.Flags                      = 0;
m_D3DParameters.FullScreen_RefreshRateInHz = RefreshRate;
m_D3DParameters.PresentationInterval       = D3DPRESENT_INTERVAL_DEFAULT;

0

##### Share on other sites

Try using D3DPRESENT_INTERVAL_ONE instead of D3DPRESENT_INTERVAL_DEFAULT - see the "Remarks" section at http://msdn.microsoft.com/en-us/library/windows/desktop/bb172585%28v=vs.85%29.aspx for more info on the difference between the two (specifically - if you're not calling timeBeginPeriod yourself then the lower system timer resolution may screw up your input timing too).

0

##### Share on other sites
This does not seem to fix the lag I'm experiencing. For input, I'm using a combination of Raw Input for the mouse along with the keyboard messages from the windows msg queue.

Edit: It seems that creating the directx device with D3DCREATE_SOFTWARE_VERTEXPROCESSING, tends to reduce the input lag. Interesting... Edited by f12dude
0

##### Share on other sites

I believe the lag is caused by Direct3D rendering frames ahead of time, which means that the actually displayed frames will seem to lag. In Direct3D9 itself, unlike Direct3D11 where the number of frames to render ahead can be altered, there is no good way to control this, except artificially reducing the run-ahead by executing a query and stalling by waiting for its result. I wouldn't necessarily recommend this.

Software vertex processing reducing the lag is likely caused by the CPU having more work to do, therefore it doesn't get that much ahead.

0

## Create an account

Register a new account