[Piglit] [PATCH] Fix windows code path

Morgan Armand morgan.devel at gmail.com
Wed Nov 2 00:49:15 PDT 2011


Hi,
It seems there is a mistake in the windows code path. Actually
DrawingSurfaceConfig holds a pointer to a pfd but it is invalid (as we
send a pointer to a stack object). There is also two invalid
SetPixelFormat calls. This patch fixes it.

---
 tests/glean/dsconfig.cpp |   42 +++++++++++++++++++++---------------------
 tests/glean/dsconfig.h   |    2 +-
 tests/glean/dsurf.cpp    |    3 +--
 tests/glean/rc.cpp       |    4 +---
 4 files changed, 24 insertions(+), 27 deletions(-)

diff --git a/tests/glean/dsconfig.cpp b/tests/glean/dsconfig.cpp
index 9a4336c..69b549d 100644
--- a/tests/glean/dsconfig.cpp
+++ b/tests/glean/dsconfig.cpp
@@ -367,48 +367,48 @@ DrawingSurfaceConfig::DrawingSurfaceConfig(int id,
::PIXELFORMATDESCRIPTOR *ppfd
     if (!mapsInitialized)
         initializeMaps();

-    pfd = ppfd;
+    pfd = *ppfd;
     pfdID = id;

-    canRGBA = pfd->iPixelType == PFD_TYPE_RGBA;
-    canCI = pfd->iPixelType == PFD_TYPE_COLORINDEX;
+    canRGBA = pfd.iPixelType == PFD_TYPE_RGBA;
+    canCI = pfd.iPixelType == PFD_TYPE_COLORINDEX;

-    bufSize = pfd->cColorBits + pfd->cAlphaBits;
+    bufSize = pfd.cColorBits + pfd.cAlphaBits;

     level = 0;

-    db = pfd->dwFlags & PFD_DOUBLEBUFFER;
+    db = pfd.dwFlags & PFD_DOUBLEBUFFER;

-    stereo = pfd->dwFlags & PFD_STEREO;
+    stereo = pfd.dwFlags & PFD_STEREO;

-    aux = pfd->cAuxBuffers;
+    aux = pfd.cAuxBuffers;

     if (canRGBA)    {
-        r = pfd->cRedBits;
-        g = pfd->cGreenBits;
-        b = pfd->cBlueBits;
-        a = pfd->cAlphaBits;
+        r = pfd.cRedBits;
+        g = pfd.cGreenBits;
+        b = pfd.cBlueBits;
+        a = pfd.cAlphaBits;
     }
     else
         r = g = b = a = 0;

-    z = pfd->cDepthBits;
-    s = pfd->cStencilBits;
+    z = pfd.cDepthBits;
+    s = pfd.cStencilBits;

-    accR = pfd->cAccumRedBits;
-    accG = pfd->cAccumGreenBits;
-    accB = pfd->cAccumBlueBits;
-    accA = pfd->cAccumAlphaBits;
+    accR = pfd.cAccumRedBits;
+    accG = pfd.cAccumGreenBits;
+    accB = pfd.cAccumBlueBits;
+    accA = pfd.cAccumAlphaBits;

     samples = 0; // XXX implement properly for Windows!

-    canWindow = pfd->dwFlags & PFD_DRAW_TO_WINDOW;
+    canWindow = pfd.dwFlags & PFD_DRAW_TO_WINDOW;

-    canWinSysRender = pfd->dwFlags & PFD_SUPPORT_GDI;
+    canWinSysRender = pfd.dwFlags & PFD_SUPPORT_GDI;

-    if (pfd->dwFlags & PFD_GENERIC_FORMAT)
+    if (pfd.dwFlags & PFD_GENERIC_FORMAT)
     {
-        if (pfd->dwFlags & PFD_GENERIC_ACCELERATED)
+        if (pfd.dwFlags & PFD_GENERIC_ACCELERATED)
         {
             // it's an MCD - at least it has some acceleration
             fast = true;
diff --git a/tests/glean/dsconfig.h b/tests/glean/dsconfig.h
index 3827662..8df2abc 100644
--- a/tests/glean/dsconfig.h
+++ b/tests/glean/dsconfig.h
@@ -93,7 +93,7 @@ class DrawingSurfaceConfig {
     ::XID fbcID;            // Framebuffer Config ID.
 #     endif
 #   elif defined(__WIN__)
-    ::PIXELFORMATDESCRIPTOR *pfd;
+    ::PIXELFORMATDESCRIPTOR pfd;
     int pfdID;
 #   elif defined(__AGL__)
     AGLPixelFormat    pf;
diff --git a/tests/glean/dsurf.cpp b/tests/glean/dsurf.cpp
index 2a3bea1..4e4cfd7 100644
--- a/tests/glean/dsurf.cpp
+++ b/tests/glean/dsurf.cpp
@@ -155,8 +155,7 @@ legacyMethod:

     hDC = GetDC(hWindow);

-    PIXELFORMATDESCRIPTOR pfd;
-    SetPixelFormat(hDC,config->pfdID,&pfd);
+    SetPixelFormat(hDC,config->pfdID,&config->pfd);

 #elif defined(__BEWIN__)

diff --git a/tests/glean/rc.cpp b/tests/glean/rc.cpp
index 8cc95b3..e432d99 100644
--- a/tests/glean/rc.cpp
+++ b/tests/glean/rc.cpp
@@ -66,9 +66,7 @@ HGLRC create_context(GLEAN::DrawingSurfaceConfig &c)
     if (!hDC)
         return 0;

-    PIXELFORMATDESCRIPTOR pfd;
-
-    if (!SetPixelFormat(hDC,c.pfdID,&pfd))
+    if (!SetPixelFormat(hDC,c.pfdID,&c.pfd))
     {
         ReleaseDC(hwnd,hDC);
         DestroyWindow(hwnd);
-- 
1.7.7.1.msysgit.0




More information about the Piglit mailing list