VSync behavior (vsync is always adaptive)

Hello

I’m trying to better understand vsync behavior in an OpenGL application using WGL_EXT_swap_control and WGL_EXT_swap_control_tear on a GTX Titan X, 378.49, Windows 10 Enterprise AU.

Vsync is set to application controlled in the control panel. When calling wglSwapIntervalEXT with an interval of 1, I would expect full traditional vsync (not adaptive). But what I get seems to be adaptive vsync. Screen refresh rate is 60 Hz. Frame rates above 60 FPS will cap at my screen refresh rate as expected. Lower frame rates will not be vsync’ed, there’s not the expected jumps to 30, 20, 15, etc FPS. Instead, the frame rate can take any intermediate value below 60. This is typical adaptive vsync behavior, but this isn’t what I asked for with a wglSwapIntervalEXT(1).

In short:
wglSwapIntervalEXT(0) - disables vsync, OK
wglSwapIntervalEXT(1) - adaptive vsync, NOT OK !
wglSwapIntervalEXT(-1) - adaptive vsync, OK
wglSwapIntervalEXT(-2) - adaptive vsync half rate, OK

The same happens if I force vsync to ‘On’ over the control panel, I actually get adaptive vsync instead of traditional vsync.

Is this expected behavior ?

Thanks,
Alex

alex21,

Could you provide more details of your issue, such as screenshot of FPS, Monitor type, and the application you run. Note there are a set of applications can override v-sync settings in-app. If it’s your own application, you might create a minimum code package that our Nvidia engineers can reproduce the issue.

I’m too having problems with wglSwapIntervalEXT not working anymore.

No matter if I set wglSwapIntervalEXT(0) or wglSwapIntervalEXT(1) I get VSYNC disabled.
700 FPS in my Windows OpenGL application.
This used to work fine, I was having 60 fps in the past when using wglSwapIntervalEXT(1)

Can you please notify your driver developer team about the issue?

(I checked Nvidia Control Panel, but I have “let application decide” in the VSync setting)

Driver version 378.92
Windows 10 Pro, OpenGL
GeForce 650m GT

I have the same problem as Esenthel, wglSwapIntervalEXT used to limit fps but it has no effect at all anymore.

Using wglSwapIntervalEXT with any of -1,0,1,2 gives no change to fps (it returns 1).
Tested in an application where all that happens is a glClear(…) followed by SwapBuffers(…).

Also on Windows 10 Pro
GPU: Quadro K1100M
Driver: 377.11-quadro-grid-desktop-notebook-win10-64bit-international-whql

We have filed an internal bug to track this issue.

At the same time, if you can provide a minimum source code to reproduce the problem. It will help us to quickly identify the root cause.

Has this issue been solved because i have an Geforce RTX 2080 Ti and i have the exact same issue as Aedoro and Esenthel, except it is the other way around. i constantly have VSync on no matter the setting i use. The wglSwapIntervalEXT doesn’t do anything on my Computer which is also running Windows 10 Pro, and i also have the latest updates for Windows and for my GPU.

Here’s my function i use to enable / disable VSync in C++:

bool API::setVSync(int vSync)
{
	PFNWGLGETEXTENSIONSSTRINGEXTPROC _wglGetExtensionsStringEXT = NULL;

	_wglGetExtensionsStringEXT = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)wglGetProcAddress("wglGetExtensionsStringEXT");

	if (strstr(_wglGetExtensionsStringEXT(), "WGL_EXT_swap_control") == NULL)
	{
		return false;
	}

	PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT = NULL;
	PFNWGLGETSWAPINTERVALEXTPROC wglGetSwapIntervalEXT = NULL;

	wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");

	wglGetSwapIntervalEXT = (PFNWGLGETSWAPINTERVALEXTPROC)wglGetProcAddress("wglGetSwapIntervalEXT");

	wglSwapIntervalEXT(vSync);

	return true;
}

And then i just call it after i have enabled OpenGL by calling “setVSync(0);” to disable VSync, but nothing changes and i have also tried setVSync(1); and that changes nothing as well.

EDIT: Welp… i have just received a new driver update for my GPU and that driver seems to have fixed the issue with VSync only being controlled by Nvidia Control Panel. Thank you very much Nvidia :) now i can resume my programming :D