[Mesa-dev] [PATCH] gallium: improve selection of pixel format
Andres Gomez
agomez at igalia.com
Sat Jul 8 20:07:49 UTC 2017
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.lauffenburger at 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
More information about the mesa-dev
mailing list