1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/************************************************************************** 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * All Rights Reserved. 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * copy of this software and associated documentation files (the 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * "Software"), to deal in the Software without restriction, including 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * permit persons to whom the Software is furnished to do so, subject to 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * the following conditions: 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * The above copyright notice and this permission notice (including the 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * next paragraph) shall be included in all copies or substantial portions 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * of the Software. 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org **************************************************************************/ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_format.h" 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_defines.h" 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "pipe/p_screen.h" 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_format.h" 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_debug.h" 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "util/u_memory.h" 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "stw_icd.h" 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "stw_device.h" 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "stw_pixelformat.h" 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "stw_tls.h" 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct stw_pf_color_info 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_format format; 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char red; 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char green; 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char blue; 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char alpha; 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } bits; 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char red; 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char green; 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char blue; 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char alpha; 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } shift; 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstruct stw_pf_depth_info 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org enum pipe_format format; 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct { 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char depth; 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned char stencil; 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } bits; 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* NOTE: order matters, since in otherwise equal circumstances the first 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * format listed will get chosen */ 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const struct stw_pf_color_info 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstw_pf_color[] = { 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* no-alpha */ 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_B8G8R8X8_UNORM, { 8, 8, 8, 0}, {16, 8, 0, 0} }, 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_X8R8G8B8_UNORM, { 8, 8, 8, 0}, { 8, 16, 24, 0} }, 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_B5G6R5_UNORM, { 5, 6, 5, 0}, {11, 5, 0, 0} }, 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* alpha */ 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_B8G8R8A8_UNORM, { 8, 8, 8, 8}, {16, 8, 0, 24} }, 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_A8R8G8B8_UNORM, { 8, 8, 8, 8}, { 8, 16, 24, 0} }, 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#if 0 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_R10G10B10A2_UNORM, {10, 10, 10, 2}, { 0, 10, 20, 30} }, 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#endif 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_B5G5R5A1_UNORM, { 5, 5, 5, 1}, {10, 5, 0, 15} }, 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_B4G4R4A4_UNORM, { 4, 4, 4, 4}, {16, 4, 0, 12} } 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const struct stw_pf_color_info 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstw_pf_color_extended[] = { 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_R32G32B32A32_FLOAT, { 32, 32, 32, 32}, { 0, 32, 64, 96} } 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const struct stw_pf_depth_info 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstw_pf_depth_stencil[] = { 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* pure depth */ 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_Z32_UNORM, {32, 0} }, 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_X8Z24_UNORM, {24, 0} }, 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_Z24X8_UNORM, {24, 0} }, 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_Z16_UNORM, {16, 0} }, 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* combined depth-stencil */ 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_Z24_UNORM_S8_UINT, {24, 8} }, 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { PIPE_FORMAT_S8_UINT_Z24_UNORM, {24, 8} } 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const boolean 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstw_pf_doublebuffer[] = { 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FALSE, 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org TRUE, 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst unsigned 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstw_pf_multisample[] = { 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 4 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstw_pixelformat_add( 122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct stw_device *stw_dev, 123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean extended, 124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct stw_pf_color_info *color, 125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct stw_pf_depth_info *depth, 126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned accum, 127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean doublebuffer, 128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned samples ) 129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct stw_pixelformat_info *pfi; 131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(stw_dev->pixelformat_extended_count < STW_MAX_PIXELFORMATS); 133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if(stw_dev->pixelformat_extended_count >= STW_MAX_PIXELFORMATS) 134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(util_format_get_component_bits(color->format, UTIL_FORMAT_COLORSPACE_RGB, 0) == color->bits.red); 137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(util_format_get_component_bits(color->format, UTIL_FORMAT_COLORSPACE_RGB, 1) == color->bits.green); 138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(util_format_get_component_bits(color->format, UTIL_FORMAT_COLORSPACE_RGB, 2) == color->bits.blue); 139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(util_format_get_component_bits(color->format, UTIL_FORMAT_COLORSPACE_RGB, 3) == color->bits.alpha); 140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(util_format_get_component_bits(depth->format, UTIL_FORMAT_COLORSPACE_ZS, 0) == depth->bits.depth); 141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(util_format_get_component_bits(depth->format, UTIL_FORMAT_COLORSPACE_ZS, 1) == depth->bits.stencil); 142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi = &stw_dev->pixelformats[stw_dev->pixelformat_extended_count]; 144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memset(pfi, 0, sizeof *pfi); 146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.nSize = sizeof pfi->pfd; 148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.nVersion = 1; 149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.dwFlags = PFD_SUPPORT_OPENGL; 151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* TODO: also support non-native pixel formats */ 153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!extended) { 154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.dwFlags |= PFD_DRAW_TO_WINDOW; 155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* See http://www.opengl.org/pipeline/article/vol003_7/ */ 158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.dwFlags |= PFD_SUPPORT_COMPOSITION; 159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (doublebuffer) 161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.dwFlags |= PFD_DOUBLEBUFFER | PFD_SWAP_COPY; 162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.iPixelType = PFD_TYPE_RGBA; 164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cColorBits = color->bits.red + color->bits.green + color->bits.blue + color->bits.alpha; 166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cRedBits = color->bits.red; 167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cRedShift = color->shift.red; 168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cGreenBits = color->bits.green; 169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cGreenShift = color->shift.green; 170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cBlueBits = color->bits.blue; 171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cBlueShift = color->shift.blue; 172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cAlphaBits = color->bits.alpha; 173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cAlphaShift = color->shift.alpha; 174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cAccumBits = 4*accum; 175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cAccumRedBits = accum; 176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cAccumGreenBits = accum; 177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cAccumBlueBits = accum; 178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cAccumAlphaBits = accum; 179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cDepthBits = depth->bits.depth; 180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cStencilBits = depth->bits.stencil; 181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.cAuxBuffers = 0; 182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.iLayerType = 0; 183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.bReserved = 0; 184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.dwLayerMask = 0; 185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.dwVisibleMask = 0; 186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->pfd.dwDamageMask = 0; 187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* 189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * since state trackers can allocate depth/stencil/accum buffers, we provide 190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * only color buffers here 191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->stvis.buffer_mask = ST_ATTACHMENT_FRONT_LEFT_MASK; 193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (doublebuffer) 194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->stvis.buffer_mask |= ST_ATTACHMENT_BACK_LEFT_MASK; 195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->stvis.color_format = color->format; 197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->stvis.depth_stencil_format = depth->format; 198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->stvis.accum_format = (accum) ? 200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_FORMAT_R16G16B16A16_SNORM : PIPE_FORMAT_NONE; 201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->stvis.samples = samples; 203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi->stvis.render_buffer = ST_ATTACHMENT_INVALID; 204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ++stw_dev->pixelformat_extended_count; 206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if(!extended) { 208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ++stw_dev->pixelformat_count; 209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(stw_dev->pixelformat_count == stw_dev->pixelformat_extended_count); 210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/** 215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * Add the depth/stencil/accum/ms variants for a particular color format. 216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void 218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgadd_color_format_variants(const struct stw_pf_color_info *color, 219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org boolean extended) 220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org struct pipe_screen *screen = stw_dev->screen; 222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned ms, db, ds, acc; 223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned bind_flags = PIPE_BIND_RENDER_TARGET; 224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!extended) { 226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bind_flags |= PIPE_BIND_DISPLAY_TARGET; 227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!screen->is_format_supported(screen, color->format, 230f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, 0, bind_flags)) { 231f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 232f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 233f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 234f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (ms = 0; ms < Elements(stw_pf_multisample); ms++) { 235f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned samples = stw_pf_multisample[ms]; 236f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 237f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* FIXME: re-enabled MSAA when we can query it */ 238f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (samples) 239f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 240f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 241f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (db = 0; db < Elements(stw_pf_doublebuffer); db++) { 242f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned doublebuffer = stw_pf_doublebuffer[db]; 243f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 244f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (ds = 0; ds < Elements(stw_pf_depth_stencil); ds++) { 245f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct stw_pf_depth_info *depth = &stw_pf_depth_stencil[ds]; 246f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 247f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!screen->is_format_supported(screen, depth->format, 248f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_TEXTURE_2D, 0, 249f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIPE_BIND_DEPTH_STENCIL)) { 250f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 251f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 252f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 253f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (acc = 0; acc < 2; acc++) { 254f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org stw_pixelformat_add(stw_dev, extended, color, depth, 255f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org acc * 16, doublebuffer, samples); 256f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 257f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 258f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 259f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 260f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 261f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 262f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 263f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 264f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstw_pixelformat_init( void ) 265f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 266f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org unsigned i; 267f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 268f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( !stw_dev->pixelformat_count ); 269f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( !stw_dev->pixelformat_extended_count ); 270f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 271f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* normal, displayable formats */ 272f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < Elements(stw_pf_color); i++) { 273f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org add_color_format_variants(&stw_pf_color[i], FALSE); 274f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 275f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 276f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* extended, pbuffer-only formats */ 277f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (i = 0; i < Elements(stw_pf_color_extended); i++) { 278f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org add_color_format_variants(&stw_pf_color_extended[i], TRUE); 279f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 280f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 281f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( stw_dev->pixelformat_count <= stw_dev->pixelformat_extended_count ); 282f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert( stw_dev->pixelformat_extended_count <= STW_MAX_PIXELFORMATS ); 283f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 284f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 285f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orguint 286f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstw_pixelformat_get_count( void ) 287f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 288f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return stw_dev->pixelformat_count; 289f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 290f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 291f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orguint 292f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstw_pixelformat_get_extended_count( void ) 293f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 294f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return stw_dev->pixelformat_extended_count; 295f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 296f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 297f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgconst struct stw_pixelformat_info * 298f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstw_pixelformat_get_info( int iPixelFormat ) 299f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 300f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org int index; 301f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 302f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (iPixelFormat <= 0) { 303f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 304f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 305f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 306f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org index = iPixelFormat - 1; 307f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (index >= stw_dev->pixelformat_extended_count) { 308f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return NULL; 309f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 310f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 311f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return &stw_dev->pixelformats[index]; 312f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 313f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 314f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 315f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgLONG APIENTRY 316f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgDrvDescribePixelFormat( 317f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org HDC hdc, 318f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INT iPixelFormat, 319f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ULONG cjpfd, 320f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org PIXELFORMATDESCRIPTOR *ppfd ) 321f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 322f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint count; 323f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct stw_pixelformat_info *pfi; 324f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 325f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) hdc; 326f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 327f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!stw_dev) 328f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 329f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 330f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org count = stw_pixelformat_get_count(); 331f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 332f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ppfd == NULL) 333f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return count; 334f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (cjpfd != sizeof( PIXELFORMATDESCRIPTOR )) 335f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 336f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 337f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org pfi = stw_pixelformat_get_info( iPixelFormat ); 338f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!pfi) { 339f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 340f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 341f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 342f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org memcpy(ppfd, &pfi->pfd, sizeof( PIXELFORMATDESCRIPTOR )); 343f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 344f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return count; 345f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 346f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 347f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgBOOL APIENTRY 348f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgDrvDescribeLayerPlane( 349f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org HDC hdc, 350f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INT iPixelFormat, 351f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INT iLayerPlane, 352f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org UINT nBytes, 353f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LPLAYERPLANEDESCRIPTOR plpd ) 354f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 355f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 356f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 357f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 358f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 359f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint APIENTRY 360f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgDrvGetLayerPaletteEntries( 361f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org HDC hdc, 362f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INT iLayerPlane, 363f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INT iStart, 364f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INT cEntries, 365f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org COLORREF *pcr ) 366f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 367f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 368f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 369f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 370f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 371f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint APIENTRY 372f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgDrvSetLayerPaletteEntries( 373f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org HDC hdc, 374f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INT iLayerPlane, 375f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INT iStart, 376f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INT cEntries, 377f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CONST COLORREF *pcr ) 378f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 379f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 380f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return 0; 381f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 382f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 383f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgBOOL APIENTRY 384f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgDrvRealizeLayerPalette( 385f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org HDC hdc, 386f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org INT iLayerPlane, 387f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org BOOL bRealize ) 388f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 389f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org assert(0); 390f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return FALSE; 391f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 392f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 393f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Only used by the wgl code, but have it here to avoid exporting the 394f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org * pixelformat.h functionality. 395f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org */ 396f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgint stw_pixelformat_choose( HDC hdc, 397f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org CONST PIXELFORMATDESCRIPTOR *ppfd ) 398f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 399f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint count; 400f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint index; 401f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint bestindex; 402f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint bestdelta; 403f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 404f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (void) hdc; 405f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 406f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org count = stw_pixelformat_get_extended_count(); 407f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bestindex = 0; 408f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bestdelta = ~0U; 409f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 410f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org for (index = 1; index <= count; index++) { 411f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org uint delta = 0; 412f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org const struct stw_pixelformat_info *pfi = stw_pixelformat_get_info( index ); 413f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 414f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!(ppfd->dwFlags & PFD_DOUBLEBUFFER_DONTCARE) && 415f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org !!(ppfd->dwFlags & PFD_DOUBLEBUFFER) != 416f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org !!(pfi->pfd.dwFlags & PFD_DOUBLEBUFFER)) 417f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org continue; 418f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 419f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org /* FIXME: Take in account individual channel bits */ 420f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ppfd->cColorBits != pfi->pfd.cColorBits) 421f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delta += 8; 422f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 423f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ppfd->cDepthBits != pfi->pfd.cDepthBits) 424f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delta += 4; 425f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 426f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ppfd->cStencilBits != pfi->pfd.cStencilBits) 427f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delta += 2; 428f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 429f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (ppfd->cAlphaBits != pfi->pfd.cAlphaBits) 430f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org delta++; 431f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 432f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (delta < bestdelta) { 433f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bestindex = index; 434f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org bestdelta = delta; 435f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (bestdelta == 0) 436f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org break; 437f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 438f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org } 439f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 440f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return bestindex; 441f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 442