Olivier, Brian, do we want this into -stable? On Thu, 2017-07-06 at 17:08 +0200, Olivier Lauffenburger wrote: > Current selection of pixel format does not enforce the request of > stencil or depth buffer if the color depth is not the same as > requested. > For instance, GLUT requests a 32-bit color buffer with an 8-bit > stencil buffer, but because color buffers are only 24-bit, no > priority is given to creating a stencil buffer. > > This patch gives more priority to the creation of requested buffers > and less priority to the difference in bit depth. > > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101703 > > Signed-off-by: Olivier Lauffenburger <o.lauffenbur...@topsolid.com> > --- > src/gallium/state_trackers/wgl/stw_pixelformat.c | 36 > +++++++++++++++++++----- > 1 file changed, 29 insertions(+), 7 deletions(-) > > diff --git a/src/gallium/state_trackers/wgl/stw_pixelformat.c > b/src/gallium/state_trackers/wgl/stw_pixelformat.c > index 7763f71cbc..833308d964 100644 > --- a/src/gallium/state_trackers/wgl/stw_pixelformat.c > +++ b/src/gallium/state_trackers/wgl/stw_pixelformat.c > @@ -432,17 +432,39 @@ stw_pixelformat_choose(HDC hdc, CONST > PIXELFORMATDESCRIPTOR *ppfd) > !!(pfi->pfd.dwFlags & PFD_DOUBLEBUFFER)) > continue; > > - /* FIXME: Take in account individual channel bits */ > - if (ppfd->cColorBits != pfi->pfd.cColorBits) > - delta += 8; > + /* Selection logic: > + * - Enabling a feature (depth, stencil...) is given highest priority. > + * - Giving as many bits as requested is given medium priority. > + * - Giving no more bits than requested is given lowest priority. > + */ > > - if (ppfd->cDepthBits != pfi->pfd.cDepthBits) > - delta += 4; > + /* FIXME: Take in account individual channel bits */ > + if (ppfd->cColorBits && !pfi->pfd.cColorBits) > + delta += 10000; > + else if (ppfd->cColorBits > pfi->pfd.cColorBits) > + delta += 100; > + else if (ppfd->cColorBits < pfi->pfd.cColorBits) > + delta++; > > - if (ppfd->cStencilBits != pfi->pfd.cStencilBits) > + if (ppfd->cDepthBits && !pfi->pfd.cDepthBits) > + delta += 10000; > + else if (ppfd->cDepthBits > pfi->pfd.cDepthBits) > + delta += 200; > + else if (ppfd->cDepthBits < pfi->pfd.cDepthBits) > delta += 2; > > - if (ppfd->cAlphaBits != pfi->pfd.cAlphaBits) > + if (ppfd->cStencilBits && !pfi->pfd.cStencilBits) > + delta += 10000; > + else if (ppfd->cStencilBits > pfi->pfd.cStencilBits) > + delta += 400; > + else if (ppfd->cStencilBits < pfi->pfd.cStencilBits) > + delta++; > + > + if (ppfd->cAlphaBits && !pfi->pfd.cAlphaBits) > + delta += 10000; > + else if (ppfd->cAlphaBits > pfi->pfd.cAlphaBits) > + delta += 100; > + else if (ppfd->cAlphaBits < pfi->pfd.cAlphaBits) > delta++; > > if (delta < bestdelta) { -- Br,
Andres _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev