diff options
| author | Ptolemy <ptolemy@lindenlab.com> | 2021-01-21 17:29:54 -0800 | 
|---|---|---|
| committer | Ptolemy <ptolemy@lindenlab.com> | 2021-01-25 15:52:58 -0800 | 
| commit | ef4c7c124753ca93659e34c6bbf0f6ef0ca208e7 (patch) | |
| tree | 906b55699bf443039ce5c3a3aa87f1c5f3dafede /indra/llwindow | |
| parent | f639747fad3c96f2a0ebcff4903ebaaf04fa4fe7 (diff) | |
SL-14705: Merge Sovereign Engineer's fix for name tags showing in front with AMD GPUs: Fix GL_INVALID_OPERATION when copying stencil to default window framebuffer on AMD graphics on windows
Diffstat (limited to 'indra/llwindow')
| -rw-r--r-- | indra/llwindow/llwindowwin32.cpp | 29 | 
1 files changed, 17 insertions, 12 deletions
| diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index 6831071cd1..0db9886d03 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -1474,24 +1474,29 @@ BOOL LLWindowWin32::switchContext(BOOL fullscreen, const LLCoordScreen &size, BO  		LL_INFOS("Window") << "pixel formats done." << LL_ENDL ; -		S32 swap_method = 0; -		S32 cur_format = num_formats-1; -		GLint swap_query = WGL_SWAP_METHOD_ARB; - -		BOOL found_format = FALSE; - -		while (!found_format && wglGetPixelFormatAttribivARB(mhDC, pixel_format, 0, 1, &swap_query, &swap_method)) +		S32   swap_method = 0; +		S32   cur_format  = 0; +		GLint swap_query  = WGL_SWAP_METHOD_ARB; + +		// SL-14705 Fix name tags showing in front of objects with AMD GPUs. +		// On AMD hardware we need to iterate from the first pixel format to the end. +		// Spec: +		//     https://www.khronos.org/registry/OpenGL/extensions/ARB/WGL_ARB_pixel_format.txt +		while (wglGetPixelFormatAttribivARB(mhDC, pixel_formats[cur_format], 0, 1, &swap_query, &swap_method))  		{ -			if (swap_method == WGL_SWAP_UNDEFINED_ARB || cur_format <= 0) +			if (swap_method == WGL_SWAP_UNDEFINED_ARB)  			{ -				found_format = TRUE; +				break;  			} -			else +			else if (cur_format >= (S32)(num_formats - 1))  			{ -				--cur_format; +				cur_format = 0; +				break;  			} + +			++cur_format;  		} -		 +  		pixel_format = pixel_formats[cur_format];  		if (mhDC != 0)											// Does The Window Have A Device Context? | 
