[Piglit] [PATCH] Fix windows code path

Jose Fonseca jfonseca at vmware.com
Wed Nov 2 11:28:40 PDT 2011


----- Original Message -----
> Here is the patch. You are right, the argument is not used. I had a
> bug
> when using piglit (only with gallium/wgl) on windows, and thought it
> was
> the invalid pfd pointer's fault. But I figured out this is because
> SetPixelFormat internally calls wglSetPixelFormat and
> wglSetPixelFormat
> actually checks if the nSize field is valid. So maybe
> wglSetPixelFormat
> needs to be fixed in the gallium driver to have the same behavior ?

Yes. Indeed.

hmmm... so that's why glean failed when I was trying debug by putting the opengl32.dll in the same dir (as opposed to use it as an ICD driver)!

If you could prepare a patch, I'd be obliged.

Jose

> On 11/2/2011 5:18 PM, Jose Fonseca wrote:
> > Your patch doesn't apply cleanly. I'm not sure if my mail client
> > fault or yours. Can anybody else apply this cleanly?
> > 
> > Regardless, please re-send as attachment.
> > 
> > Jose
> > 
> > ----- Original Message -----
> >> Morgan,
> >>
> >> I don't think this fixes any actual bug, as SetPixelFormat's ppfd
> >> argument is not used for anything,
> >> per http://msdn.microsoft.com/en-us/library/dd369049(v=vs.85).aspx
> >>
> >> But I think this is a good code cleanup regardless.
> >>
> >>
> >> Jose
> >>
> >> ----- Original Message -----
> >>> 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
> >>>
> >>>
> >>> _______________________________________________
> >>> Piglit mailing list
> >>> Piglit at lists.freedesktop.org
> >>> http://lists.freedesktop.org/mailman/listinfo/piglit
> >>>
> >>
> 
> 


More information about the Piglit mailing list