[Piglit] [PATCH] Fix windows code path

Morgan Armand morgan.devel at gmail.com
Wed Nov 2 11:16:10 PDT 2011


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 ?

Morgan

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
>>>
>>

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0001-fix-windows-code-path.patch
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20111102/deddb527/attachment.ksh>


More information about the Piglit mailing list