[Mesa-dev] [PATCH 3/3] wgl: Ensure PIXELFORMATDESCRIPTOR members are zeroed.

2014-11-19 Thread jfonseca
From: José Fonseca jfons...@vmware.com

I suddenly started seeing many simple GL apps, including wglinfo,
choosing Microsoft GDI OpenGL implementation, even though hardware
accelerated pixel formats were available.

It turned out that:
- the screen was in 16bpp mode (some WHCK tests have the nasty habit
  of doing that)
- NVIDIA opengl driver only reports R5G6B5 pixel formats (ie no alpha
  bits) in this case
- non-zero cAlphaBits was being passed to ChoosePixelformat (or in the
  wglinfo case, garbage, as the structure wasn't being properly zeroed)
- ChoosePixelFormat will choose a SW pixel format, just to honour the

At least on the wglinfo and friends case the alpha bits are not needed,
so this change will make sure that HW accelerated formats will be chosen
before SW ones.
---
 src/wgl/sharedtex_mt.c | 6 --
 src/wgl/wglinfo.c  | 1 +
 src/wgl/wglthreads.c   | 3 ++-
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/wgl/sharedtex_mt.c b/src/wgl/sharedtex_mt.c
index 161b2bb..073b100 100644
--- a/src/wgl/sharedtex_mt.c
+++ b/src/wgl/sharedtex_mt.c
@@ -118,7 +118,7 @@ initMainthread(void)
 {
WNDCLASS wc = {0};
HWND win;
-   PIXELFORMATDESCRIPTOR pfd = {0};
+   PIXELFORMATDESCRIPTOR pfd;
int visinfo;
 
wc.lpfnWndProc = WndProc;
@@ -147,6 +147,7 @@ initMainthread(void)
   Error(Couldn't obtain HDC);
}
 
+   memset(pfd, 0, sizeof(pfd));
pfd.cColorBits = 24;
pfd.cDepthBits = 24;
pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
@@ -405,7 +406,7 @@ threadRunner (void *arg)
 {
struct thread_init_arg *tia = (struct thread_init_arg *) arg;
struct window *win;
-   PIXELFORMATDESCRIPTOR pfd = {0};
+   PIXELFORMATDESCRIPTOR pfd;
int visinfo;
 
win = Windows[tia-id];
@@ -419,6 +420,7 @@ threadRunner (void *arg)
if(tia-id  0)
   WaitForSingleObject(Windows[tia-id - 1].hEventInitialised, INFINITE);
 
+   memset(pfd, 0, sizeof(pfd));
pfd.cColorBits = 24;
pfd.cDepthBits = 24;
pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
diff --git a/src/wgl/wglinfo.c b/src/wgl/wglinfo.c
index 30b1307..b6285ec 100644
--- a/src/wgl/wglinfo.c
+++ b/src/wgl/wglinfo.c
@@ -123,6 +123,7 @@ print_screen_info(HDC _hdc, GLboolean limits, GLboolean 
singleLine,
   return;
}
 
+   memset(pfd, 0, sizeof(pfd));
pfd.cColorBits = 3;
pfd.cRedBits = 1;
pfd.cGreenBits = 1;
diff --git a/src/wgl/wglthreads.c b/src/wgl/wglthreads.c
index 27dca10..2ee42e2 100644
--- a/src/wgl/wglthreads.c
+++ b/src/wgl/wglthreads.c
@@ -430,7 +430,7 @@ create_window(struct winthread *wt, HGLRC shareCtx)
int ypos = (wt-Index / 8) * (width + 20);
HWND win;
HDC hdc;
-   PIXELFORMATDESCRIPTOR pfd = {0};
+   PIXELFORMATDESCRIPTOR pfd;
int visinfo;
HGLRC ctx;
 
@@ -463,6 +463,7 @@ create_window(struct winthread *wt, HGLRC shareCtx)
   Error(Couldn't obtain HDC);
}
 
+   memset(pfd, 0, sizeof(pfd));
pfd.cColorBits = 24;
pfd.cDepthBits = 24;
pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
-- 
1.9.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 3/3] wgl: Ensure PIXELFORMATDESCRIPTOR members are zeroed.

2014-11-19 Thread Roland Scheidegger
Some small nitpick below, but otherwise the series is:
Reviewed-by: Roland Scheidegger srol...@vmware.com


Am 19.11.2014 um 19:23 schrieb jfons...@vmware.com:
 From: José Fonseca jfons...@vmware.com
 
 I suddenly started seeing many simple GL apps, including wglinfo,
 choosing Microsoft GDI OpenGL implementation, even though hardware
 accelerated pixel formats were available.
 
 It turned out that:
 - the screen was in 16bpp mode (some WHCK tests have the nasty habit
   of doing that)
 - NVIDIA opengl driver only reports R5G6B5 pixel formats (ie no alpha
   bits) in this case
 - non-zero cAlphaBits was being passed to ChoosePixelformat (or in the
   wglinfo case, garbage, as the structure wasn't being properly zeroed)
 - ChoosePixelFormat will choose a SW pixel format, just to honour the
The sentence here is incomplete.

 
 At least on the wglinfo and friends case the alpha bits are not needed,
 so this change will make sure that HW accelerated formats will be chosen
 before SW ones.
 ---
  src/wgl/sharedtex_mt.c | 6 --
  src/wgl/wglinfo.c  | 1 +
  src/wgl/wglthreads.c   | 3 ++-
  3 files changed, 7 insertions(+), 3 deletions(-)
 
 diff --git a/src/wgl/sharedtex_mt.c b/src/wgl/sharedtex_mt.c
 index 161b2bb..073b100 100644
 --- a/src/wgl/sharedtex_mt.c
 +++ b/src/wgl/sharedtex_mt.c
 @@ -118,7 +118,7 @@ initMainthread(void)
  {
 WNDCLASS wc = {0};
 HWND win;
 -   PIXELFORMATDESCRIPTOR pfd = {0};
 +   PIXELFORMATDESCRIPTOR pfd;
 int visinfo;
  
 wc.lpfnWndProc = WndProc;
 @@ -147,6 +147,7 @@ initMainthread(void)
Error(Couldn't obtain HDC);
 }
  
 +   memset(pfd, 0, sizeof(pfd));
 pfd.cColorBits = 24;
 pfd.cDepthBits = 24;
 pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
 @@ -405,7 +406,7 @@ threadRunner (void *arg)
  {
 struct thread_init_arg *tia = (struct thread_init_arg *) arg;
 struct window *win;
 -   PIXELFORMATDESCRIPTOR pfd = {0};
 +   PIXELFORMATDESCRIPTOR pfd;
 int visinfo;
  
 win = Windows[tia-id];
 @@ -419,6 +420,7 @@ threadRunner (void *arg)
 if(tia-id  0)
WaitForSingleObject(Windows[tia-id - 1].hEventInitialised, INFINITE);
  
 +   memset(pfd, 0, sizeof(pfd));
 pfd.cColorBits = 24;
 pfd.cDepthBits = 24;
 pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
 diff --git a/src/wgl/wglinfo.c b/src/wgl/wglinfo.c
 index 30b1307..b6285ec 100644
 --- a/src/wgl/wglinfo.c
 +++ b/src/wgl/wglinfo.c
 @@ -123,6 +123,7 @@ print_screen_info(HDC _hdc, GLboolean limits, GLboolean 
 singleLine,
return;
 }
  
 +   memset(pfd, 0, sizeof(pfd));
 pfd.cColorBits = 3;
 pfd.cRedBits = 1;
 pfd.cGreenBits = 1;
 diff --git a/src/wgl/wglthreads.c b/src/wgl/wglthreads.c
 index 27dca10..2ee42e2 100644
 --- a/src/wgl/wglthreads.c
 +++ b/src/wgl/wglthreads.c
 @@ -430,7 +430,7 @@ create_window(struct winthread *wt, HGLRC shareCtx)
 int ypos = (wt-Index / 8) * (width + 20);
 HWND win;
 HDC hdc;
 -   PIXELFORMATDESCRIPTOR pfd = {0};
 +   PIXELFORMATDESCRIPTOR pfd;
 int visinfo;
 HGLRC ctx;
  
 @@ -463,6 +463,7 @@ create_window(struct winthread *wt, HGLRC shareCtx)
Error(Couldn't obtain HDC);
 }
  
 +   memset(pfd, 0, sizeof(pfd));
 pfd.cColorBits = 24;
 pfd.cDepthBits = 24;
 pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
 

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev