1db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca/************************************************************************** 2db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * 3db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * All Rights Reserved. 5db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * 6db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * copy of this software and associated documentation files (the 8db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * "Software"), to deal in the Software without restriction, including 9db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * permit persons to whom the Software is furnished to do so, subject to 12db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * the following conditions: 13db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * 14db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * The above copyright notice and this permission notice (including the 15db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * next paragraph) shall be included in all copies or substantial portions 16db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * of the Software. 17db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * 18db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca * 26db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca **************************************************************************/ 27db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca 28aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca#include "pipe/p_format.h" 29aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca#include "pipe/p_defines.h" 30aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca#include "pipe/p_screen.h" 31aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca 32f5bd93fae2e4f46665eb1f09ca64cb39ff2b8a79Michal Krol#include "util/u_format.h" 33ea4bf267e4b023b08043f91ac44592fed1736e7fJosé Fonseca#include "util/u_debug.h" 3459e6e765426a5877db7446e1e34bb7edd3dc1f74Chia-I Wu#include "util/u_memory.h" 3587b04ce59b3ed26988b54ca182fab2e9dce03c38José Fonseca 3631f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca#include "stw_icd.h" 3787b04ce59b3ed26988b54ca182fab2e9dce03c38José Fonseca#include "stw_device.h" 38db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca#include "stw_pixelformat.h" 394489f9efee58f2cba374298f2d43c96e5cd2ff41Michal Krol#include "stw_tls.h" 40db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca 41c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell 420bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonsecastruct stw_pf_color_info 430bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca{ 44aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca enum pipe_format format; 450bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca struct { 460bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca unsigned char red; 470bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca unsigned char green; 480bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca unsigned char blue; 490bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca unsigned char alpha; 500bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca } bits; 510bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca struct { 520bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca unsigned char red; 530bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca unsigned char green; 540bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca unsigned char blue; 550bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca unsigned char alpha; 560bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca } shift; 570bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca}; 580bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca 590bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonsecastruct stw_pf_depth_info 600bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca{ 61aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca enum pipe_format format; 620bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca struct { 630bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca unsigned char depth; 640bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca unsigned char stencil; 650bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca } bits; 660bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca}; 670bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca 680bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca 695458f8eff6b6212d170fd5862c4fc82659666d22José Fonseca/* NOTE: order matters, since in otherwise equal circumstances the first 70aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca * format listed will get chosen */ 71aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca 72aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonsecastatic const struct stw_pf_color_info 730bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonsecastw_pf_color[] = { 74aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca /* no-alpha */ 755706d7fcaf3c3238c652593d5669b9f793c6cdceJosé Fonseca { PIPE_FORMAT_B8G8R8X8_UNORM, { 8, 8, 8, 0}, {16, 8, 0, 0} }, 765706d7fcaf3c3238c652593d5669b9f793c6cdceJosé Fonseca { PIPE_FORMAT_X8R8G8B8_UNORM, { 8, 8, 8, 0}, { 8, 16, 24, 0} }, 775706d7fcaf3c3238c652593d5669b9f793c6cdceJosé Fonseca { PIPE_FORMAT_B5G6R5_UNORM, { 5, 6, 5, 0}, {11, 5, 0, 0} }, 78aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca /* alpha */ 795706d7fcaf3c3238c652593d5669b9f793c6cdceJosé Fonseca { PIPE_FORMAT_B8G8R8A8_UNORM, { 8, 8, 8, 8}, {16, 8, 0, 24} }, 805706d7fcaf3c3238c652593d5669b9f793c6cdceJosé Fonseca { PIPE_FORMAT_A8R8G8B8_UNORM, { 8, 8, 8, 8}, { 8, 16, 24, 0} }, 81aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca#if 0 825706d7fcaf3c3238c652593d5669b9f793c6cdceJosé Fonseca { PIPE_FORMAT_R10G10B10A2_UNORM, {10, 10, 10, 2}, { 0, 10, 20, 30} }, 83aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca#endif 845706d7fcaf3c3238c652593d5669b9f793c6cdceJosé Fonseca { PIPE_FORMAT_B5G5R5A1_UNORM, { 5, 5, 5, 1}, {10, 5, 0, 15} }, 855706d7fcaf3c3238c652593d5669b9f793c6cdceJosé Fonseca { PIPE_FORMAT_B4G4R4A4_UNORM, { 4, 4, 4, 4}, {16, 4, 0, 12} } 860bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca}; 870bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca 889646762261d976d34bee8c8b1dcda9656cec655cJosé Fonsecastatic const struct stw_pf_color_info 899646762261d976d34bee8c8b1dcda9656cec655cJosé Fonsecastw_pf_color_extended[] = { 909646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca { PIPE_FORMAT_R32G32B32A32_FLOAT, { 32, 32, 32, 32}, { 0, 32, 64, 96} } 919646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca}; 92aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca 930bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonsecastatic const struct stw_pf_depth_info 940bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonsecastw_pf_depth_stencil[] = { 95aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca /* pure depth */ 965458f8eff6b6212d170fd5862c4fc82659666d22José Fonseca { PIPE_FORMAT_Z32_UNORM, {32, 0} }, 97aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca { PIPE_FORMAT_X8Z24_UNORM, {24, 0} }, 985706d7fcaf3c3238c652593d5669b9f793c6cdceJosé Fonseca { PIPE_FORMAT_Z24X8_UNORM, {24, 0} }, 995458f8eff6b6212d170fd5862c4fc82659666d22José Fonseca { PIPE_FORMAT_Z16_UNORM, {16, 0} }, 100aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca /* combined depth-stencil */ 101866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie { PIPE_FORMAT_Z24_UNORM_S8_UINT, {24, 8} }, 102866f9b18c68ede63c00917ec9c3dae3524ca8826Dave Airlie { PIPE_FORMAT_S8_UINT_Z24_UNORM, {24, 8} } 1030bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca}; 1040bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca 105aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca 1060bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonsecastatic const boolean 1070bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonsecastw_pf_doublebuffer[] = { 1080bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca FALSE, 1090bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca TRUE, 1100bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca}; 1110bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca 112aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca 1130bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonsecaconst unsigned 1140bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonsecastw_pf_multisample[] = { 1150bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca 0, 1160bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca 4 1170bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca}; 1180bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca 1190bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca 120db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonsecastatic void 1210a2269703c2398d81d8cde439527f883f6fbc502José Fonsecastw_pixelformat_add( 1220a2269703c2398d81d8cde439527f883f6fbc502José Fonseca struct stw_device *stw_dev, 1239646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca boolean extended, 1240bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca const struct stw_pf_color_info *color, 1250bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca const struct stw_pf_depth_info *depth, 12644a996b185c446eab7038a10153db7e7496bf2c9José Fonseca unsigned accum, 127e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca boolean doublebuffer, 1280bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca unsigned samples ) 129db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca{ 130e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca struct stw_pixelformat_info *pfi; 1310a2269703c2398d81d8cde439527f883f6fbc502José Fonseca 1320a2269703c2398d81d8cde439527f883f6fbc502José Fonseca assert(stw_dev->pixelformat_extended_count < STW_MAX_PIXELFORMATS); 1330a2269703c2398d81d8cde439527f883f6fbc502José Fonseca if(stw_dev->pixelformat_extended_count >= STW_MAX_PIXELFORMATS) 1340a2269703c2398d81d8cde439527f883f6fbc502José Fonseca return; 1356fc244c68d3b3a9f89b6f752725e6c768cb08a84José Fonseca 136f5bd93fae2e4f46665eb1f09ca64cb39ff2b8a79Michal Krol assert(util_format_get_component_bits(color->format, UTIL_FORMAT_COLORSPACE_RGB, 0) == color->bits.red); 137f5bd93fae2e4f46665eb1f09ca64cb39ff2b8a79Michal Krol assert(util_format_get_component_bits(color->format, UTIL_FORMAT_COLORSPACE_RGB, 1) == color->bits.green); 138f5bd93fae2e4f46665eb1f09ca64cb39ff2b8a79Michal Krol assert(util_format_get_component_bits(color->format, UTIL_FORMAT_COLORSPACE_RGB, 2) == color->bits.blue); 139f5bd93fae2e4f46665eb1f09ca64cb39ff2b8a79Michal Krol assert(util_format_get_component_bits(color->format, UTIL_FORMAT_COLORSPACE_RGB, 3) == color->bits.alpha); 140f5bd93fae2e4f46665eb1f09ca64cb39ff2b8a79Michal Krol assert(util_format_get_component_bits(depth->format, UTIL_FORMAT_COLORSPACE_ZS, 0) == depth->bits.depth); 141f5bd93fae2e4f46665eb1f09ca64cb39ff2b8a79Michal Krol assert(util_format_get_component_bits(depth->format, UTIL_FORMAT_COLORSPACE_ZS, 1) == depth->bits.stencil); 1420a2269703c2398d81d8cde439527f883f6fbc502José Fonseca 143e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi = &stw_dev->pixelformats[stw_dev->pixelformat_extended_count]; 1440a2269703c2398d81d8cde439527f883f6fbc502José Fonseca 145e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca memset(pfi, 0, sizeof *pfi); 146e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca 147e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi->pfd.nSize = sizeof pfi->pfd; 148e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi->pfd.nVersion = 1; 1490a2269703c2398d81d8cde439527f883f6fbc502José Fonseca 150e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi->pfd.dwFlags = PFD_SUPPORT_OPENGL; 151e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca 152e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca /* TODO: also support non-native pixel formats */ 1539646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca if (!extended) { 1549646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca pfi->pfd.dwFlags |= PFD_DRAW_TO_WINDOW; 1559646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca } 1564e5ed05b025b9b6a1a6dabba72fce3d918e77044José Fonseca 1574e5ed05b025b9b6a1a6dabba72fce3d918e77044José Fonseca /* See http://www.opengl.org/pipeline/article/vol003_7/ */ 1584e5ed05b025b9b6a1a6dabba72fce3d918e77044José Fonseca pfi->pfd.dwFlags |= PFD_SUPPORT_COMPOSITION; 1594e5ed05b025b9b6a1a6dabba72fce3d918e77044José Fonseca 160e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca if (doublebuffer) 161e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi->pfd.dwFlags |= PFD_DOUBLEBUFFER | PFD_SWAP_COPY; 162e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca 163e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi->pfd.iPixelType = PFD_TYPE_RGBA; 164e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca 165d075cb4fc8c130f2e8f40356e7872fcc7ce3dcd1José Fonseca pfi->pfd.cColorBits = color->bits.red + color->bits.green + color->bits.blue + color->bits.alpha; 1660bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca pfi->pfd.cRedBits = color->bits.red; 1670bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca pfi->pfd.cRedShift = color->shift.red; 1680bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca pfi->pfd.cGreenBits = color->bits.green; 1690bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca pfi->pfd.cGreenShift = color->shift.green; 1700bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca pfi->pfd.cBlueBits = color->bits.blue; 1710bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca pfi->pfd.cBlueShift = color->shift.blue; 1720bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca pfi->pfd.cAlphaBits = color->bits.alpha; 1730bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca pfi->pfd.cAlphaShift = color->shift.alpha; 17444a996b185c446eab7038a10153db7e7496bf2c9José Fonseca pfi->pfd.cAccumBits = 4*accum; 17544a996b185c446eab7038a10153db7e7496bf2c9José Fonseca pfi->pfd.cAccumRedBits = accum; 17644a996b185c446eab7038a10153db7e7496bf2c9José Fonseca pfi->pfd.cAccumGreenBits = accum; 17744a996b185c446eab7038a10153db7e7496bf2c9José Fonseca pfi->pfd.cAccumBlueBits = accum; 17844a996b185c446eab7038a10153db7e7496bf2c9José Fonseca pfi->pfd.cAccumAlphaBits = accum; 1790bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca pfi->pfd.cDepthBits = depth->bits.depth; 1800bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca pfi->pfd.cStencilBits = depth->bits.stencil; 181e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi->pfd.cAuxBuffers = 0; 182e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi->pfd.iLayerType = 0; 183e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi->pfd.bReserved = 0; 184e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi->pfd.dwLayerMask = 0; 185e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi->pfd.dwVisibleMask = 0; 186e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca pfi->pfd.dwDamageMask = 0; 187e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca 188192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu /* 189192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu * since state trackers can allocate depth/stencil/accum buffers, we provide 190192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu * only color buffers here 191192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu */ 192192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu pfi->stvis.buffer_mask = ST_ATTACHMENT_FRONT_LEFT_MASK; 193192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu if (doublebuffer) 19463df5a464e984af771b3896d05baa258912ac202José Fonseca pfi->stvis.buffer_mask |= ST_ATTACHMENT_BACK_LEFT_MASK; 195192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu 196192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu pfi->stvis.color_format = color->format; 197192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu pfi->stvis.depth_stencil_format = depth->format; 198192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu 199192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu pfi->stvis.accum_format = (accum) ? 200192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu PIPE_FORMAT_R16G16B16A16_SNORM : PIPE_FORMAT_NONE; 201192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu 202192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu pfi->stvis.samples = samples; 203192f06adca5e79b4824d92dc41186592ed57f71eChia-I Wu pfi->stvis.render_buffer = ST_ATTACHMENT_INVALID; 204e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca 2050a2269703c2398d81d8cde439527f883f6fbc502José Fonseca ++stw_dev->pixelformat_extended_count; 2060a2269703c2398d81d8cde439527f883f6fbc502José Fonseca 2070a2269703c2398d81d8cde439527f883f6fbc502José Fonseca if(!extended) { 2080a2269703c2398d81d8cde439527f883f6fbc502José Fonseca ++stw_dev->pixelformat_count; 2090a2269703c2398d81d8cde439527f883f6fbc502José Fonseca assert(stw_dev->pixelformat_count == stw_dev->pixelformat_extended_count); 2100a2269703c2398d81d8cde439527f883f6fbc502José Fonseca } 2110a2269703c2398d81d8cde439527f883f6fbc502José Fonseca} 212317a7da2c452f35ef627aec6fc4d31406758725dJosé Fonseca 213ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul 214ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul/** 215ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul * Add the depth/stencil/accum/ms variants for a particular color format. 216ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul */ 217ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paulstatic void 218ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Pauladd_color_format_variants(const struct stw_pf_color_info *color, 219ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul boolean extended) 220db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca{ 221aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca struct pipe_screen *screen = stw_dev->screen; 222ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul unsigned ms, db, ds, acc; 223ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul unsigned bind_flags = PIPE_BIND_RENDER_TARGET; 2240bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca 225ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul if (!extended) { 226ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul bind_flags |= PIPE_BIND_DISPLAY_TARGET; 227ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul } 228aa405a2a77d51a4f807c5c2f63cbc76eb660e489José Fonseca 229ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul if (!screen->is_format_supported(screen, color->format, 230ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul PIPE_TEXTURE_2D, 0, bind_flags)) { 231ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul return; 2320bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca } 233ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul 234ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul for (ms = 0; ms < Elements(stw_pf_multisample); ms++) { 235ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul unsigned samples = stw_pf_multisample[ms]; 2369646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca 2379646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca /* FIXME: re-enabled MSAA when we can query it */ 238ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul if (samples) 2399646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca continue; 2409646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca 241ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul for (db = 0; db < Elements(stw_pf_doublebuffer); db++) { 242ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul unsigned doublebuffer = stw_pf_doublebuffer[db]; 2439646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca 244ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul for (ds = 0; ds < Elements(stw_pf_depth_stencil); ds++) { 245ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul const struct stw_pf_depth_info *depth = &stw_pf_depth_stencil[ds]; 2469646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca 247ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul if (!screen->is_format_supported(screen, depth->format, 248ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul PIPE_TEXTURE_2D, 0, 249ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul PIPE_BIND_DEPTH_STENCIL)) { 250ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul continue; 251ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul } 2529646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca 253ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul for (acc = 0; acc < 2; acc++) { 254ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul stw_pixelformat_add(stw_dev, extended, color, depth, 255ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul acc * 16, doublebuffer, samples); 2569646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca } 2579646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca } 2589646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca } 2599646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca } 260ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul} 261ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul 262ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul 263ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paulvoid 264ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paulstw_pixelformat_init( void ) 265ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul{ 266ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul unsigned i; 267ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul 268ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul assert( !stw_dev->pixelformat_count ); 269ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul assert( !stw_dev->pixelformat_extended_count ); 270ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul 271ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul /* normal, displayable formats */ 272ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul for (i = 0; i < Elements(stw_pf_color); i++) { 273ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul add_color_format_variants(&stw_pf_color[i], FALSE); 274ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul } 275ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul 276ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul /* extended, pbuffer-only formats */ 277ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul for (i = 0; i < Elements(stw_pf_color_extended); i++) { 278ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul add_color_format_variants(&stw_pf_color_extended[i], TRUE); 279ad9455314d9c5cb9b31af22116841ee3e642a55bBrian Paul } 2809646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca 2810bca413ce9e5aca4ecbf689fd7aa3da44bb73f4dJosé Fonseca assert( stw_dev->pixelformat_count <= stw_dev->pixelformat_extended_count ); 28287b04ce59b3ed26988b54ca182fab2e9dce03c38José Fonseca assert( stw_dev->pixelformat_extended_count <= STW_MAX_PIXELFORMATS ); 283db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca} 284db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca 285db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonsecauint 28619068d93c8f0f1d2b8809248266bf6da3dc6abd7José Fonsecastw_pixelformat_get_count( void ) 287db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca{ 28887b04ce59b3ed26988b54ca182fab2e9dce03c38José Fonseca return stw_dev->pixelformat_count; 289db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca} 290db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca 291db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonsecauint 29219068d93c8f0f1d2b8809248266bf6da3dc6abd7José Fonsecastw_pixelformat_get_extended_count( void ) 293db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca{ 29487b04ce59b3ed26988b54ca182fab2e9dce03c38José Fonseca return stw_dev->pixelformat_extended_count; 295db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca} 296db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca 29719068d93c8f0f1d2b8809248266bf6da3dc6abd7José Fonsecaconst struct stw_pixelformat_info * 2980cf554fa9b31dbac1890f496974392001e2df825José Fonsecastw_pixelformat_get_info( int iPixelFormat ) 299db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca{ 3000cf554fa9b31dbac1890f496974392001e2df825José Fonseca int index; 3010cf554fa9b31dbac1890f496974392001e2df825José Fonseca 3020cf554fa9b31dbac1890f496974392001e2df825José Fonseca if (iPixelFormat <= 0) { 3030cf554fa9b31dbac1890f496974392001e2df825José Fonseca return NULL; 3040cf554fa9b31dbac1890f496974392001e2df825José Fonseca } 3050cf554fa9b31dbac1890f496974392001e2df825José Fonseca 3060cf554fa9b31dbac1890f496974392001e2df825José Fonseca index = iPixelFormat - 1; 3070cf554fa9b31dbac1890f496974392001e2df825José Fonseca if (index >= stw_dev->pixelformat_extended_count) { 3080cf554fa9b31dbac1890f496974392001e2df825José Fonseca return NULL; 3090cf554fa9b31dbac1890f496974392001e2df825José Fonseca } 310db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca 31187b04ce59b3ed26988b54ca182fab2e9dce03c38José Fonseca return &stw_dev->pixelformats[index]; 312db19578b52e7f3d6209568e2e0fa7a7107f42cd4José Fonseca} 313c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell 314c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell 31531f1571d1f6e325c16833afbb6e15b61561e5f1fJosé FonsecaLONG APIENTRY 31631f1571d1f6e325c16833afbb6e15b61561e5f1fJosé FonsecaDrvDescribePixelFormat( 317c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell HDC hdc, 31831f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca INT iPixelFormat, 31931f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca ULONG cjpfd, 32031f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca PIXELFORMATDESCRIPTOR *ppfd ) 321c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell{ 322c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell uint count; 323e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca const struct stw_pixelformat_info *pfi; 324c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell 325c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell (void) hdc; 326c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell 327e6b66210def2c10f703c2a990b9652ea5419ebbeJosé Fonseca if (!stw_dev) 328e6b66210def2c10f703c2a990b9652ea5419ebbeJosé Fonseca return 0; 329e6b66210def2c10f703c2a990b9652ea5419ebbeJosé Fonseca 3309646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca count = stw_pixelformat_get_count(); 331c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell 332c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell if (ppfd == NULL) 333c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell return count; 3340cf554fa9b31dbac1890f496974392001e2df825José Fonseca if (cjpfd != sizeof( PIXELFORMATDESCRIPTOR )) 335c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell return 0; 336c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell 3370cf554fa9b31dbac1890f496974392001e2df825José Fonseca pfi = stw_pixelformat_get_info( iPixelFormat ); 3380cf554fa9b31dbac1890f496974392001e2df825José Fonseca if (!pfi) { 3390cf554fa9b31dbac1890f496974392001e2df825José Fonseca return 0; 3400cf554fa9b31dbac1890f496974392001e2df825José Fonseca } 341e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca 342e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca memcpy(ppfd, &pfi->pfd, sizeof( PIXELFORMATDESCRIPTOR )); 343c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell 344c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell return count; 345c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell} 346c3d744f5bbdc24792183a9ee162ebc6cb5f8d1f6Keith Whitwell 34731f1571d1f6e325c16833afbb6e15b61561e5f1fJosé FonsecaBOOL APIENTRY 34831f1571d1f6e325c16833afbb6e15b61561e5f1fJosé FonsecaDrvDescribeLayerPlane( 34931f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca HDC hdc, 35031f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca INT iPixelFormat, 35131f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca INT iLayerPlane, 35231f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca UINT nBytes, 35331f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca LPLAYERPLANEDESCRIPTOR plpd ) 35431f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca{ 35531f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca assert(0); 35631f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca return FALSE; 35731f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca} 35831f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca 35931f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonsecaint APIENTRY 36031f1571d1f6e325c16833afbb6e15b61561e5f1fJosé FonsecaDrvGetLayerPaletteEntries( 36131f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca HDC hdc, 36231f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca INT iLayerPlane, 36331f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca INT iStart, 36431f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca INT cEntries, 36531f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca COLORREF *pcr ) 36631f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca{ 36731f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca assert(0); 36831f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca return 0; 36931f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca} 37031f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca 37131f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonsecaint APIENTRY 37231f1571d1f6e325c16833afbb6e15b61561e5f1fJosé FonsecaDrvSetLayerPaletteEntries( 37331f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca HDC hdc, 37431f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca INT iLayerPlane, 37531f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca INT iStart, 37631f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca INT cEntries, 37731f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca CONST COLORREF *pcr ) 37831f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca{ 37931f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca assert(0); 38031f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca return 0; 38131f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca} 38231f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca 38331f1571d1f6e325c16833afbb6e15b61561e5f1fJosé FonsecaBOOL APIENTRY 38431f1571d1f6e325c16833afbb6e15b61561e5f1fJosé FonsecaDrvRealizeLayerPalette( 38531f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca HDC hdc, 38631f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca INT iLayerPlane, 38731f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca BOOL bRealize ) 38831f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca{ 38931f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca assert(0); 39031f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca return FALSE; 39131f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca} 39231f1571d1f6e325c16833afbb6e15b61561e5f1fJosé Fonseca 393906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell/* Only used by the wgl code, but have it here to avoid exporting the 394906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell * pixelformat.h functionality. 395906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell */ 396906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwellint stw_pixelformat_choose( HDC hdc, 397906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell CONST PIXELFORMATDESCRIPTOR *ppfd ) 398906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell{ 399906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell uint count; 400906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell uint index; 401906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell uint bestindex; 402906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell uint bestdelta; 403906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell 404906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell (void) hdc; 405906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell 4069646762261d976d34bee8c8b1dcda9656cec655cJosé Fonseca count = stw_pixelformat_get_extended_count(); 4070cf554fa9b31dbac1890f496974392001e2df825José Fonseca bestindex = 0; 4080dd81ec97b4fd88fa9267f409a115a98344bc2feJosé Fonseca bestdelta = ~0U; 409906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell 4100cf554fa9b31dbac1890f496974392001e2df825José Fonseca for (index = 1; index <= count; index++) { 411906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell uint delta = 0; 412e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca const struct stw_pixelformat_info *pfi = stw_pixelformat_get_info( index ); 413906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell 414906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell if (!(ppfd->dwFlags & PFD_DOUBLEBUFFER_DONTCARE) && 415906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell !!(ppfd->dwFlags & PFD_DOUBLEBUFFER) != 416e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca !!(pfi->pfd.dwFlags & PFD_DOUBLEBUFFER)) 417906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell continue; 418906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell 419e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca /* FIXME: Take in account individual channel bits */ 420e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca if (ppfd->cColorBits != pfi->pfd.cColorBits) 421906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell delta += 8; 422906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell 423e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca if (ppfd->cDepthBits != pfi->pfd.cDepthBits) 424906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell delta += 4; 425906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell 426e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca if (ppfd->cStencilBits != pfi->pfd.cStencilBits) 427906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell delta += 2; 428906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell 429e5d700721b05910f935c873ebb23d23f49961ebfJosé Fonseca if (ppfd->cAlphaBits != pfi->pfd.cAlphaBits) 430906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell delta++; 431906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell 432906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell if (delta < bestdelta) { 433906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell bestindex = index; 434906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell bestdelta = delta; 435906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell if (bestdelta == 0) 436906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell break; 437906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell } 438906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell } 439906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell 4400cf554fa9b31dbac1890f496974392001e2df825José Fonseca return bestindex; 441906230d16e8950004cb5e1deed14c78f7d9f2817Keith Whitwell} 442