formats.c revision c28d78f8324cfc17936af63c258a1cc55d590d60
1813870fd9588de101f68728507cff726d7513695Brian Paul/* 2813870fd9588de101f68728507cff726d7513695Brian Paul * Mesa 3-D graphics library 3813870fd9588de101f68728507cff726d7513695Brian Paul * Version: 7.7 4813870fd9588de101f68728507cff726d7513695Brian Paul * 5813870fd9588de101f68728507cff726d7513695Brian Paul * Copyright (C) 1999-2008 Brian Paul All Rights Reserved. 6813870fd9588de101f68728507cff726d7513695Brian Paul * Copyright (c) 2008-2009 VMware, Inc. 7813870fd9588de101f68728507cff726d7513695Brian Paul * 8813870fd9588de101f68728507cff726d7513695Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 9813870fd9588de101f68728507cff726d7513695Brian Paul * copy of this software and associated documentation files (the "Software"), 10813870fd9588de101f68728507cff726d7513695Brian Paul * to deal in the Software without restriction, including without limitation 11813870fd9588de101f68728507cff726d7513695Brian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 12813870fd9588de101f68728507cff726d7513695Brian Paul * and/or sell copies of the Software, and to permit persons to whom the 13813870fd9588de101f68728507cff726d7513695Brian Paul * Software is furnished to do so, subject to the following conditions: 14813870fd9588de101f68728507cff726d7513695Brian Paul * 15813870fd9588de101f68728507cff726d7513695Brian Paul * The above copyright notice and this permission notice shall be included 16813870fd9588de101f68728507cff726d7513695Brian Paul * in all copies or substantial portions of the Software. 17813870fd9588de101f68728507cff726d7513695Brian Paul * 18813870fd9588de101f68728507cff726d7513695Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19813870fd9588de101f68728507cff726d7513695Brian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20813870fd9588de101f68728507cff726d7513695Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 21813870fd9588de101f68728507cff726d7513695Brian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 22813870fd9588de101f68728507cff726d7513695Brian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 23813870fd9588de101f68728507cff726d7513695Brian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24813870fd9588de101f68728507cff726d7513695Brian Paul */ 25813870fd9588de101f68728507cff726d7513695Brian Paul 26813870fd9588de101f68728507cff726d7513695Brian Paul 27c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul#include "imports.h" 28813870fd9588de101f68728507cff726d7513695Brian Paul#include "formats.h" 29813870fd9588de101f68728507cff726d7513695Brian Paul#include "config.h" 30813870fd9588de101f68728507cff726d7513695Brian Paul#include "texstore.h" 31813870fd9588de101f68728507cff726d7513695Brian Paul 32813870fd9588de101f68728507cff726d7513695Brian Paul 33813870fd9588de101f68728507cff726d7513695Brian Paul/** 34813870fd9588de101f68728507cff726d7513695Brian Paul * Info about each format. 35813870fd9588de101f68728507cff726d7513695Brian Paul * These must be in the same order as the MESA_FORMAT_* enums so that 36813870fd9588de101f68728507cff726d7513695Brian Paul * we can do lookups without searching. 37813870fd9588de101f68728507cff726d7513695Brian Paul */ 38813870fd9588de101f68728507cff726d7513695Brian Paulstatic struct gl_format_info format_info[MESA_FORMAT_COUNT] = 39813870fd9588de101f68728507cff726d7513695Brian Paul{ 40813870fd9588de101f68728507cff726d7513695Brian Paul { 41e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul MESA_FORMAT_NONE, /* Name */ 42e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul GL_NONE, /* BaseFormat */ 43e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul GL_NONE, /* DataType */ 44e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ 45e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 46e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul 0, 0, 0 /* BlockWidth/Height,Bytes */ 47e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul }, 48e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul { 49813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGBA8888, /* Name */ 50813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, /* BaseFormat */ 51813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 52813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */ 53813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 54813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 /* BlockWidth/Height,Bytes */ 55813870fd9588de101f68728507cff726d7513695Brian Paul }, 56813870fd9588de101f68728507cff726d7513695Brian Paul { 57813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGBA8888_REV, /* Name */ 58813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, /* BaseFormat */ 59813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 60813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */ 61813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 62813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 /* BlockWidth/Height,Bytes */ 63813870fd9588de101f68728507cff726d7513695Brian Paul }, 64813870fd9588de101f68728507cff726d7513695Brian Paul { 65813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_ARGB8888, /* Name */ 66813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, /* BaseFormat */ 67813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 68813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */ 69813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 70813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 /* BlockWidth/Height,Bytes */ 71813870fd9588de101f68728507cff726d7513695Brian Paul }, 72813870fd9588de101f68728507cff726d7513695Brian Paul { 73813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_ARGB8888_REV, /* Name */ 74813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, /* BaseFormat */ 75813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 76813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 8, /* Red/Green/Blue/AlphaBits */ 77813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 78813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 /* BlockWidth/Height,Bytes */ 79813870fd9588de101f68728507cff726d7513695Brian Paul }, 80813870fd9588de101f68728507cff726d7513695Brian Paul { 81813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGB888, /* Name */ 82813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, /* BaseFormat */ 83813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 84813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */ 85813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 86813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 3 /* BlockWidth/Height,Bytes */ 87813870fd9588de101f68728507cff726d7513695Brian Paul }, 88813870fd9588de101f68728507cff726d7513695Brian Paul { 89813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_BGR888, /* Name */ 90813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, /* BaseFormat */ 91813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 92813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 0, /* Red/Green/Blue/AlphaBits */ 93813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 94813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 3 /* BlockWidth/Height,Bytes */ 95813870fd9588de101f68728507cff726d7513695Brian Paul }, 96813870fd9588de101f68728507cff726d7513695Brian Paul { 97813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGB565, /* Name */ 98813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, /* BaseFormat */ 99813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 100813870fd9588de101f68728507cff726d7513695Brian Paul 5, 6, 5, 0, /* Red/Green/Blue/AlphaBits */ 101813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 102813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 103813870fd9588de101f68728507cff726d7513695Brian Paul }, 104813870fd9588de101f68728507cff726d7513695Brian Paul { 105813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGB565_REV, /* Name */ 106813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, /* BaseFormat */ 107813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 108813870fd9588de101f68728507cff726d7513695Brian Paul 5, 6, 5, 0, /* Red/Green/Blue/AlphaBits */ 109813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 110813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 111813870fd9588de101f68728507cff726d7513695Brian Paul }, 112813870fd9588de101f68728507cff726d7513695Brian Paul { 113813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGBA4444, /* Name */ 114813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, /* BaseFormat */ 115813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 116813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */ 117813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 118813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 119813870fd9588de101f68728507cff726d7513695Brian Paul }, 120813870fd9588de101f68728507cff726d7513695Brian Paul { 121813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_ARGB4444, /* Name */ 122813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, /* BaseFormat */ 123813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 124813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */ 125813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 126813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 127813870fd9588de101f68728507cff726d7513695Brian Paul }, 128813870fd9588de101f68728507cff726d7513695Brian Paul { 129813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_ARGB4444_REV, /* Name */ 130813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, /* BaseFormat */ 131813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 132813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 4, 4, /* Red/Green/Blue/AlphaBits */ 133813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 134813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 135813870fd9588de101f68728507cff726d7513695Brian Paul }, 136813870fd9588de101f68728507cff726d7513695Brian Paul { 137813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGBA5551, /* Name */ 138813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, /* BaseFormat */ 139813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 140813870fd9588de101f68728507cff726d7513695Brian Paul 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */ 141813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 142813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 143813870fd9588de101f68728507cff726d7513695Brian Paul }, 144813870fd9588de101f68728507cff726d7513695Brian Paul { 145813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_ARGB1555, /* Name */ 146813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, /* BaseFormat */ 147813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 148813870fd9588de101f68728507cff726d7513695Brian Paul 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */ 149813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 150813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 151813870fd9588de101f68728507cff726d7513695Brian Paul }, 152813870fd9588de101f68728507cff726d7513695Brian Paul { 153813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_ARGB1555_REV, /* Name */ 154813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, /* BaseFormat */ 155813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 156813870fd9588de101f68728507cff726d7513695Brian Paul 5, 5, 5, 1, /* Red/Green/Blue/AlphaBits */ 157813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 158813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 159813870fd9588de101f68728507cff726d7513695Brian Paul }, 160813870fd9588de101f68728507cff726d7513695Brian Paul { 161813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_AL88, /* Name */ 162813870fd9588de101f68728507cff726d7513695Brian Paul GL_LUMINANCE_ALPHA, /* BaseFormat */ 163813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 164813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */ 165813870fd9588de101f68728507cff726d7513695Brian Paul 8, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 166813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 167813870fd9588de101f68728507cff726d7513695Brian Paul }, 168813870fd9588de101f68728507cff726d7513695Brian Paul { 169813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_AL88_REV, /* Name */ 170813870fd9588de101f68728507cff726d7513695Brian Paul GL_LUMINANCE_ALPHA, /* BaseFormat */ 171813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 172813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */ 173813870fd9588de101f68728507cff726d7513695Brian Paul 8, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 174813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 175813870fd9588de101f68728507cff726d7513695Brian Paul }, 176813870fd9588de101f68728507cff726d7513695Brian Paul { 177813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGB332, /* Name */ 178813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, /* BaseFormat */ 179813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 180813870fd9588de101f68728507cff726d7513695Brian Paul 3, 3, 2, 0, /* Red/Green/Blue/AlphaBits */ 181813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 182813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 1 /* BlockWidth/Height,Bytes */ 183813870fd9588de101f68728507cff726d7513695Brian Paul }, 184813870fd9588de101f68728507cff726d7513695Brian Paul { 185813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_A8, /* Name */ 186813870fd9588de101f68728507cff726d7513695Brian Paul GL_ALPHA, /* BaseFormat */ 187813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 188813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 8, /* Red/Green/Blue/AlphaBits */ 189813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 190813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 1 /* BlockWidth/Height,Bytes */ 191813870fd9588de101f68728507cff726d7513695Brian Paul }, 192813870fd9588de101f68728507cff726d7513695Brian Paul { 193813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_L8, /* Name */ 194813870fd9588de101f68728507cff726d7513695Brian Paul GL_LUMINANCE, /* BaseFormat */ 195813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 196813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ 197813870fd9588de101f68728507cff726d7513695Brian Paul 8, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 198813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 1 /* BlockWidth/Height,Bytes */ 199813870fd9588de101f68728507cff726d7513695Brian Paul }, 200813870fd9588de101f68728507cff726d7513695Brian Paul { 201813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_I8, /* Name */ 202813870fd9588de101f68728507cff726d7513695Brian Paul GL_INTENSITY, /* BaseFormat */ 203813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 204813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ 205813870fd9588de101f68728507cff726d7513695Brian Paul 0, 8, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 206813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 1 /* BlockWidth/Height,Bytes */ 207813870fd9588de101f68728507cff726d7513695Brian Paul }, 208813870fd9588de101f68728507cff726d7513695Brian Paul { 209813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_CI8, /* Name */ 210813870fd9588de101f68728507cff726d7513695Brian Paul GL_COLOR_INDEX, /* BaseFormat */ 211813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_INT, /* DataType */ 212813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ 213813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 8, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 214813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 1 /* BlockWidth/Height,Bytes */ 215813870fd9588de101f68728507cff726d7513695Brian Paul }, 216813870fd9588de101f68728507cff726d7513695Brian Paul { 217813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_YCBCR, /* Name */ 218813870fd9588de101f68728507cff726d7513695Brian Paul GL_YCBCR_MESA, /* BaseFormat */ 219813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 220813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ 221813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 222813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 223813870fd9588de101f68728507cff726d7513695Brian Paul }, 224813870fd9588de101f68728507cff726d7513695Brian Paul { 225813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_YCBCR_REV, /* Name */ 226813870fd9588de101f68728507cff726d7513695Brian Paul GL_YCBCR_MESA, /* BaseFormat */ 227813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 228813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ 229813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 230813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 231813870fd9588de101f68728507cff726d7513695Brian Paul }, 232813870fd9588de101f68728507cff726d7513695Brian Paul { 233813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_Z24_S8, /* Name */ 234813870fd9588de101f68728507cff726d7513695Brian Paul GL_DEPTH_STENCIL, /* BaseFormat */ 235813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_INT, /* DataType */ 236813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ 237813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 24, 8, /* Lum/Int/Index/Depth/StencilBits */ 238813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 /* BlockWidth/Height,Bytes */ 239813870fd9588de101f68728507cff726d7513695Brian Paul }, 240813870fd9588de101f68728507cff726d7513695Brian Paul { 241813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_S8_Z24, /* Name */ 242813870fd9588de101f68728507cff726d7513695Brian Paul GL_DEPTH_STENCIL, /* BaseFormat */ 243813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_INT, /* DataType */ 244813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ 245813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 24, 8, /* Lum/Int/Index/Depth/StencilBits */ 246813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 /* BlockWidth/Height,Bytes */ 247813870fd9588de101f68728507cff726d7513695Brian Paul }, 248813870fd9588de101f68728507cff726d7513695Brian Paul { 249813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_Z16, /* Name */ 250813870fd9588de101f68728507cff726d7513695Brian Paul GL_DEPTH_COMPONENT, /* BaseFormat */ 251813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_INT, /* DataType */ 252813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ 253813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 16, 0, /* Lum/Int/Index/Depth/StencilBits */ 254813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 /* BlockWidth/Height,Bytes */ 255813870fd9588de101f68728507cff726d7513695Brian Paul }, 256813870fd9588de101f68728507cff726d7513695Brian Paul { 257813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_Z32, /* Name */ 258813870fd9588de101f68728507cff726d7513695Brian Paul GL_DEPTH_COMPONENT, /* BaseFormat */ 259813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_INT, /* DataType */ 260813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ 261813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 32, 0, /* Lum/Int/Index/Depth/StencilBits */ 262813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 /* BlockWidth/Height,Bytes */ 263813870fd9588de101f68728507cff726d7513695Brian Paul }, 264813870fd9588de101f68728507cff726d7513695Brian Paul { 265813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_S8, /* Name */ 266813870fd9588de101f68728507cff726d7513695Brian Paul GL_STENCIL_INDEX, /* BaseFormat */ 267813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_INT, /* DataType */ 268813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, /* Red/Green/Blue/AlphaBits */ 269813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 8, /* Lum/Int/Index/Depth/StencilBits */ 270813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 1 /* BlockWidth/Height,Bytes */ 271813870fd9588de101f68728507cff726d7513695Brian Paul }, 272813870fd9588de101f68728507cff726d7513695Brian Paul 273813870fd9588de101f68728507cff726d7513695Brian Paul#if FEATURE_EXT_texture_sRGB 274813870fd9588de101f68728507cff726d7513695Brian Paul { 275813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_SRGB8, 276813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, 277813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 278813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 0, 279813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 280813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 3 281813870fd9588de101f68728507cff726d7513695Brian Paul }, 282813870fd9588de101f68728507cff726d7513695Brian Paul { 283813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_SRGBA8, 284813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 285813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 286813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 8, 287813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 288813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 289813870fd9588de101f68728507cff726d7513695Brian Paul }, 290813870fd9588de101f68728507cff726d7513695Brian Paul { 291813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_SARGB8, 292813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 293813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 294813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 8, 295813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 296813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 297813870fd9588de101f68728507cff726d7513695Brian Paul }, 298813870fd9588de101f68728507cff726d7513695Brian Paul { 299813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_SL8, 300813870fd9588de101f68728507cff726d7513695Brian Paul GL_LUMINANCE_ALPHA, 301813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 302813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 8, 303813870fd9588de101f68728507cff726d7513695Brian Paul 8, 0, 0, 0, 0, 304813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 305813870fd9588de101f68728507cff726d7513695Brian Paul }, 306813870fd9588de101f68728507cff726d7513695Brian Paul { 307813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_SLA8, 308813870fd9588de101f68728507cff726d7513695Brian Paul GL_LUMINANCE_ALPHA, 309813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 310813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 8, 311813870fd9588de101f68728507cff726d7513695Brian Paul 8, 0, 0, 0, 0, 312813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 313813870fd9588de101f68728507cff726d7513695Brian Paul }, 314813870fd9588de101f68728507cff726d7513695Brian Paul#if FEATURE_texture_s3tc 315813870fd9588de101f68728507cff726d7513695Brian Paul { 316813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_SRGB_DXT1, /* Name */ 317813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, /* BaseFormat */ 318813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 319813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 4, 0, /* approx Red/Green/Blue/AlphaBits */ 320813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 321813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 8 /* 8 bytes per 4x4 block */ 322813870fd9588de101f68728507cff726d7513695Brian Paul }, 323813870fd9588de101f68728507cff726d7513695Brian Paul { 324813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_SRGBA_DXT1, 325813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 326813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 327813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 4, 4, 328813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 329813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 8 /* 8 bytes per 4x4 block */ 330813870fd9588de101f68728507cff726d7513695Brian Paul }, 331813870fd9588de101f68728507cff726d7513695Brian Paul { 332813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_SRGBA_DXT3, 333813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 334813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 335813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 4, 4, 336813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 337813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 16 /* 16 bytes per 4x4 block */ 338813870fd9588de101f68728507cff726d7513695Brian Paul }, 339813870fd9588de101f68728507cff726d7513695Brian Paul { 340813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_SRGBA_DXT5, 341813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 342813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 343813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 4, 4, 344813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 345813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 16 /* 16 bytes per 4x4 block */ 346813870fd9588de101f68728507cff726d7513695Brian Paul }, 347813870fd9588de101f68728507cff726d7513695Brian Paul#endif 348813870fd9588de101f68728507cff726d7513695Brian Paul#endif 349813870fd9588de101f68728507cff726d7513695Brian Paul 350813870fd9588de101f68728507cff726d7513695Brian Paul#if FEATURE_texture_fxt1 351813870fd9588de101f68728507cff726d7513695Brian Paul { 352813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGB_FXT1, 353813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, 354813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 355813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 0, 356813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 357813870fd9588de101f68728507cff726d7513695Brian Paul 8, 4, 16 /* 16 bytes per 8x4 block */ 358813870fd9588de101f68728507cff726d7513695Brian Paul }, 359813870fd9588de101f68728507cff726d7513695Brian Paul { 360813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGBA_FXT1, 361813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 362813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 363813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 8, 364813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 365813870fd9588de101f68728507cff726d7513695Brian Paul 8, 4, 16 /* 16 bytes per 8x4 block */ 366813870fd9588de101f68728507cff726d7513695Brian Paul }, 367813870fd9588de101f68728507cff726d7513695Brian Paul#endif 368813870fd9588de101f68728507cff726d7513695Brian Paul 369813870fd9588de101f68728507cff726d7513695Brian Paul#if FEATURE_texture_s3tc 370813870fd9588de101f68728507cff726d7513695Brian Paul { 371813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGB_DXT1, /* Name */ 372813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, /* BaseFormat */ 373813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, /* DataType */ 374813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 4, 0, /* approx Red/Green/Blue/AlphaBits */ 375813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, /* Lum/Int/Index/Depth/StencilBits */ 376813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 8 /* 8 bytes per 4x4 block */ 377813870fd9588de101f68728507cff726d7513695Brian Paul }, 378813870fd9588de101f68728507cff726d7513695Brian Paul { 379813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGBA_DXT1, 380813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 381813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 382813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 4, 4, 383813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 384813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 8 /* 8 bytes per 4x4 block */ 385813870fd9588de101f68728507cff726d7513695Brian Paul }, 386813870fd9588de101f68728507cff726d7513695Brian Paul { 387813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGBA_DXT3, 388813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 389813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 390813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 4, 4, 391813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 392813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 16 /* 16 bytes per 4x4 block */ 393813870fd9588de101f68728507cff726d7513695Brian Paul }, 394813870fd9588de101f68728507cff726d7513695Brian Paul { 395813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGBA_DXT5, 396813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 397813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 398813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 4, 4, 399813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 400813870fd9588de101f68728507cff726d7513695Brian Paul 4, 4, 16 /* 16 bytes per 4x4 block */ 401813870fd9588de101f68728507cff726d7513695Brian Paul }, 402813870fd9588de101f68728507cff726d7513695Brian Paul#endif 403813870fd9588de101f68728507cff726d7513695Brian Paul 404813870fd9588de101f68728507cff726d7513695Brian Paul { 405813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGBA, 406813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 407813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 408813870fd9588de101f68728507cff726d7513695Brian Paul CHAN_BITS, CHAN_BITS, CHAN_BITS, CHAN_BITS, 409813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 410813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 * CHAN_BITS / 8 411813870fd9588de101f68728507cff726d7513695Brian Paul }, 412813870fd9588de101f68728507cff726d7513695Brian Paul { 413813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGB, 414813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, 415813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 416813870fd9588de101f68728507cff726d7513695Brian Paul CHAN_BITS, CHAN_BITS, CHAN_BITS, 0, 417813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 418813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 3 * CHAN_BITS / 8 419813870fd9588de101f68728507cff726d7513695Brian Paul }, 420813870fd9588de101f68728507cff726d7513695Brian Paul { 421813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_ALPHA, 422813870fd9588de101f68728507cff726d7513695Brian Paul GL_ALPHA, 423813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 424813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, CHAN_BITS, 425813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 426813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 1 * CHAN_BITS / 8 427813870fd9588de101f68728507cff726d7513695Brian Paul }, 428813870fd9588de101f68728507cff726d7513695Brian Paul { 429813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_LUMINANCE, 430813870fd9588de101f68728507cff726d7513695Brian Paul GL_LUMINANCE, 431813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 432813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 433813870fd9588de101f68728507cff726d7513695Brian Paul CHAN_BITS, 0, 0, 0, 0, 434813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 1 * CHAN_BITS / 8 435813870fd9588de101f68728507cff726d7513695Brian Paul }, 436813870fd9588de101f68728507cff726d7513695Brian Paul { 437813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_LUMINANCE_ALPHA, 438813870fd9588de101f68728507cff726d7513695Brian Paul GL_LUMINANCE_ALPHA, 439813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 440813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, CHAN_BITS, 441813870fd9588de101f68728507cff726d7513695Brian Paul CHAN_BITS, 0, 0, 0, 0, 442813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 * CHAN_BITS / 8 443813870fd9588de101f68728507cff726d7513695Brian Paul }, 444813870fd9588de101f68728507cff726d7513695Brian Paul { 445813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_INTENSITY, 446813870fd9588de101f68728507cff726d7513695Brian Paul GL_INTENSITY, 447813870fd9588de101f68728507cff726d7513695Brian Paul GL_UNSIGNED_NORMALIZED, 448813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 449813870fd9588de101f68728507cff726d7513695Brian Paul 0, CHAN_BITS, 0, 0, 0, 450813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 1 * CHAN_BITS / 8 451813870fd9588de101f68728507cff726d7513695Brian Paul }, 452813870fd9588de101f68728507cff726d7513695Brian Paul { 453813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGBA_FLOAT32, 454813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 455813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 456813870fd9588de101f68728507cff726d7513695Brian Paul 32, 32, 32, 32, 457813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 458813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 16 459813870fd9588de101f68728507cff726d7513695Brian Paul }, 460813870fd9588de101f68728507cff726d7513695Brian Paul { 461813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGBA_FLOAT16, 462813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 463813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 464813870fd9588de101f68728507cff726d7513695Brian Paul 16, 16, 16, 16, 465813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 466813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 8 467813870fd9588de101f68728507cff726d7513695Brian Paul }, 468813870fd9588de101f68728507cff726d7513695Brian Paul { 469813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGB_FLOAT32, 470813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, 471813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 472813870fd9588de101f68728507cff726d7513695Brian Paul 32, 32, 32, 0, 473813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 474813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 12 475813870fd9588de101f68728507cff726d7513695Brian Paul }, 476813870fd9588de101f68728507cff726d7513695Brian Paul { 477813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_RGB_FLOAT16, 478813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGB, 479813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 480813870fd9588de101f68728507cff726d7513695Brian Paul 16, 16, 16, 0, 481813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 482813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 6 483813870fd9588de101f68728507cff726d7513695Brian Paul }, 484813870fd9588de101f68728507cff726d7513695Brian Paul { 485813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_ALPHA_FLOAT32, 486813870fd9588de101f68728507cff726d7513695Brian Paul GL_ALPHA, 487813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 488813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 32, 489813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 490813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 491813870fd9588de101f68728507cff726d7513695Brian Paul }, 492813870fd9588de101f68728507cff726d7513695Brian Paul { 493813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_ALPHA_FLOAT16, 494813870fd9588de101f68728507cff726d7513695Brian Paul GL_ALPHA, 495813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 496813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 16, 497813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 498813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 499813870fd9588de101f68728507cff726d7513695Brian Paul }, 500813870fd9588de101f68728507cff726d7513695Brian Paul { 501813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_LUMINANCE_FLOAT32, 502813870fd9588de101f68728507cff726d7513695Brian Paul GL_ALPHA, 503813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 504813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 505813870fd9588de101f68728507cff726d7513695Brian Paul 32, 0, 0, 0, 0, 506813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 507813870fd9588de101f68728507cff726d7513695Brian Paul }, 508813870fd9588de101f68728507cff726d7513695Brian Paul { 509813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_LUMINANCE_FLOAT16, 510813870fd9588de101f68728507cff726d7513695Brian Paul GL_ALPHA, 511813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 512813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 513813870fd9588de101f68728507cff726d7513695Brian Paul 16, 0, 0, 0, 0, 514813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 515813870fd9588de101f68728507cff726d7513695Brian Paul }, 516813870fd9588de101f68728507cff726d7513695Brian Paul { 517813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32, 518813870fd9588de101f68728507cff726d7513695Brian Paul GL_LUMINANCE_ALPHA, 519813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 520813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 32, 521813870fd9588de101f68728507cff726d7513695Brian Paul 32, 0, 0, 0, 0, 522813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 8 523813870fd9588de101f68728507cff726d7513695Brian Paul }, 524813870fd9588de101f68728507cff726d7513695Brian Paul { 525813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16, 526813870fd9588de101f68728507cff726d7513695Brian Paul GL_LUMINANCE_ALPHA, 527813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 528813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 16, 529813870fd9588de101f68728507cff726d7513695Brian Paul 16, 0, 0, 0, 0, 530813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 531813870fd9588de101f68728507cff726d7513695Brian Paul }, 532813870fd9588de101f68728507cff726d7513695Brian Paul { 533813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_INTENSITY_FLOAT32, 534813870fd9588de101f68728507cff726d7513695Brian Paul GL_INTENSITY, 535813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 536813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 537813870fd9588de101f68728507cff726d7513695Brian Paul 0, 32, 0, 0, 0, 538813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 539813870fd9588de101f68728507cff726d7513695Brian Paul }, 540813870fd9588de101f68728507cff726d7513695Brian Paul { 541813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_INTENSITY_FLOAT16, 542813870fd9588de101f68728507cff726d7513695Brian Paul GL_INTENSITY, 543813870fd9588de101f68728507cff726d7513695Brian Paul GL_FLOAT, 544813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 545813870fd9588de101f68728507cff726d7513695Brian Paul 0, 16, 0, 0, 0, 546813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 547813870fd9588de101f68728507cff726d7513695Brian Paul }, 548813870fd9588de101f68728507cff726d7513695Brian Paul 549813870fd9588de101f68728507cff726d7513695Brian Paul { 550813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_DUDV8, 551813870fd9588de101f68728507cff726d7513695Brian Paul GL_DUDV_ATI, 552813870fd9588de101f68728507cff726d7513695Brian Paul GL_SIGNED_NORMALIZED, 553813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 554813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 555813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 2 556813870fd9588de101f68728507cff726d7513695Brian Paul }, 557813870fd9588de101f68728507cff726d7513695Brian Paul 558813870fd9588de101f68728507cff726d7513695Brian Paul { 559813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_SIGNED_RGBA8888, 560813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 561813870fd9588de101f68728507cff726d7513695Brian Paul GL_SIGNED_NORMALIZED, 562813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 8, 563813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 564813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 565813870fd9588de101f68728507cff726d7513695Brian Paul }, 566813870fd9588de101f68728507cff726d7513695Brian Paul { 567813870fd9588de101f68728507cff726d7513695Brian Paul MESA_FORMAT_SIGNED_RGBA8888_REV, 568813870fd9588de101f68728507cff726d7513695Brian Paul GL_RGBA, 569813870fd9588de101f68728507cff726d7513695Brian Paul GL_SIGNED_NORMALIZED, 570813870fd9588de101f68728507cff726d7513695Brian Paul 8, 8, 8, 8, 571813870fd9588de101f68728507cff726d7513695Brian Paul 0, 0, 0, 0, 0, 572813870fd9588de101f68728507cff726d7513695Brian Paul 1, 1, 4 573813870fd9588de101f68728507cff726d7513695Brian Paul }, 574813870fd9588de101f68728507cff726d7513695Brian Paul 575813870fd9588de101f68728507cff726d7513695Brian Paul}; 576813870fd9588de101f68728507cff726d7513695Brian Paul 577813870fd9588de101f68728507cff726d7513695Brian Paul 578813870fd9588de101f68728507cff726d7513695Brian Paul 579813870fd9588de101f68728507cff726d7513695Brian Paulstatic const struct gl_format_info * 580813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_info(gl_format format) 581813870fd9588de101f68728507cff726d7513695Brian Paul{ 582813870fd9588de101f68728507cff726d7513695Brian Paul const struct gl_format_info *info = &format_info[format]; 583813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->Name == format); 584813870fd9588de101f68728507cff726d7513695Brian Paul return info; 585813870fd9588de101f68728507cff726d7513695Brian Paul} 586813870fd9588de101f68728507cff726d7513695Brian Paul 587813870fd9588de101f68728507cff726d7513695Brian Paul 588813870fd9588de101f68728507cff726d7513695Brian PaulGLuint 589813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_bytes(gl_format format) 590813870fd9588de101f68728507cff726d7513695Brian Paul{ 591813870fd9588de101f68728507cff726d7513695Brian Paul const struct gl_format_info *info = _mesa_get_format_info(format); 592813870fd9588de101f68728507cff726d7513695Brian Paul ASSERT(info->BytesPerBlock); 593813870fd9588de101f68728507cff726d7513695Brian Paul return info->BytesPerBlock; 594813870fd9588de101f68728507cff726d7513695Brian Paul} 595813870fd9588de101f68728507cff726d7513695Brian Paul 596813870fd9588de101f68728507cff726d7513695Brian Paul 597813870fd9588de101f68728507cff726d7513695Brian PaulGLenum 598813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_get_format_base_format(gl_format format) 599813870fd9588de101f68728507cff726d7513695Brian Paul{ 600813870fd9588de101f68728507cff726d7513695Brian Paul const struct gl_format_info *info = _mesa_get_format_info(format); 601813870fd9588de101f68728507cff726d7513695Brian Paul return info->BaseFormat; 602813870fd9588de101f68728507cff726d7513695Brian Paul} 603813870fd9588de101f68728507cff726d7513695Brian Paul 604813870fd9588de101f68728507cff726d7513695Brian Paul 605813870fd9588de101f68728507cff726d7513695Brian PaulGLboolean 606813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_is_format_compressed(gl_format format) 607813870fd9588de101f68728507cff726d7513695Brian Paul{ 608813870fd9588de101f68728507cff726d7513695Brian Paul const struct gl_format_info *info = _mesa_get_format_info(format); 609813870fd9588de101f68728507cff726d7513695Brian Paul return info->BlockWidth > 1 || info->BlockHeight > 1; 610813870fd9588de101f68728507cff726d7513695Brian Paul} 611813870fd9588de101f68728507cff726d7513695Brian Paul 612813870fd9588de101f68728507cff726d7513695Brian Paul 613813870fd9588de101f68728507cff726d7513695Brian Paul/** 614813870fd9588de101f68728507cff726d7513695Brian Paul * Do sanity checking of the format info table. 615813870fd9588de101f68728507cff726d7513695Brian Paul */ 616813870fd9588de101f68728507cff726d7513695Brian Paulvoid 617813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_test_formats(void) 618813870fd9588de101f68728507cff726d7513695Brian Paul{ 619813870fd9588de101f68728507cff726d7513695Brian Paul GLuint i; 620813870fd9588de101f68728507cff726d7513695Brian Paul 621813870fd9588de101f68728507cff726d7513695Brian Paul assert(Elements(format_info) == MESA_FORMAT_COUNT); 622813870fd9588de101f68728507cff726d7513695Brian Paul 623813870fd9588de101f68728507cff726d7513695Brian Paul for (i = 0; i < MESA_FORMAT_COUNT; i++) { 624813870fd9588de101f68728507cff726d7513695Brian Paul const struct gl_format_info *info = _mesa_get_format_info(i); 625813870fd9588de101f68728507cff726d7513695Brian Paul assert(info); 626813870fd9588de101f68728507cff726d7513695Brian Paul 627813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->Name == i); 628813870fd9588de101f68728507cff726d7513695Brian Paul 629e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul if (info->Name == MESA_FORMAT_NONE) 630e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul continue; 631e8eed5003b01fe8a4349711382411ac80b1c0aa3Brian Paul 632813870fd9588de101f68728507cff726d7513695Brian Paul if (info->BlockWidth == 1 && info->BlockHeight == 1) { 633813870fd9588de101f68728507cff726d7513695Brian Paul if (info->RedBits > 0) { 634813870fd9588de101f68728507cff726d7513695Brian Paul GLuint t = info->RedBits + info->GreenBits 635813870fd9588de101f68728507cff726d7513695Brian Paul + info->BlueBits + info->AlphaBits; 636813870fd9588de101f68728507cff726d7513695Brian Paul assert(t / 8 == info->BytesPerBlock); 637813870fd9588de101f68728507cff726d7513695Brian Paul } 638813870fd9588de101f68728507cff726d7513695Brian Paul } 639813870fd9588de101f68728507cff726d7513695Brian Paul 640813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->DataType == GL_UNSIGNED_NORMALIZED || 641813870fd9588de101f68728507cff726d7513695Brian Paul info->DataType == GL_SIGNED_NORMALIZED || 642813870fd9588de101f68728507cff726d7513695Brian Paul info->DataType == GL_UNSIGNED_INT || 643813870fd9588de101f68728507cff726d7513695Brian Paul info->DataType == GL_FLOAT); 644813870fd9588de101f68728507cff726d7513695Brian Paul 645813870fd9588de101f68728507cff726d7513695Brian Paul if (info->BaseFormat == GL_RGB) { 646813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->RedBits > 0); 647813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->GreenBits > 0); 648813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->BlueBits > 0); 649813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->AlphaBits == 0); 650813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->LuminanceBits == 0); 651813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->IntensityBits == 0); 652813870fd9588de101f68728507cff726d7513695Brian Paul } 653813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->BaseFormat == GL_RGBA) { 654813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->RedBits > 0); 655813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->GreenBits > 0); 656813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->BlueBits > 0); 657813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->AlphaBits > 0); 658813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->LuminanceBits == 0); 659813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->IntensityBits == 0); 660813870fd9588de101f68728507cff726d7513695Brian Paul } 661813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->BaseFormat == GL_LUMINANCE) { 662813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->RedBits == 0); 663813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->GreenBits == 0); 664813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->BlueBits == 0); 665813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->AlphaBits == 0); 666813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->LuminanceBits > 0); 667813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->IntensityBits == 0); 668813870fd9588de101f68728507cff726d7513695Brian Paul } 669813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->BaseFormat == GL_INTENSITY) { 670813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->RedBits == 0); 671813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->GreenBits == 0); 672813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->BlueBits == 0); 673813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->AlphaBits == 0); 674813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->LuminanceBits == 0); 675813870fd9588de101f68728507cff726d7513695Brian Paul assert(info->IntensityBits > 0); 676813870fd9588de101f68728507cff726d7513695Brian Paul } 677813870fd9588de101f68728507cff726d7513695Brian Paul 678813870fd9588de101f68728507cff726d7513695Brian Paul } 679813870fd9588de101f68728507cff726d7513695Brian Paul} 680813870fd9588de101f68728507cff726d7513695Brian Paul 681813870fd9588de101f68728507cff726d7513695Brian Paul 682813870fd9588de101f68728507cff726d7513695Brian Paul/** 683813870fd9588de101f68728507cff726d7513695Brian Paul * XXX possible replacement for _mesa_format_to_type_and_comps() 684813870fd9588de101f68728507cff726d7513695Brian Paul * Used for mipmap generation. 685813870fd9588de101f68728507cff726d7513695Brian Paul */ 686813870fd9588de101f68728507cff726d7513695Brian Paulvoid 687813870fd9588de101f68728507cff726d7513695Brian Paul_mesa_format_to_type_and_comps2(gl_format format, 688813870fd9588de101f68728507cff726d7513695Brian Paul GLenum *datatype, GLuint *comps) 689813870fd9588de101f68728507cff726d7513695Brian Paul{ 690813870fd9588de101f68728507cff726d7513695Brian Paul const struct gl_format_info *info = _mesa_get_format_info(format); 691813870fd9588de101f68728507cff726d7513695Brian Paul 692813870fd9588de101f68728507cff726d7513695Brian Paul /* We use a bunch of heuristics here. If this gets too ugly we could 693813870fd9588de101f68728507cff726d7513695Brian Paul * just encode the info the in the gl_format_info structures. 694813870fd9588de101f68728507cff726d7513695Brian Paul */ 695813870fd9588de101f68728507cff726d7513695Brian Paul if (info->BaseFormat == GL_RGB || 696813870fd9588de101f68728507cff726d7513695Brian Paul info->BaseFormat == GL_RGBA || 697813870fd9588de101f68728507cff726d7513695Brian Paul info->BaseFormat == GL_ALPHA) { 698813870fd9588de101f68728507cff726d7513695Brian Paul *comps = ((info->RedBits > 0) + 699813870fd9588de101f68728507cff726d7513695Brian Paul (info->GreenBits > 0) + 700813870fd9588de101f68728507cff726d7513695Brian Paul (info->BlueBits > 0) + 701813870fd9588de101f68728507cff726d7513695Brian Paul (info->AlphaBits > 0)); 702813870fd9588de101f68728507cff726d7513695Brian Paul 703813870fd9588de101f68728507cff726d7513695Brian Paul if (info->DataType== GL_FLOAT) { 704813870fd9588de101f68728507cff726d7513695Brian Paul if (info->RedBits == 32) 705813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_FLOAT; 706813870fd9588de101f68728507cff726d7513695Brian Paul else 707813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_HALF_FLOAT; 708813870fd9588de101f68728507cff726d7513695Brian Paul } 709813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->GreenBits == 3) { 710813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_BYTE_3_3_2; 711813870fd9588de101f68728507cff726d7513695Brian Paul } 712813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->GreenBits == 4) { 713813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_SHORT_4_4_4_4; 714813870fd9588de101f68728507cff726d7513695Brian Paul } 715813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->GreenBits == 6) { 716813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_SHORT_5_6_5; 717813870fd9588de101f68728507cff726d7513695Brian Paul } 718813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->GreenBits == 5) { 719813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_SHORT_1_5_5_5_REV; 720813870fd9588de101f68728507cff726d7513695Brian Paul } 721813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->RedBits == 8) { 722813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_BYTE; 723813870fd9588de101f68728507cff726d7513695Brian Paul } 724813870fd9588de101f68728507cff726d7513695Brian Paul else { 725813870fd9588de101f68728507cff726d7513695Brian Paul ASSERT(info->RedBits == 16); 726813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_SHORT; 727813870fd9588de101f68728507cff726d7513695Brian Paul } 728813870fd9588de101f68728507cff726d7513695Brian Paul } 729813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->BaseFormat == GL_LUMINANCE || 730813870fd9588de101f68728507cff726d7513695Brian Paul info->BaseFormat == GL_LUMINANCE_ALPHA) { 731813870fd9588de101f68728507cff726d7513695Brian Paul *comps = ((info->LuminanceBits > 0) + 732813870fd9588de101f68728507cff726d7513695Brian Paul (info->AlphaBits > 0)); 733813870fd9588de101f68728507cff726d7513695Brian Paul if (info->LuminanceBits == 8) { 734813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_BYTE; 735813870fd9588de101f68728507cff726d7513695Brian Paul } 736813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->LuminanceBits == 16) { 737813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_SHORT; 738813870fd9588de101f68728507cff726d7513695Brian Paul } 739813870fd9588de101f68728507cff726d7513695Brian Paul else { 740813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_FLOAT; 741813870fd9588de101f68728507cff726d7513695Brian Paul } 742813870fd9588de101f68728507cff726d7513695Brian Paul } 743813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->BaseFormat == GL_INTENSITY) { 744813870fd9588de101f68728507cff726d7513695Brian Paul *comps = 1; 745813870fd9588de101f68728507cff726d7513695Brian Paul if (info->IntensityBits == 8) { 746813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_BYTE; 747813870fd9588de101f68728507cff726d7513695Brian Paul } 748813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->IntensityBits == 16) { 749813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_SHORT; 750813870fd9588de101f68728507cff726d7513695Brian Paul } 751813870fd9588de101f68728507cff726d7513695Brian Paul else { 752813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_FLOAT; 753813870fd9588de101f68728507cff726d7513695Brian Paul } 754813870fd9588de101f68728507cff726d7513695Brian Paul } 755813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->BaseFormat == GL_COLOR_INDEX) { 756813870fd9588de101f68728507cff726d7513695Brian Paul *comps = 1; 757813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_BYTE; 758813870fd9588de101f68728507cff726d7513695Brian Paul } 759813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->BaseFormat == GL_DEPTH_COMPONENT) { 760813870fd9588de101f68728507cff726d7513695Brian Paul *comps = 1; 761813870fd9588de101f68728507cff726d7513695Brian Paul if (info->DepthBits == 16) { 762813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_SHORT; 763813870fd9588de101f68728507cff726d7513695Brian Paul } 764813870fd9588de101f68728507cff726d7513695Brian Paul else { 765813870fd9588de101f68728507cff726d7513695Brian Paul ASSERT(info->DepthBits == 32); 766813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_INT; 767813870fd9588de101f68728507cff726d7513695Brian Paul } 768813870fd9588de101f68728507cff726d7513695Brian Paul } 769813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->BaseFormat == GL_DEPTH_STENCIL) { 770813870fd9588de101f68728507cff726d7513695Brian Paul *comps = 1; 771813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_INT; 772813870fd9588de101f68728507cff726d7513695Brian Paul } 773813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->BaseFormat == GL_YCBCR_MESA) { 774813870fd9588de101f68728507cff726d7513695Brian Paul *comps = 2; 775813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_SHORT; 776813870fd9588de101f68728507cff726d7513695Brian Paul } 777813870fd9588de101f68728507cff726d7513695Brian Paul else if (info->BaseFormat == GL_DUDV_ATI) { 778813870fd9588de101f68728507cff726d7513695Brian Paul *comps = 2; 779813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_BYTE; 780813870fd9588de101f68728507cff726d7513695Brian Paul } 781813870fd9588de101f68728507cff726d7513695Brian Paul else { 782813870fd9588de101f68728507cff726d7513695Brian Paul /* any other formats? */ 783813870fd9588de101f68728507cff726d7513695Brian Paul ASSERT(0); 784813870fd9588de101f68728507cff726d7513695Brian Paul *comps = 1; 785813870fd9588de101f68728507cff726d7513695Brian Paul *datatype = GL_UNSIGNED_BYTE; 786813870fd9588de101f68728507cff726d7513695Brian Paul } 787813870fd9588de101f68728507cff726d7513695Brian Paul} 788813870fd9588de101f68728507cff726d7513695Brian Paul 789c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul 790c28d78f8324cfc17936af63c258a1cc55d590d60Brian PaulGLint 791c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul_mesa_get_format_bits(gl_format format, GLenum pname) 792c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul{ 793c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul const struct gl_format_info *info = _mesa_get_format_info(format); 794c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul 795c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul switch (pname) { 796c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul case GL_TEXTURE_RED_SIZE: 797c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul return info->RedBits; 798c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul case GL_TEXTURE_GREEN_SIZE: 799c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul return info->GreenBits; 800c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul case GL_TEXTURE_BLUE_SIZE: 801c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul return info->BlueBits; 802c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul case GL_TEXTURE_ALPHA_SIZE: 803c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul return info->AlphaBits; 804c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul case GL_TEXTURE_INTENSITY_SIZE: 805c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul return info->IntensityBits; 806c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul case GL_TEXTURE_LUMINANCE_SIZE: 807c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul return info->LuminanceBits; 808c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul case GL_TEXTURE_INDEX_SIZE_EXT: 809c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul return info->IndexBits; 810c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul case GL_TEXTURE_DEPTH_SIZE_ARB: 811c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul return info->DepthBits; 812c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul case GL_TEXTURE_STENCIL_SIZE_EXT: 813c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul return info->StencilBits; 814c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul default: 815c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul _mesa_problem(NULL, "bad pname in _mesa_get_format_bits()"); 816c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul return 0; 817c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul } 818c28d78f8324cfc17936af63c258a1cc55d590d60Brian Paul} 819