1aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 2aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * Mesa 3-D graphics library 3aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * 4aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * Copyright (c) 2011 VMware, Inc. 5aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * 6aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * Permission is hereby granted, free of charge, to any person obtaining a 7aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * copy of this software and associated documentation files (the "Software"), 8aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * to deal in the Software without restriction, including without limitation 9aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * and/or sell copies of the Software, and to permit persons to whom the 11aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * Software is furnished to do so, subject to the following conditions: 12aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * 13aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * The above copyright notice and this permission notice shall be included 14aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * in all copies or substantial portions of the Software. 15aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * 16aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 20aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 21aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 23aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 24aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 25aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/** 26aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * Color, depth, stencil packing functions. 27aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * Used to pack basic color, depth and stencil formats to specific 28aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * hardware formats. 29aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * 30aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * There are both per-pixel and per-row packing functions: 31aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * - The former will be used by swrast to write values to the color, depth, 32aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * stencil buffers when drawing points, lines and masked spans. 33aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * - The later will be used for image-oriented functions like glDrawPixels, 34aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * glAccum, and glTexImage. 35aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 36aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 37aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 38aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul#include "colormac.h" 39aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul#include "format_pack.h" 40aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul#include "macros.h" 41aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul#include "../../gallium/auxiliary/util/u_format_rgb9e5.h" 42aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul#include "../../gallium/auxiliary/util/u_format_r11g11b10f.h" 43aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 44aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 450bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul/** Helper struct for MESA_FORMAT_Z32_FLOAT_X24S8 */ 460bda900743702a2c0f95024f004e6210e59fd5ddBrian Paulstruct z32f_x24s8 470bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul{ 480bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul float z; 490bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul uint32_t x24s8; 500bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul}; 510bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul 520bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul 53aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paultypedef void (*pack_ubyte_rgba_row_func)(GLuint n, 54aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul const GLubyte src[][4], void *dst); 55aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 56aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paultypedef void (*pack_float_rgba_row_func)(GLuint n, 57aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul const GLfloat src[][4], void *dst); 58aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 59aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 60aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 61aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic inline GLfloat 62aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paullinear_to_srgb(GLfloat cl) 63aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 64aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul if (cl < 0.0f) 65aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return 0.0f; 66aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul else if (cl < 0.0031308f) 67aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return 12.92f * cl; 68aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul else if (cl < 1.0f) 69aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return 1.055f * powf(cl, 0.41666f) - 0.055f; 70aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul else 71aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return 1.0f; 72aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 73aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 74aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 75aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic inline GLubyte 76aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paullinear_float_to_srgb_ubyte(GLfloat cl) 77aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 78aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte res = FLOAT_TO_UBYTE(linear_to_srgb(cl)); 79aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return res; 80aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 81aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 82aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 83aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic inline GLubyte 84aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paullinear_ubyte_to_srgb_ubyte(GLubyte cl) 85aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 86aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte res = FLOAT_TO_UBYTE(linear_to_srgb(cl / 255.0f)); 87aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return res; 88aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 89aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 90aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 91aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 92aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 93aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 94aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_RGBA8888 95aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 96aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 97aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 98aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGBA8888(const GLubyte src[4], void *dst) 99aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 100aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 101aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(src[RCOMP], src[GCOMP], src[BCOMP], src[ACOMP]); 102aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 103aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 104aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 105aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGBA8888(const GLfloat src[4], void *dst) 106aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 107aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 108aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src); 109aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_RGBA8888(v, dst); 110aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 111aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 112aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 113aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_ubyte_RGBA8888(GLuint n, const GLubyte src[][4], void *dst) 114aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 115aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 116aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 117aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 118aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = PACK_COLOR_8888(src[i][RCOMP], src[i][GCOMP], 119aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul src[i][BCOMP], src[i][ACOMP]); 120aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 121aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 122aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 123aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 124aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_float_RGBA8888(GLuint n, const GLfloat src[][4], void *dst) 125aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 126aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 127aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 128aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 129aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 130aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src[i]); 131aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_RGBA8888(v, d + i); 132aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 133aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 134aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 135aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 136aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 137aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 138aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_RGBA8888_REV 139aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 140aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 141aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 142aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGBA8888_REV(const GLubyte src[4], void *dst) 143aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 144aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 145aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(src[ACOMP], src[BCOMP], src[GCOMP], src[RCOMP]); 146aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 147aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 148aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 149aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGBA8888_REV(const GLfloat src[4], void *dst) 150aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 151aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 152aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src); 153aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_RGBA8888_REV(v, dst); 154aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 155aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 156aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 157aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_ubyte_RGBA8888_REV(GLuint n, const GLubyte src[][4], void *dst) 158aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 159aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 160aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 161aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 162aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = PACK_COLOR_8888(src[i][ACOMP], src[i][BCOMP], 163aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul src[i][GCOMP], src[i][RCOMP]); 164aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 165aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 166aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 167aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 168aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_float_RGBA8888_REV(GLuint n, const GLfloat src[][4], void *dst) 169aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 170aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 171aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 172aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 173aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 174aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src[i]); 175aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_RGBA8888_REV(v, d + i); 176aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 177aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 178aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 179aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 180aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 181aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_ARGB8888 182aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 183aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 184aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 185aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_ARGB8888(const GLubyte src[4], void *dst) 186aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 187aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 188aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(src[ACOMP], src[RCOMP], src[GCOMP], src[BCOMP]); 189aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 190aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 191aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 192aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_ARGB8888(const GLfloat src[4], void *dst) 193aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 194aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 195aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src); 196aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_ARGB8888(v, dst); 197aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 198aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 199aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 200aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_ubyte_ARGB8888(GLuint n, const GLubyte src[][4], void *dst) 201aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 202aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 203aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 204aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 205aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = PACK_COLOR_8888(src[i][ACOMP], src[i][RCOMP], 206aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul src[i][GCOMP], src[i][BCOMP]); 207aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 208aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 209aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 210aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 211aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_float_ARGB8888(GLuint n, const GLfloat src[][4], void *dst) 212aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 213aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 214aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 215aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 216aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 217aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src[i]); 218aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_ARGB8888(v, d + i); 219aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 220aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 221aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 222aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 223aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 224aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_ARGB8888_REV 225aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 226aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 227aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 228aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_ARGB8888_REV(const GLubyte src[4], void *dst) 229aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 230aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 231aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(src[BCOMP], src[GCOMP], src[RCOMP], src[ACOMP]); 232aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 233aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 234aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 235aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_ARGB8888_REV(const GLfloat src[4], void *dst) 236aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 237aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 238aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src); 239aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_ARGB8888_REV(v, dst); 240aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 241aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 242aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 243aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_ubyte_ARGB8888_REV(GLuint n, const GLubyte src[][4], void *dst) 244aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 245aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 246aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 247aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 248aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = PACK_COLOR_8888(src[i][BCOMP], src[i][GCOMP], 249aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul src[i][RCOMP], src[i][ACOMP]); 250aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 251aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 252aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 253aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 254aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_float_ARGB8888_REV(GLuint n, const GLfloat src[][4], void *dst) 255aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 256aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 257aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 258aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 259aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 260aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src[i]); 261aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_ARGB8888_REV(v, d + i); 262aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 263aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 264aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 265aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 266aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 267aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_XRGB8888 268aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 269aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 270aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 271aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_XRGB8888(const GLubyte src[4], void *dst) 272aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 273aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 274aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(0x0, src[RCOMP], src[GCOMP], src[BCOMP]); 275aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 276aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 277aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 278aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_XRGB8888(const GLfloat src[4], void *dst) 279aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 280aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 281aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src); 282aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_XRGB8888(v, dst); 283aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 284aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 285aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 286aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_ubyte_XRGB8888(GLuint n, const GLubyte src[][4], void *dst) 287aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 288aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 289aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 290aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 291aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = PACK_COLOR_8888(0, src[i][RCOMP], src[i][GCOMP], src[i][BCOMP]); 292aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 293aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 294aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 295aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 296aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_float_XRGB8888(GLuint n, const GLfloat src[][4], void *dst) 297aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 298aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 299aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 300aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 301aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 302aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src[i]); 303aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_XRGB8888(v, d + i); 304aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 305aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 306aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 307aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 308aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 309aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_XRGB8888_REV 310aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 311aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 312aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 313aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_XRGB8888_REV(const GLubyte src[4], void *dst) 314aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 315aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 316aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(src[BCOMP], src[GCOMP], src[RCOMP], 0); 317aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 318aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 319aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 320aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_XRGB8888_REV(const GLfloat src[4], void *dst) 321aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 322aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 323aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src); 324aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_XRGB8888_REV(v, dst); 325aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 326aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 327aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 328aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_ubyte_XRGB8888_REV(GLuint n, const GLubyte src[][4], void *dst) 329aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 330aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 331aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 332aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 333aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = PACK_COLOR_8888(src[i][BCOMP], src[i][GCOMP], src[i][RCOMP], 0); 334aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 335aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 336aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 337aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 338aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_float_XRGB8888_REV(GLuint n, const GLfloat src[][4], void *dst) 339aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 340aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 341aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 342aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 343aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 344aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src[i]); 345aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_XRGB8888_REV(v, d + i); 346aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 347aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 348aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 349aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 350aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 351aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_RGB888 352aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 353aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 354aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 355aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGB888(const GLubyte src[4], void *dst) 356aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 357aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 358aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = src[RCOMP]; 359aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = src[GCOMP]; 360aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = src[BCOMP]; 361aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 362aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 363aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 364aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGB888(const GLfloat src[4], void *dst) 365aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 366aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 367aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(d[2], src[RCOMP]); 368aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(d[1], src[GCOMP]); 369aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(d[0], src[BCOMP]); 370aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 371aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 372aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 373aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_ubyte_RGB888(GLuint n, const GLubyte src[][4], void *dst) 374aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 375aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 376aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 377aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 378aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+2] = src[i][RCOMP]; 379aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+1] = src[i][GCOMP]; 380aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+0] = src[i][BCOMP]; 381aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 382aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 383aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 384aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 385aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_float_RGB888(GLuint n, const GLfloat src[][4], void *dst) 386aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 387aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 388aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 389aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 390aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 391aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src[i]); 392aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+2] = v[RCOMP]; 393aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+1] = v[GCOMP]; 394aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+0] = v[BCOMP]; 395aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 396aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 397aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 398aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 399aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 400aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_BGR888 401aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 402aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 403aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 404aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_BGR888(const GLubyte src[4], void *dst) 405aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 406aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 407aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = src[BCOMP]; 408aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = src[GCOMP]; 409aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = src[RCOMP]; 410aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 411aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 412aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 413aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_BGR888(const GLfloat src[4], void *dst) 414aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 415aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 416aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(d[2], src[BCOMP]); 417aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(d[1], src[GCOMP]); 418aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(d[0], src[RCOMP]); 419aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 420aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 421aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 422aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_ubyte_BGR888(GLuint n, const GLubyte src[][4], void *dst) 423aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 424aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 425aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 426aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 427aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+2] = src[i][BCOMP]; 428aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+1] = src[i][GCOMP]; 429aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+0] = src[i][RCOMP]; 430aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 431aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 432aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 433aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 434aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_float_BGR888(GLuint n, const GLfloat src[][4], void *dst) 435aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 436aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 437aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 438aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 439aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 440aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src[i]); 441aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+2] = v[BCOMP]; 442aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+1] = v[GCOMP]; 443aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i*3+0] = v[RCOMP]; 444aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 445aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 446aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 447aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 448aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 449aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_RGB565 450aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 451aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 452aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 453aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGB565(const GLubyte src[4], void *dst) 454aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 455aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 456aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_565(src[RCOMP], src[GCOMP], src[BCOMP]); 457aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 458aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 459aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 460aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGB565(const GLfloat src[4], void *dst) 461aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 462aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[3]; 463aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[0], src[RCOMP]); 464aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[1], src[GCOMP]); 465aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[2], src[BCOMP]); 466aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_RGB565(v, dst); 467aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 468aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 469aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 470aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_ubyte_RGB565(GLuint n, const GLubyte src[][4], void *dst) 471aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 472aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 473aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 474aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 475aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_RGB565(src[i], d + i); 476aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 477aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 478aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 479aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 480aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_float_RGB565(GLuint n, const GLfloat src[][4], void *dst) 481aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 482aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 483aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 484aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 485aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 486aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src[i]); 487aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_RGB565(v, d + i); 488aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 489aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 490aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 491aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 492aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 493aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_RGB565_REV 494aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 495aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 496aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 497aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGB565_REV(const GLubyte src[4], void *dst) 498aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 499aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 500aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_565_REV(src[RCOMP], src[GCOMP], src[BCOMP]); 501aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 502aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 503aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 504aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGB565_REV(const GLfloat src[4], void *dst) 505aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 506aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 507aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte r, g, b; 508aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(r, src[RCOMP]); 509aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(g, src[GCOMP]); 510aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(b, src[BCOMP]); 511aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_565_REV(r, g, b); 512aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 513aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 514aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 515aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_ubyte_RGB565_REV(GLuint n, const GLubyte src[][4], void *dst) 516aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 517aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 518aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 519aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 520aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_RGB565_REV(src[i], d + i); 521aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 522aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 523aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 524aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 525aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_row_float_RGB565_REV(GLuint n, const GLfloat src[][4], void *dst) 526aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 527aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 528aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 529aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 530aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 531aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src[i]); 532aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_RGB565_REV(v, d + i); 533aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 534aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 535aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 536aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 537aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 538aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_ARGB4444 539aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 540aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 541aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 542aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_ARGB4444(const GLubyte src[4], void *dst) 543aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 544aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 545aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_4444(src[ACOMP], src[RCOMP], src[GCOMP], src[BCOMP]); 546aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 547aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 548aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 549aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_ARGB4444(const GLfloat src[4], void *dst) 550aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 551aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 552aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src); 553aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_ARGB4444(v, dst); 554aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 555aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 556aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* use fallback row packing functions */ 557aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 558aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 559aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 560aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_ARGB4444_REV 561aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 562aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 563aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 564aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_ARGB4444_REV(const GLubyte src[4], void *dst) 565aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 566aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 567aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_4444(src[GCOMP], src[BCOMP], src[ACOMP], src[RCOMP]); 568aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 569aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 570aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 571aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_ARGB4444_REV(const GLfloat src[4], void *dst) 572aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 573aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 574aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src); 575aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_ARGB4444_REV(v, dst); 576aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 577aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 578aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* use fallback row packing functions */ 579aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 580aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 581aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 582aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_RGBA5551 583aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 584aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 585aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 586aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGBA5551(const GLubyte src[4], void *dst) 587aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 588aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 589aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_5551(src[RCOMP], src[GCOMP], src[BCOMP], src[ACOMP]); 590aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 591aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 592aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 593aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGBA5551(const GLfloat src[4], void *dst) 594aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 595aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 596aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src); 597aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_RGBA5551(v, dst); 598aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 599aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 600aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* use fallback row packing functions */ 601aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 602aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 603aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 604aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_ARGB1555 605aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 606aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 607aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 608aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_ARGB1555(const GLubyte src[4], void *dst) 609aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 610aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 611aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_1555(src[ACOMP], src[RCOMP], src[GCOMP], src[BCOMP]); 612aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 613aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 614aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 615aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_ARGB1555(const GLfloat src[4], void *dst) 616aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 617aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 618aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src); 619aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_ARGB1555(v, dst); 620aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 621aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 622aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 623aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_ARGB1555_REV */ 624aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 625aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 626aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_ARGB1555_REV(const GLubyte src[4], void *dst) 627aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 628aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst), tmp; 629aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul tmp = PACK_COLOR_1555(src[ACOMP], src[RCOMP], src[GCOMP], src[BCOMP]); 630aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = (tmp >> 8) | (tmp << 8); 631aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 632aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 633aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 634aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_ARGB1555_REV(const GLfloat src[4], void *dst) 635aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 636aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 637aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_unclamped_float_rgba_to_ubyte(v, src); 638aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_ARGB1555_REV(v, dst); 639aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 640aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 641aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 642aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_AL44 */ 643aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 644aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 645aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_AL44(const GLubyte src[4], void *dst) 646aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 647b0af16abf1153da243b856e55f59ca1945860f47Brian Paul GLubyte *d = ((GLubyte *) dst); 648aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_44(src[ACOMP], src[RCOMP]); 649aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 650aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 651aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 652aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_AL44(const GLfloat src[4], void *dst) 653aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 654aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 655aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[0], src[RCOMP]); 656aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[3], src[ACOMP]); 657aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_AL44(v, dst); 658aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 659aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 660aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 661aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_AL88 */ 662aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 663aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 664aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_AL88(const GLubyte src[4], void *dst) 665aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 666aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 667aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_88(src[ACOMP], src[RCOMP]); 668aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 669aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 670aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 671aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_AL88(const GLfloat src[4], void *dst) 672aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 673aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 674aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[0], src[RCOMP]); 675aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[3], src[ACOMP]); 676aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_AL88(v, dst); 677aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 678aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 679aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 680aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_AL88_REV */ 681aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 682aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 683aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_AL88_REV(const GLubyte src[4], void *dst) 684aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 685aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 686aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_88(src[RCOMP], src[ACOMP]); 687aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 688aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 689aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 690aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_AL88_REV(const GLfloat src[4], void *dst) 691aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 692aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 693aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[0], src[RCOMP]); 694aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[3], src[ACOMP]); 695aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_AL88_REV(v, dst); 696aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 697aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 698aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 699aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_AL1616 */ 700aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 701aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 702aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_AL1616(const GLubyte src[4], void *dst) 703aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 704aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 705aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort l = UBYTE_TO_USHORT(src[RCOMP]); 706aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort a = UBYTE_TO_USHORT(src[ACOMP]); 707aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_1616(a, l); 708aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 709aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 710aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 711aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_AL1616(const GLfloat src[4], void *dst) 712aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 713aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 714aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort l, a; 715aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(l, src[RCOMP]); 716aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(a, src[ACOMP]); 717aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_1616(a, l); 718aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 719aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 720aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 721aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_AL1616_REV */ 722aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 723aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 724aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_AL1616_REV(const GLubyte src[4], void *dst) 725aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 726aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 727aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort l = UBYTE_TO_USHORT(src[RCOMP]); 728aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort a = UBYTE_TO_USHORT(src[ACOMP]); 729aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_1616(l, a); 730aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 731aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 732aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 733aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_AL1616_REV(const GLfloat src[4], void *dst) 734aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 735aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 736aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort l, a; 737aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(l, src[RCOMP]); 738aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(a, src[ACOMP]); 739aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_1616(l, a); 740aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 741aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 742aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 743aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_RGB332 */ 744aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 745aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 746aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGB332(const GLubyte src[4], void *dst) 747aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 748aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 749aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_332(src[RCOMP], src[GCOMP], src[BCOMP]); 750aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 751aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 752aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 753aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGB332(const GLfloat src[4], void *dst) 754aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 755aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte v[4]; 756aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[0], src[RCOMP]); 757aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[1], src[GCOMP]); 758aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(v[2], src[BCOMP]); 759aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_RGB332(v, dst); 760aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 761aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 762aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 763aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_A8 */ 764aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 765aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 766aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_A8(const GLubyte src[4], void *dst) 767aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 768aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 769aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = src[ACOMP]; 770aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 771aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 772aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 773aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_A8(const GLfloat src[4], void *dst) 774aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 775aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 776aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(d[0], src[ACOMP]); 777aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 778aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 779aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 780aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_A16 */ 781aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 782aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 783aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_A16(const GLubyte src[4], void *dst) 784aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 785aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 786aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = UBYTE_TO_USHORT(src[ACOMP]); 787aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 788aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 789aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 790aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_A16(const GLfloat src[4], void *dst) 791aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 792aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 793aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(d[0], src[ACOMP]); 794aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 795aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 796aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 797aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_L8 */ 798aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 799aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 800aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_L8(const GLubyte src[4], void *dst) 801aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 802aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 803aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = src[RCOMP]; 804aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 805aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 806aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 807aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_L8(const GLfloat src[4], void *dst) 808aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 809aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 810aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(d[0], src[RCOMP]); 811aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 812aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 813aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 814aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_L16 */ 815aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 816aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 817aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_L16(const GLubyte src[4], void *dst) 818aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 819aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 820aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = UBYTE_TO_USHORT(src[RCOMP]); 821aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 822aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 823aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 824aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_L16(const GLfloat src[4], void *dst) 825aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 826aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 827aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(d[0], src[RCOMP]); 828aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 829aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 830aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 831aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_YCBCR */ 832aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 833aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 834aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_YCBCR(const GLubyte src[4], void *dst) 835aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 836aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* todo */ 837aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 838aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 839aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 840aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_YCBCR(const GLfloat src[4], void *dst) 841aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 842aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* todo */ 843aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 844aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 845aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 846aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_YCBCR_REV */ 847aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 848aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 849aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_YCBCR_REV(const GLubyte src[4], void *dst) 850aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 851aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* todo */ 852aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 853aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 854aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 855aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_YCBCR_REV(const GLfloat src[4], void *dst) 856aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 857aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* todo */ 858aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 859aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 860aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 861aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_R8 */ 862aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 863aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 864aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_R8(const GLubyte src[4], void *dst) 865aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 866aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 867aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = src[RCOMP]; 868aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 869aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 870aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 871aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_R8(const GLfloat src[4], void *dst) 872aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 873aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 874aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte r; 875aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(r, src[RCOMP]); 876aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = r; 877aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 878aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 879aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 880aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_GR88 */ 881aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 882aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 883aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_GR88(const GLubyte src[4], void *dst) 884aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 885aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 886aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_88(src[GCOMP], src[RCOMP]); 887aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 888aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 889aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 890aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_GR88(const GLfloat src[4], void *dst) 891aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 892aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 893aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte r, g; 894aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(r, src[RCOMP]); 895aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(g, src[GCOMP]); 896aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_88(g, r); 897aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 898aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 899aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 900aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_RG88 */ 901aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 902aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 903aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RG88(const GLubyte src[4], void *dst) 904aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 905aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 906aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_88(src[RCOMP], src[GCOMP]); 907aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 908aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 909aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 910aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RG88(const GLfloat src[4], void *dst) 911aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 912aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 913aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte r, g; 914aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(r, src[RCOMP]); 915aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(g, src[GCOMP]); 916aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_88(r, g); 917aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 918aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 919aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 920aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_R16 */ 921aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 922aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 923aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_R16(const GLubyte src[4], void *dst) 924aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 925aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 926aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = UBYTE_TO_USHORT(src[RCOMP]); 927aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 928aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 929aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 930aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_R16(const GLfloat src[4], void *dst) 931aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 932aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 933aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(d[0], src[RCOMP]); 934aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 935aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 936aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 937aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_RG1616 */ 938aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 939aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 940aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RG1616(const GLubyte src[4], void *dst) 941aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 942aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 943aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort r = UBYTE_TO_USHORT(src[RCOMP]); 944aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort g = UBYTE_TO_USHORT(src[GCOMP]); 945aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_1616(g, r); 946aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 947aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 948aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 949aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RG1616(const GLfloat src[4], void *dst) 950aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 951aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 952aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort r, g; 953aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(r, src[RCOMP]); 954aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(g, src[GCOMP]); 955aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_1616(g, r); 956aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 957aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 958aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 959aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_RG1616_REV */ 960aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 961aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 962aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RG1616_REV(const GLubyte src[4], void *dst) 963aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 964aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 965aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort r = UBYTE_TO_USHORT(src[RCOMP]); 966aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort g = UBYTE_TO_USHORT(src[GCOMP]); 967aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_1616(r, g); 968aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 969aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 970aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 971aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 972aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RG1616_REV(const GLfloat src[4], void *dst) 973aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 974aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 975aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort r, g; 976aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(r, src[RCOMP]); 977aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(g, src[GCOMP]); 978aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_1616(r, g); 979aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 980aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 981aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 982aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_ARGB2101010 */ 983aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 984aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 985aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_ARGB2101010(const GLubyte src[4], void *dst) 986aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 987aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 988aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort r = UBYTE_TO_USHORT(src[RCOMP]); 989aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort g = UBYTE_TO_USHORT(src[GCOMP]); 990aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort b = UBYTE_TO_USHORT(src[BCOMP]); 991aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort a = UBYTE_TO_USHORT(src[ACOMP]); 992aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_2101010_US(a, r, g, b); 993aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 994aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 995aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 996aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_ARGB2101010(const GLfloat src[4], void *dst) 997aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 998aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 999aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort r, g, b, a; 1000aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(r, src[RCOMP]); 1001aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(g, src[GCOMP]); 1002aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(b, src[BCOMP]); 1003aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(a, src[ACOMP]); 1004aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_2101010_US(a, r, g, b); 1005aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1006aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1007aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1008749c9060aca85277c388377d15fd6323ba20b78eJordan Justen/* MESA_FORMAT_ABGR2101010_UINT */ 1009749c9060aca85277c388377d15fd6323ba20b78eJordan Justen 1010749c9060aca85277c388377d15fd6323ba20b78eJordan Justenstatic void 1011749c9060aca85277c388377d15fd6323ba20b78eJordan Justenpack_ubyte_ABGR2101010_UINT(const GLubyte src[4], void *dst) 1012749c9060aca85277c388377d15fd6323ba20b78eJordan Justen{ 1013749c9060aca85277c388377d15fd6323ba20b78eJordan Justen GLuint *d = ((GLuint *) dst); 1014749c9060aca85277c388377d15fd6323ba20b78eJordan Justen GLushort r = UBYTE_TO_USHORT(src[RCOMP]); 1015749c9060aca85277c388377d15fd6323ba20b78eJordan Justen GLushort g = UBYTE_TO_USHORT(src[GCOMP]); 1016749c9060aca85277c388377d15fd6323ba20b78eJordan Justen GLushort b = UBYTE_TO_USHORT(src[BCOMP]); 1017749c9060aca85277c388377d15fd6323ba20b78eJordan Justen GLushort a = UBYTE_TO_USHORT(src[ACOMP]); 1018749c9060aca85277c388377d15fd6323ba20b78eJordan Justen *d = PACK_COLOR_2101010_US(a, b, g, r); 1019749c9060aca85277c388377d15fd6323ba20b78eJordan Justen} 1020749c9060aca85277c388377d15fd6323ba20b78eJordan Justen 1021749c9060aca85277c388377d15fd6323ba20b78eJordan Justenstatic void 1022749c9060aca85277c388377d15fd6323ba20b78eJordan Justenpack_float_ABGR2101010_UINT(const GLfloat src[4], void *dst) 1023749c9060aca85277c388377d15fd6323ba20b78eJordan Justen{ 1024749c9060aca85277c388377d15fd6323ba20b78eJordan Justen GLuint *d = ((GLuint *) dst); 1025749c9060aca85277c388377d15fd6323ba20b78eJordan Justen GLushort r, g, b, a; 1026749c9060aca85277c388377d15fd6323ba20b78eJordan Justen UNCLAMPED_FLOAT_TO_USHORT(r, src[RCOMP]); 1027749c9060aca85277c388377d15fd6323ba20b78eJordan Justen UNCLAMPED_FLOAT_TO_USHORT(g, src[GCOMP]); 1028749c9060aca85277c388377d15fd6323ba20b78eJordan Justen UNCLAMPED_FLOAT_TO_USHORT(b, src[BCOMP]); 1029749c9060aca85277c388377d15fd6323ba20b78eJordan Justen UNCLAMPED_FLOAT_TO_USHORT(a, src[ACOMP]); 1030749c9060aca85277c388377d15fd6323ba20b78eJordan Justen *d = PACK_COLOR_2101010_US(a, b, g, r); 1031749c9060aca85277c388377d15fd6323ba20b78eJordan Justen} 1032749c9060aca85277c388377d15fd6323ba20b78eJordan Justen 1033749c9060aca85277c388377d15fd6323ba20b78eJordan Justen 1034aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_SRGB8 */ 1035aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1036aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1037aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_SRGB8(const GLubyte src[4], void *dst) 1038aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1039aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 1040aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = linear_ubyte_to_srgb_ubyte(src[RCOMP]); 1041aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = linear_ubyte_to_srgb_ubyte(src[RCOMP]); 1042aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = linear_ubyte_to_srgb_ubyte(src[RCOMP]); 1043aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1044aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1045aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1046aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SRGB8(const GLfloat src[4], void *dst) 1047aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1048aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 1049aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = linear_float_to_srgb_ubyte(src[RCOMP]); 1050aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = linear_float_to_srgb_ubyte(src[GCOMP]); 1051aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = linear_float_to_srgb_ubyte(src[BCOMP]); 1052aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1053aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1054aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1055aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_SRGBA8 */ 1056aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1057aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1058aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_SRGBA8(const GLubyte src[4], void *dst) 1059aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1060aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 1061aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte r = linear_ubyte_to_srgb_ubyte(src[RCOMP]); 1062aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte g = linear_ubyte_to_srgb_ubyte(src[GCOMP]); 1063aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte b = linear_ubyte_to_srgb_ubyte(src[BCOMP]); 1064aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(r, g, b, src[ACOMP]); 1065aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1066aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1067aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1068aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SRGBA8(const GLfloat src[4], void *dst) 1069aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1070aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 1071aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte r, g, b, a; 1072aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul r = linear_float_to_srgb_ubyte(src[RCOMP]); 1073aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul g = linear_float_to_srgb_ubyte(src[GCOMP]); 1074aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul b = linear_float_to_srgb_ubyte(src[BCOMP]); 1075aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(a, src[ACOMP]); 1076aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(r, g, b, a); 1077aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1078aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1079aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1080aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_SARGB8 */ 1081aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1082aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1083aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_SARGB8(const GLubyte src[4], void *dst) 1084aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1085aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 1086aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte r = linear_ubyte_to_srgb_ubyte(src[RCOMP]); 1087aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte g = linear_ubyte_to_srgb_ubyte(src[RCOMP]); 1088aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte b = linear_ubyte_to_srgb_ubyte(src[RCOMP]); 1089aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(src[ACOMP], r, g, b); 1090aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1091aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1092aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1093aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SARGB8(const GLfloat src[4], void *dst) 1094aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1095aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 1096aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte r, g, b, a; 1097aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul r = linear_float_to_srgb_ubyte(src[RCOMP]); 1098aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul g = linear_float_to_srgb_ubyte(src[GCOMP]); 1099aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul b = linear_float_to_srgb_ubyte(src[BCOMP]); 1100aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_UBYTE(a, src[ACOMP]); 1101aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(a, r, g, b); 1102aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1103aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1104aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1105aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_SL8 */ 1106aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1107aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1108aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_SL8(const GLubyte src[4], void *dst) 1109aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1110aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 1111aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = linear_ubyte_to_srgb_ubyte(src[RCOMP]); 1112aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1113aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1114aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1115aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SL8(const GLfloat src[4], void *dst) 1116aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1117aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 1118aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte l = linear_float_to_srgb_ubyte(src[RCOMP]); 1119aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = l; 1120aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1121aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1122aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1123aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_SLA8 */ 1124aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1125aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1126aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_SLA8(const GLubyte src[4], void *dst) 1127aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1128aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 1129aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte l = linear_ubyte_to_srgb_ubyte(src[RCOMP]); 1130aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_88(src[ACOMP], l); 1131aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1132aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1133aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1134aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SLA8(const GLfloat src[4], void *dst) 1135aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1136aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 1137aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte a, l = linear_float_to_srgb_ubyte(src[RCOMP]); 1138aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul CLAMPED_FLOAT_TO_UBYTE(a, src[ACOMP]); 1139aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_88(a, l); 1140aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1141aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1142aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1143aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_RGBA_FLOAT32 */ 1144aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1145aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1146aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGBA_FLOAT32(const GLubyte src[4], void *dst) 1147aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1148aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1149aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = UBYTE_TO_FLOAT(src[0]); 1150aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = UBYTE_TO_FLOAT(src[1]); 1151aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = UBYTE_TO_FLOAT(src[2]); 1152aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[3] = UBYTE_TO_FLOAT(src[3]); 1153aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1154aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1155aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1156aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGBA_FLOAT32(const GLfloat src[4], void *dst) 1157aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1158aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1159aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = src[0]; 1160aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = src[1]; 1161aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = src[2]; 1162aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[3] = src[3]; 1163aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1164aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1165aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1166aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_RGBA_FLOAT16 */ 1167aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1168aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1169aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGBA_FLOAT16(const GLubyte src[4], void *dst) 1170aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1171aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1172aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[0])); 1173aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[1])); 1174aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[2])); 1175aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[3] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[3])); 1176aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1177aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1178aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1179aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGBA_FLOAT16(const GLfloat src[4], void *dst) 1180aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1181aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1182aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(src[0]); 1183aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = _mesa_float_to_half(src[1]); 1184aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = _mesa_float_to_half(src[2]); 1185aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[3] = _mesa_float_to_half(src[3]); 1186aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1187aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1188aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1189aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_RGB_FLOAT32 */ 1190aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1191aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1192aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGB_FLOAT32(const GLubyte src[4], void *dst) 1193aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1194aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1195aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = UBYTE_TO_FLOAT(src[0]); 1196aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = UBYTE_TO_FLOAT(src[1]); 1197aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = UBYTE_TO_FLOAT(src[2]); 1198aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1199aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1200aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1201aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGB_FLOAT32(const GLfloat src[4], void *dst) 1202aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1203aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1204aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = src[0]; 1205aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = src[1]; 1206aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = src[2]; 1207aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1208aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1209aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1210aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_RGB_FLOAT16 */ 1211aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1212aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1213aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGB_FLOAT16(const GLubyte src[4], void *dst) 1214aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1215aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1216aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[0])); 1217aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[1])); 1218aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[2])); 1219aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1220aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1221aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1222aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGB_FLOAT16(const GLfloat src[4], void *dst) 1223aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1224aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1225aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(src[0]); 1226aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = _mesa_float_to_half(src[1]); 1227aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = _mesa_float_to_half(src[2]); 1228aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1229aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1230aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1231aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_ALPHA_FLOAT32 */ 1232aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1233aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1234aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_ALPHA_FLOAT32(const GLubyte src[4], void *dst) 1235aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1236aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1237aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = UBYTE_TO_FLOAT(src[ACOMP]); 1238aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1239aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1240aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1241aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_ALPHA_FLOAT32(const GLfloat src[4], void *dst) 1242aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1243aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1244aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = src[ACOMP]; 1245aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1246aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1247aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1248aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_ALPHA_FLOAT16 */ 1249aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1250aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1251aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_ALPHA_FLOAT16(const GLubyte src[4], void *dst) 1252aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1253aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1254aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[ACOMP])); 1255aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1256aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1257aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1258aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_ALPHA_FLOAT16(const GLfloat src[4], void *dst) 1259aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1260aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1261aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(src[ACOMP]); 1262aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1263aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1264aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1265aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_LUMINANCE_FLOAT32 (and INTENSITY_FLOAT32, R_FLOAT32) */ 1266aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1267aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1268aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_LUMINANCE_FLOAT32(const GLubyte src[4], void *dst) 1269aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1270aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1271aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = UBYTE_TO_FLOAT(src[RCOMP]); 1272aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1273aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1274aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1275aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_LUMINANCE_FLOAT32(const GLfloat src[4], void *dst) 1276aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1277aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1278aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = src[RCOMP]; 1279aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1280aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1281aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1282aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_LUMINANCE_FLOAT16 (and INTENSITY_FLOAT16, R_FLOAT32) */ 1283aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1284aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1285aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_LUMINANCE_FLOAT16(const GLubyte src[4], void *dst) 1286aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1287aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1288aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[RCOMP])); 1289aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1290aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1291aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1292aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_LUMINANCE_FLOAT16(const GLfloat src[4], void *dst) 1293aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1294aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1295aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(src[RCOMP]); 1296aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1297aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1298aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1299aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32 */ 1300aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1301aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1302aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_LUMINANCE_ALPHA_FLOAT32(const GLubyte src[4], void *dst) 1303aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1304aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1305aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = UBYTE_TO_FLOAT(src[RCOMP]); 1306aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = UBYTE_TO_FLOAT(src[ACOMP]); 1307aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1308aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1309aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1310aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_LUMINANCE_ALPHA_FLOAT32(const GLfloat src[4], void *dst) 1311aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1312aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1313aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = src[RCOMP]; 1314aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = src[ACOMP]; 1315aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1316aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1317aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1318aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16 */ 1319aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1320aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1321aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_LUMINANCE_ALPHA_FLOAT16(const GLubyte src[4], void *dst) 1322aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1323aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1324aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[RCOMP])); 1325aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[ACOMP])); 1326aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1327aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1328aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1329aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_LUMINANCE_ALPHA_FLOAT16(const GLfloat src[4], void *dst) 1330aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1331aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1332aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(src[RCOMP]); 1333aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = _mesa_float_to_half(src[ACOMP]); 1334aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1335aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1336aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1337aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_RG_FLOAT32 */ 1338aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1339aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1340aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RG_FLOAT32(const GLubyte src[4], void *dst) 1341aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1342aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1343aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = UBYTE_TO_FLOAT(src[RCOMP]); 1344aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = UBYTE_TO_FLOAT(src[GCOMP]); 1345aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1346aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1347aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1348aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RG_FLOAT32(const GLfloat src[4], void *dst) 1349aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1350aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 1351aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = src[RCOMP]; 1352aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = src[GCOMP]; 1353aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1354aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1355aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1356aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_RG_FLOAT16 */ 1357aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1358aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1359aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RG_FLOAT16(const GLubyte src[4], void *dst) 1360aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1361aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1362aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[RCOMP])); 1363aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = _mesa_float_to_half(UBYTE_TO_FLOAT(src[GCOMP])); 1364aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1365aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1366aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1367aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RG_FLOAT16(const GLfloat src[4], void *dst) 1368aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1369aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLhalfARB *d = ((GLhalfARB *) dst); 1370aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = _mesa_float_to_half(src[RCOMP]); 1371aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = _mesa_float_to_half(src[GCOMP]); 1372aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1373aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1374aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1375aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_DUDV8 */ 1376aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1377aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1378aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_DUDV8(const GLubyte src[4], void *dst) 1379aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1380aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* XXX is this ever used? */ 1381aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 1382aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_88(src[0], src[1]); 1383aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1384aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1385aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1386aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_DUDV8(const GLfloat src[4], void *dst) 1387aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1388aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 1389aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte du, dv; 1390aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul du = FLOAT_TO_BYTE(CLAMP(src[0], 0.0F, 1.0F)); 1391aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul dv = FLOAT_TO_BYTE(CLAMP(src[1], 0.0F, 1.0F)); 1392aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_88(du, dv); 1393aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1394aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1395aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1396aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* MESA_FORMAT_RGBA_16 */ 1397aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1398aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1399aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGBA_16(const GLubyte src[4], void *dst) 1400aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1401aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 1402aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = UBYTE_TO_USHORT(src[RCOMP]); 1403aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = UBYTE_TO_USHORT(src[GCOMP]); 1404aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = UBYTE_TO_USHORT(src[BCOMP]); 1405aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[3] = UBYTE_TO_USHORT(src[ACOMP]); 1406aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1407aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1408aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1409aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGBA_16(const GLfloat src[4], void *dst) 1410aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1411aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 1412aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(d[0], src[RCOMP]); 1413aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(d[1], src[GCOMP]); 1414aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(d[2], src[BCOMP]); 1415aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul UNCLAMPED_FLOAT_TO_USHORT(d[3], src[ACOMP]); 1416aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1417aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1418aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1419aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1420aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1421aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_R8 1422aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1423aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1424aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1425aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_R8(const GLfloat src[4], void *dst) 1426aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1427aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte *d = (GLbyte *) dst; 1428aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = FLOAT_TO_BYTE(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1429aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1430aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1431aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1432aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1433aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_RG88_REV 1434aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1435aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1436aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1437aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_RG88_REV(const GLfloat src[4], void *dst) 1438aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1439aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = (GLushort *) dst; 1440aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte r = FLOAT_TO_BYTE(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1441aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte g = FLOAT_TO_BYTE(CLAMP(src[GCOMP], -1.0f, 1.0f)); 1442aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = (g << 8) | r; 1443aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1444aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1445aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1446aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1447aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_RGBX8888 1448aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1449aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1450aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1451aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_RGBX8888(const GLfloat src[4], void *dst) 1452aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1453aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = (GLuint *) dst; 1454aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte r = FLOAT_TO_BYTE(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1455aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte g = FLOAT_TO_BYTE(CLAMP(src[GCOMP], -1.0f, 1.0f)); 1456aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte b = FLOAT_TO_BYTE(CLAMP(src[BCOMP], -1.0f, 1.0f)); 1457aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte a = 127; 1458aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(r, g, b, a); 1459aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1460aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1461aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1462aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1463aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_RGBA8888 1464aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1465aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1466aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1467aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_RGBA8888(const GLfloat src[4], void *dst) 1468aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1469aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = (GLuint *) dst; 1470aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte r = FLOAT_TO_BYTE(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1471aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte g = FLOAT_TO_BYTE(CLAMP(src[GCOMP], -1.0f, 1.0f)); 1472aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte b = FLOAT_TO_BYTE(CLAMP(src[BCOMP], -1.0f, 1.0f)); 1473aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte a = FLOAT_TO_BYTE(CLAMP(src[ACOMP], -1.0f, 1.0f)); 1474aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(r, g, b, a); 1475aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1476aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1477aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1478aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1479aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_RGBA8888_REV 1480aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1481aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1482aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1483aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_RGBA8888_REV(const GLfloat src[4], void *dst) 1484aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1485aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = (GLuint *) dst; 1486aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte r = FLOAT_TO_BYTE(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1487aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte g = FLOAT_TO_BYTE(CLAMP(src[GCOMP], -1.0f, 1.0f)); 1488aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte b = FLOAT_TO_BYTE(CLAMP(src[BCOMP], -1.0f, 1.0f)); 1489aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte a = FLOAT_TO_BYTE(CLAMP(src[ACOMP], -1.0f, 1.0f)); 1490aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_8888(a, b, g, r); 1491aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1492aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1493aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1494aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1495aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_R16 1496aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1497aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1498aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1499aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_R16(const GLfloat src[4], void *dst) 1500aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1501aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLshort *d = (GLshort *) dst; 1502aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = FLOAT_TO_SHORT(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1503aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1504aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1505aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1506aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1507aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_GR1616 1508aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1509aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1510aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1511aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_GR1616(const GLfloat src[4], void *dst) 1512aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1513aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = (GLuint *) dst; 1514aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLshort r = FLOAT_TO_SHORT(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1515aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLshort g = FLOAT_TO_SHORT(CLAMP(src[GCOMP], -1.0f, 1.0f)); 1516aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = (g << 16) | (r & 0xffff); 1517aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1518aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1519aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1520aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1521aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_RGB_16 1522aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1523aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1524aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1525aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_RGB_16(const GLfloat src[4], void *dst) 1526aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1527aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLshort *d = (GLshort *) dst; 1528aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = FLOAT_TO_SHORT(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1529aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = FLOAT_TO_SHORT(CLAMP(src[GCOMP], -1.0f, 1.0f)); 1530aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = FLOAT_TO_SHORT(CLAMP(src[BCOMP], -1.0f, 1.0f)); 1531aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1532aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1533aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1534aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1535aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_RGBA_16 1536aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1537aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1538aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1539aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_RGBA_16(const GLfloat src[4], void *dst) 1540aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1541aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLshort *d = (GLshort *) dst; 1542aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[0] = FLOAT_TO_SHORT(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1543aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = FLOAT_TO_SHORT(CLAMP(src[GCOMP], -1.0f, 1.0f)); 1544aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[2] = FLOAT_TO_SHORT(CLAMP(src[BCOMP], -1.0f, 1.0f)); 1545aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[3] = FLOAT_TO_SHORT(CLAMP(src[ACOMP], -1.0f, 1.0f)); 1546aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1547aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1548aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1549aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1550aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_A8 1551aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1552aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1553aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1554aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_A8(const GLfloat src[4], void *dst) 1555aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1556aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte *d = (GLbyte *) dst; 1557aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = FLOAT_TO_BYTE(CLAMP(src[ACOMP], -1.0f, 1.0f)); 1558aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1559aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1560aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1561aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1562aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_L8 1563aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1564aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1565aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1566aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_L8(const GLfloat src[4], void *dst) 1567aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1568aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte *d = (GLbyte *) dst; 1569aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = FLOAT_TO_BYTE(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1570aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1571aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1572aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1573aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1574aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_AL88 1575aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1576aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1577aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1578aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_AL88(const GLfloat src[4], void *dst) 1579aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1580aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = (GLushort *) dst; 1581aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte l = FLOAT_TO_BYTE(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1582aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLbyte a = FLOAT_TO_BYTE(CLAMP(src[ACOMP], -1.0f, 1.0f)); 1583aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = (a << 8) | l; 1584aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1585aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1586aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1587aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1588aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_A16 1589aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1590aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1591aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1592aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_A16(const GLfloat src[4], void *dst) 1593aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1594aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLshort *d = (GLshort *) dst; 1595aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = FLOAT_TO_SHORT(CLAMP(src[ACOMP], -1.0f, 1.0f)); 1596aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1597aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1598aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1599aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1600aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_L16 1601aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1602aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1603aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1604aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_L16(const GLfloat src[4], void *dst) 1605aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1606aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLshort *d = (GLshort *) dst; 1607aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = FLOAT_TO_SHORT(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1608aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1609aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1610aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1611aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1612aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_SIGNED_AL1616 1613aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1614aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1615aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1616aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_SIGNED_AL1616(const GLfloat src[4], void *dst) 1617aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1618aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = (GLuint *) dst; 1619aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLshort l = FLOAT_TO_SHORT(CLAMP(src[RCOMP], -1.0f, 1.0f)); 1620aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLshort a = FLOAT_TO_SHORT(CLAMP(src[ACOMP], -1.0f, 1.0f)); 1621aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = PACK_COLOR_1616(a, l); 1622aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1623aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1624aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1625aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1626aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_RGB9_E5_FLOAT; 1627aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1628aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1629aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1630aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_RGB9_E5_FLOAT(const GLfloat src[4], void *dst) 1631aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1632aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = (GLuint *) dst; 1633aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = float3_to_rgb9e5(src); 1634aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1635aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1636aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1637aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_RGB9_E5_FLOAT(const GLubyte src[4], void *dst) 1638aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1639aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = (GLuint *) dst; 1640aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat rgb[3]; 1641aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul rgb[0] = UBYTE_TO_FLOAT(src[RCOMP]); 1642aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul rgb[1] = UBYTE_TO_FLOAT(src[GCOMP]); 1643aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul rgb[2] = UBYTE_TO_FLOAT(src[BCOMP]); 1644aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = float3_to_rgb9e5(rgb); 1645aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1646aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1647aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1648aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1649aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/* 1650aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * MESA_FORMAT_R11_G11_B10_FLOAT; 1651aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1652aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1653aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1654aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_R11_G11_B10_FLOAT(const GLubyte src[4], void *dst) 1655aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1656aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = (GLuint *) dst; 1657aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat rgb[3]; 1658aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul rgb[0] = UBYTE_TO_FLOAT(src[RCOMP]); 1659aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul rgb[1] = UBYTE_TO_FLOAT(src[GCOMP]); 1660aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul rgb[2] = UBYTE_TO_FLOAT(src[BCOMP]); 1661aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = float3_to_r11g11b10f(rgb); 1662aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1663aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1664aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 1665aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_R11_G11_B10_FLOAT(const GLfloat src[4], void *dst) 1666aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1667aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = (GLuint *) dst; 1668aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = float3_to_r11g11b10f(src); 1669aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1670aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1671aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1672aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1673aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/** 1674aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * Return a function that can pack a GLubyte rgba[4] color. 1675aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1676aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulgl_pack_ubyte_rgba_func 1677aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul_mesa_get_pack_ubyte_rgba_function(gl_format format) 1678aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1679aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul static gl_pack_ubyte_rgba_func table[MESA_FORMAT_COUNT]; 1680aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul static GLboolean initialized = GL_FALSE; 1681aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1682aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul if (!initialized) { 1683aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul memset(table, 0, sizeof(table)); 1684aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1685aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_NONE] = NULL; 1686aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1687aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA8888] = pack_ubyte_RGBA8888; 1688aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA8888_REV] = pack_ubyte_RGBA8888_REV; 1689aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB8888] = pack_ubyte_ARGB8888; 1690aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB8888_REV] = pack_ubyte_ARGB8888_REV; 1691aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBX8888] = pack_ubyte_RGBA8888; /* reused */ 1692aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBX8888_REV] = pack_ubyte_RGBA8888_REV; /* reused */ 1693aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_XRGB8888] = pack_ubyte_XRGB8888; 1694aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_XRGB8888_REV] = pack_ubyte_XRGB8888_REV; 1695aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB888] = pack_ubyte_RGB888; 1696aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_BGR888] = pack_ubyte_BGR888; 1697aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB565] = pack_ubyte_RGB565; 1698aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB565_REV] = pack_ubyte_RGB565_REV; 1699aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB4444] = pack_ubyte_ARGB4444; 1700aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB4444_REV] = pack_ubyte_ARGB4444_REV; 1701aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA5551] = pack_ubyte_RGBA5551; 1702aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB1555] = pack_ubyte_ARGB1555; 1703aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB1555_REV] = pack_ubyte_ARGB1555_REV; 1704aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_AL44] = pack_ubyte_AL44; 1705aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_AL88] = pack_ubyte_AL88; 1706aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_AL88_REV] = pack_ubyte_AL88_REV; 1707aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_AL1616] = pack_ubyte_AL1616; 1708aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_AL1616_REV] = pack_ubyte_AL1616_REV; 1709aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB332] = pack_ubyte_RGB332; 1710aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_A8] = pack_ubyte_A8; 1711aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_A16] = pack_ubyte_A16; 1712aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_L8] = pack_ubyte_L8; 1713aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_L16] = pack_ubyte_L16; 1714aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_I8] = pack_ubyte_L8; /* reuse pack_ubyte_L8 */ 1715aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_I16] = pack_ubyte_L16; /* reuse pack_ubyte_L16 */ 1716aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_YCBCR] = pack_ubyte_YCBCR; 1717aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_YCBCR_REV] = pack_ubyte_YCBCR_REV; 1718aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_R8] = pack_ubyte_R8; 1719aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_GR88] = pack_ubyte_GR88; 1720aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RG88] = pack_ubyte_RG88; 1721aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_R16] = pack_ubyte_R16; 1722aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RG1616] = pack_ubyte_RG1616; 1723aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RG1616_REV] = pack_ubyte_RG1616_REV; 1724aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB2101010] = pack_ubyte_ARGB2101010; 1725749c9060aca85277c388377d15fd6323ba20b78eJordan Justen table[MESA_FORMAT_ABGR2101010_UINT] = pack_ubyte_ABGR2101010_UINT; 1726aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1727aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* should never convert RGBA to these formats */ 1728aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_Z24_S8] = NULL; 1729aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_S8_Z24] = NULL; 1730aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_Z16] = NULL; 1731aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_X8_Z24] = NULL; 1732aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_Z24_X8] = NULL; 1733aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_Z32] = NULL; 1734aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_S8] = NULL; 1735aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1736aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* sRGB */ 1737aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGB8] = pack_ubyte_SRGB8; 1738aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGBA8] = pack_ubyte_SRGBA8; 1739aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SARGB8] = pack_ubyte_SARGB8; 1740aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SL8] = pack_ubyte_SL8; 1741aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SLA8] = pack_ubyte_SLA8; 1742aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1743aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* n/a */ 1744aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGB_DXT1] = NULL; /* pack_ubyte_SRGB_DXT1; */ 1745aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGBA_DXT1] = NULL; /* pack_ubyte_SRGBA_DXT1; */ 1746aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGBA_DXT3] = NULL; /* pack_ubyte_SRGBA_DXT3; */ 1747aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGBA_DXT5] = NULL; /* pack_ubyte_SRGBA_DXT5; */ 1748aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1749aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB_FXT1] = NULL; /* pack_ubyte_RGB_FXT1; */ 1750aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_FXT1] = NULL; /* pack_ubyte_RGBA_FXT1; */ 1751aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB_DXT1] = NULL; /* pack_ubyte_RGB_DXT1; */ 1752aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_DXT1] = NULL; /* pack_ubyte_RGBA_DXT1; */ 1753aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_DXT3] = NULL; /* pack_ubyte_RGBA_DXT3; */ 1754aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_DXT5] = NULL; /* pack_ubyte_RGBA_DXT5; */ 1755aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1756aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_FLOAT32] = pack_ubyte_RGBA_FLOAT32; 1757aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_FLOAT16] = pack_ubyte_RGBA_FLOAT16; 1758aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB_FLOAT32] = pack_ubyte_RGB_FLOAT32; 1759aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB_FLOAT16] = pack_ubyte_RGB_FLOAT16; 1760aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ALPHA_FLOAT32] = pack_ubyte_ALPHA_FLOAT32; 1761aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ALPHA_FLOAT16] = pack_ubyte_ALPHA_FLOAT16; 1762aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_LUMINANCE_FLOAT32] = pack_ubyte_LUMINANCE_FLOAT32; 1763aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_LUMINANCE_FLOAT16] = pack_ubyte_LUMINANCE_FLOAT16; 1764aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = pack_ubyte_LUMINANCE_ALPHA_FLOAT32; 1765aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16] = pack_ubyte_LUMINANCE_ALPHA_FLOAT16; 1766aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_INTENSITY_FLOAT32] = pack_ubyte_LUMINANCE_FLOAT32; 1767aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_INTENSITY_FLOAT16] = pack_ubyte_LUMINANCE_FLOAT16; 1768aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_R_FLOAT32] = pack_ubyte_LUMINANCE_FLOAT32; 1769aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_R_FLOAT16] = pack_ubyte_LUMINANCE_FLOAT16; 1770aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RG_FLOAT32] = pack_ubyte_RG_FLOAT32; 1771aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RG_FLOAT16] = pack_ubyte_RG_FLOAT16; 1772aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1773aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* n/a */ 1774aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_INT8] = NULL; /* pack_ubyte_RGBA_INT8 */ 1775aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_INT16] = NULL; /* pack_ubyte_RGBA_INT16 */ 1776aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_INT32] = NULL; /* pack_ubyte_RGBA_INT32 */ 1777aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_UINT8] = NULL; /* pack_ubyte_RGBA_UINT8 */ 1778aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_UINT16] = NULL; /* pack_ubyte_RGBA_UINT16 */ 1779aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_UINT32] = NULL; /* pack_ubyte_RGBA_UINT32 */ 1780aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1781aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_DUDV8] = pack_ubyte_DUDV8; 1782aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1783aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_16] = pack_ubyte_RGBA_16; 1784aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1785aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* n/a */ 1786aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_R8] = NULL; 1787aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RG88_REV] = NULL; 1788aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RGBX8888] = NULL; 1789aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RGBA8888] = NULL; 1790aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RGBA8888_REV] = NULL; 1791aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_R16] = NULL; 1792aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_GR1616] = NULL; 1793aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RGB_16] = NULL; 1794aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RGBA_16] = NULL; 1795aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_A8] = NULL; 1796aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_L8] = NULL; 1797aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_AL88] = NULL; 1798aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_I8] = NULL; 1799aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_A16] = NULL; 1800aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_L16] = NULL; 1801aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_AL1616] = NULL; 1802aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_I16] = NULL; 1803aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1804aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1805aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_16] = pack_ubyte_RGBA_16; 1806aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1807aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB9_E5_FLOAT] = pack_ubyte_RGB9_E5_FLOAT; 1808aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_R11_G11_B10_FLOAT] = pack_ubyte_R11_G11_B10_FLOAT; 1809aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1810aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul initialized = GL_TRUE; 1811aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 1812aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1813aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return table[format]; 1814aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1815aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1816aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1817aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1818aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/** 1819aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * Return a function that can pack a GLfloat rgba[4] color. 1820aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1821aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulgl_pack_float_rgba_func 1822aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul_mesa_get_pack_float_rgba_function(gl_format format) 1823aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1824aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul static gl_pack_float_rgba_func table[MESA_FORMAT_COUNT]; 1825aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul static GLboolean initialized = GL_FALSE; 1826aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1827aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul if (!initialized) { 1828aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul memset(table, 0, sizeof(table)); 1829aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1830aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_NONE] = NULL; 1831aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1832aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA8888] = pack_float_RGBA8888; 1833aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA8888_REV] = pack_float_RGBA8888_REV; 1834aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB8888] = pack_float_ARGB8888; 1835aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB8888_REV] = pack_float_ARGB8888_REV; 1836aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBX8888] = pack_float_RGBA8888; /* reused */ 1837aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBX8888_REV] = pack_float_RGBA8888_REV; /* reused */ 1838aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_XRGB8888] = pack_float_XRGB8888; 1839aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_XRGB8888_REV] = pack_float_XRGB8888_REV; 1840aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB888] = pack_float_RGB888; 1841aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_BGR888] = pack_float_BGR888; 1842aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB565] = pack_float_RGB565; 1843aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB565_REV] = pack_float_RGB565_REV; 1844aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB4444] = pack_float_ARGB4444; 1845aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB4444_REV] = pack_float_ARGB4444_REV; 1846aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA5551] = pack_float_RGBA5551; 1847aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB1555] = pack_float_ARGB1555; 1848aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB1555_REV] = pack_float_ARGB1555_REV; 1849aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1850aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_AL44] = pack_float_AL44; 1851aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_AL88] = pack_float_AL88; 1852aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_AL88_REV] = pack_float_AL88_REV; 1853aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_AL1616] = pack_float_AL1616; 1854aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_AL1616_REV] = pack_float_AL1616_REV; 1855aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB332] = pack_float_RGB332; 1856aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_A8] = pack_float_A8; 1857aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_A16] = pack_float_A16; 1858aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_L8] = pack_float_L8; 1859aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_L16] = pack_float_L16; 1860aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_I8] = pack_float_L8; /* reuse pack_float_L8 */ 1861aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_I16] = pack_float_L16; /* reuse pack_float_L16 */ 1862aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_YCBCR] = pack_float_YCBCR; 1863aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_YCBCR_REV] = pack_float_YCBCR_REV; 1864aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_R8] = pack_float_R8; 1865aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_GR88] = pack_float_GR88; 1866aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RG88] = pack_float_RG88; 1867aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_R16] = pack_float_R16; 1868aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RG1616] = pack_float_RG1616; 1869aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RG1616_REV] = pack_float_RG1616_REV; 1870aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB2101010] = pack_float_ARGB2101010; 1871749c9060aca85277c388377d15fd6323ba20b78eJordan Justen table[MESA_FORMAT_ABGR2101010_UINT] = pack_float_ABGR2101010_UINT; 1872aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1873aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* should never convert RGBA to these formats */ 1874aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_Z24_S8] = NULL; 1875aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_S8_Z24] = NULL; 1876aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_Z16] = NULL; 1877aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_X8_Z24] = NULL; 1878aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_Z24_X8] = NULL; 1879aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_Z32] = NULL; 1880aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_S8] = NULL; 1881aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1882aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGB8] = pack_float_SRGB8; 1883aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGBA8] = pack_float_SRGBA8; 1884aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SARGB8] = pack_float_SARGB8; 1885aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SL8] = pack_float_SL8; 1886aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SLA8] = pack_float_SLA8; 1887aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1888aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* n/a */ 1889aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGB_DXT1] = NULL; 1890aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGBA_DXT1] = NULL; 1891aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGBA_DXT3] = NULL; 1892aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SRGBA_DXT5] = NULL; 1893aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1894aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB_FXT1] = NULL; 1895aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_FXT1] = NULL; 1896aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB_DXT1] = NULL; 1897aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_DXT1] = NULL; 1898aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_DXT3] = NULL; 1899aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_DXT5] = NULL; 1900aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1901aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_FLOAT32] = pack_float_RGBA_FLOAT32; 1902aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_FLOAT16] = pack_float_RGBA_FLOAT16; 1903aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB_FLOAT32] = pack_float_RGB_FLOAT32; 1904aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB_FLOAT16] = pack_float_RGB_FLOAT16; 1905aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ALPHA_FLOAT32] = pack_float_ALPHA_FLOAT32; 1906aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ALPHA_FLOAT16] = pack_float_ALPHA_FLOAT16; 1907aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_LUMINANCE_FLOAT32] = pack_float_LUMINANCE_FLOAT32; 1908aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_LUMINANCE_FLOAT16] = pack_float_LUMINANCE_FLOAT16; 1909aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32] = pack_float_LUMINANCE_ALPHA_FLOAT32; 1910aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16] = pack_float_LUMINANCE_ALPHA_FLOAT16; 1911aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1912aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_INTENSITY_FLOAT32] = pack_float_LUMINANCE_FLOAT32; 1913aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_INTENSITY_FLOAT16] = pack_float_LUMINANCE_FLOAT16; 1914aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_R_FLOAT32] = pack_float_LUMINANCE_FLOAT32; 1915aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_R_FLOAT16] = pack_float_LUMINANCE_FLOAT16; 1916aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RG_FLOAT32] = pack_float_RG_FLOAT32; 1917aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RG_FLOAT16] = pack_float_RG_FLOAT16; 1918aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1919aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* n/a */ 1920aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_INT8] = NULL; 1921aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_INT16] = NULL; 1922aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_INT32] = NULL; 1923aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_UINT8] = NULL; 1924aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_UINT16] = NULL; 1925aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_UINT32] = NULL; 1926aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1927aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_DUDV8] = pack_float_DUDV8; 1928aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1929aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA_16] = pack_float_RGBA_16; 1930aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1931aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_R8] = pack_float_SIGNED_R8; 1932aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RG88_REV] = pack_float_SIGNED_RG88_REV; 1933aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RGBX8888] = pack_float_SIGNED_RGBX8888; 1934aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RGBA8888] = pack_float_SIGNED_RGBA8888; 1935aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RGBA8888_REV] = pack_float_SIGNED_RGBA8888_REV; 1936aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_R16] = pack_float_SIGNED_R16; 1937aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_GR1616] = pack_float_SIGNED_GR1616; 1938aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RGB_16] = pack_float_SIGNED_RGB_16; 1939aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_RGBA_16] = pack_float_SIGNED_RGBA_16; 1940aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_A8] = pack_float_SIGNED_A8; 1941aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_L8] = pack_float_SIGNED_L8; 1942aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_AL88] = pack_float_SIGNED_AL88; 1943aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_I8] = pack_float_SIGNED_L8; /* reused */ 1944aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_A16] = pack_float_SIGNED_A16; 1945aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_L16] = pack_float_SIGNED_L16; 1946aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_AL1616] = pack_float_SIGNED_AL1616; 1947aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_SIGNED_I16] = pack_float_SIGNED_L16; /* reused */ 1948aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1949aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB9_E5_FLOAT] = pack_float_RGB9_E5_FLOAT; 1950aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_R11_G11_B10_FLOAT] = pack_float_R11_G11_B10_FLOAT; 1951aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1952aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul initialized = GL_TRUE; 1953aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 1954aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1955aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return table[format]; 1956aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1957aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1958aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1959aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1960aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic pack_float_rgba_row_func 1961aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulget_pack_float_rgba_row_function(gl_format format) 1962aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1963aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul static pack_float_rgba_row_func table[MESA_FORMAT_COUNT]; 1964aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul static GLboolean initialized = GL_FALSE; 1965aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1966aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul if (!initialized) { 1967aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* We don't need a special row packing function for each format. 1968aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * There's a generic fallback which uses a per-pixel packing function. 1969aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 1970aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul memset(table, 0, sizeof(table)); 1971aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1972aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA8888] = pack_row_float_RGBA8888; 1973aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA8888_REV] = pack_row_float_RGBA8888_REV; 1974aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB8888] = pack_row_float_ARGB8888; 1975aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB8888_REV] = pack_row_float_ARGB8888_REV; 1976aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBX8888] = pack_row_float_RGBA8888; /* reused */ 1977aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBX8888_REV] = pack_row_float_RGBA8888_REV; /* reused */ 1978aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_XRGB8888] = pack_row_float_XRGB8888; 1979aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_XRGB8888_REV] = pack_row_float_XRGB8888_REV; 1980aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB888] = pack_row_float_RGB888; 1981aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_BGR888] = pack_row_float_BGR888; 1982aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB565] = pack_row_float_RGB565; 1983aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB565_REV] = pack_row_float_RGB565_REV; 1984aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1985aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul initialized = GL_TRUE; 1986aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 1987aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1988aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return table[format]; 1989aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 1990aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1991aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1992aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1993aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic pack_ubyte_rgba_row_func 1994aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulget_pack_ubyte_rgba_row_function(gl_format format) 1995aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 1996aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul static pack_ubyte_rgba_row_func table[MESA_FORMAT_COUNT]; 1997aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul static GLboolean initialized = GL_FALSE; 1998aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 1999aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul if (!initialized) { 2000aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* We don't need a special row packing function for each format. 2001aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * There's a generic fallback which uses a per-pixel packing function. 2002aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 2003aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul memset(table, 0, sizeof(table)); 2004aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2005aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA8888] = pack_row_ubyte_RGBA8888; 2006aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBA8888_REV] = pack_row_ubyte_RGBA8888_REV; 2007aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB8888] = pack_row_ubyte_ARGB8888; 2008aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_ARGB8888_REV] = pack_row_ubyte_ARGB8888_REV; 2009aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBX8888] = pack_row_ubyte_RGBA8888; /* reused */ 2010aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGBX8888_REV] = pack_row_ubyte_RGBA8888_REV; /* reused */ 2011aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_XRGB8888] = pack_row_ubyte_XRGB8888; 2012aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_XRGB8888_REV] = pack_row_ubyte_XRGB8888_REV; 2013aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB888] = pack_row_ubyte_RGB888; 2014aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_BGR888] = pack_row_ubyte_BGR888; 2015aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB565] = pack_row_ubyte_RGB565; 2016aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul table[MESA_FORMAT_RGB565_REV] = pack_row_ubyte_RGB565_REV; 2017aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2018aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul initialized = GL_TRUE; 2019aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2020aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2021aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return table[format]; 2022aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2023aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2024aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2025aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2026aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/** 2027aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * Pack a row of GLfloat rgba[4] values to the destination. 2028aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 2029aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulvoid 2030aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul_mesa_pack_float_rgba_row(gl_format format, GLuint n, 2031aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul const GLfloat src[][4], void *dst) 2032aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2033aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_float_rgba_row_func packrow = get_pack_float_rgba_row_function(format); 2034aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul if (packrow) { 2035aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* use "fast" function */ 2036aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul packrow(n, src, dst); 2037aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2038aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul else { 2039aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* slower fallback */ 2040aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul gl_pack_float_rgba_func pack = _mesa_get_pack_float_rgba_function(format); 2041aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint dstStride = _mesa_get_format_bytes(format); 2042aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *dstPtr = (GLubyte *) dst; 2043aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2044aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2045aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(pack); 2046aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul if (!pack) 2047aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return; 2048aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2049aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2050aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack(src[i], dstPtr); 2051aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul dstPtr += dstStride; 2052aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2053aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2054aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2055aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2056aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2057aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/** 2058aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * Pack a row of GLubyte rgba[4] values to the destination. 2059aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 2060aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulvoid 2061aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul_mesa_pack_ubyte_rgba_row(gl_format format, GLuint n, 2062aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul const GLubyte src[][4], void *dst) 2063aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2064aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack_ubyte_rgba_row_func packrow = get_pack_ubyte_rgba_row_function(format); 2065aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul if (packrow) { 2066aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* use "fast" function */ 2067aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul packrow(n, src, dst); 2068aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2069aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul else { 2070aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* slower fallback */ 2071aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul gl_pack_ubyte_rgba_func pack = _mesa_get_pack_ubyte_rgba_function(format); 2072aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul const GLuint stride = _mesa_get_format_bytes(format); 2073aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = ((GLubyte *) dst); 2074aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2075aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2076aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(pack); 2077aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul if (!pack) 2078aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return; 2079aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2080aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2081aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul pack(src[i], d); 2082aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d += stride; 2083aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2084aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2085aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2086aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2087aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2088aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/** 208966940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul * Pack a 2D image of ubyte RGBA pixels in the given format. 209066940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul * \param srcRowStride source image row stride in bytes 209166940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul * \param dstRowStride destination image row stride in bytes 209266940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul */ 209366940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paulvoid 209466940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul_mesa_pack_ubyte_rgba_rect(gl_format format, GLuint width, GLuint height, 209566940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul const GLubyte *src, GLint srcRowStride, 209666940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul void *dst, GLint dstRowStride) 209766940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul{ 209866940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul pack_ubyte_rgba_row_func packrow = get_pack_ubyte_rgba_row_function(format); 209966940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul GLubyte *dstUB = (GLubyte *) dst; 210066940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul GLuint i; 210166940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul 210266940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul if (packrow) { 210366940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul if (srcRowStride == width * 4 * sizeof(GLubyte) && 210466940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul dstRowStride == _mesa_format_row_stride(format, width)) { 210566940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul /* do whole image at once */ 210666940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul packrow(width * height, (const GLubyte (*)[4]) src, dst); 210766940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul } 210866940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul else { 210966940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul /* row by row */ 211066940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul for (i = 0; i < height; i++) { 211166940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul packrow(width, (const GLubyte (*)[4]) src, dstUB); 211266940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul src += srcRowStride; 211366940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul dstUB += dstRowStride; 211466940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul } 211566940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul } 211666940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul } 211766940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul else { 211866940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul /* slower fallback */ 211966940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul for (i = 0; i < height; i++) { 212066940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul _mesa_pack_ubyte_rgba_row(format, width, 212166940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul (const GLubyte (*)[4]) src, dstUB); 212266940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul src += srcRowStride; 212366940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul dstUB += dstRowStride; 212466940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul } 212566940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul } 212666940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul} 212766940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul 212866940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul 212966940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul 213066940ad2d7145d30cf0381a9a2835efaa0d1ee3fBrian Paul/** 2131aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul ** Pack float Z pixels 2132aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul **/ 2133aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2134aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2135aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_z_Z24_S8(const GLfloat *src, void *dst) 2136aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2137aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the stencil values */ 2138aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2139fc52534f012837a39c03a764eb611d460210514aMarek Olšák const GLdouble scale = (GLdouble) 0xffffff; 2140aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = *d & 0xff; 2141aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = (GLuint) (*src * scale); 2142aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(z <= 0xffffff); 2143aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = (z << 8) | s; 2144aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2145aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2146aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2147aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_z_S8_Z24(const GLfloat *src, void *dst) 2148aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2149aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the stencil values */ 2150aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2151fc52534f012837a39c03a764eb611d460210514aMarek Olšák const GLdouble scale = (GLdouble) 0xffffff; 2152aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = *d & 0xff000000; 2153aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = (GLuint) (*src * scale); 2154aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(z <= 0xffffff); 2155aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = s | z; 2156aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2157aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2158aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2159aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_z_Z16(const GLfloat *src, void *dst) 2160aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2161aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 2162aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul const GLfloat scale = (GLfloat) 0xffff; 2163aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = (GLushort) (*src * scale); 2164aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2165aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2166aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2167aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_z_Z32(const GLfloat *src, void *dst) 2168aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2169aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2170fc52534f012837a39c03a764eb611d460210514aMarek Olšák const GLdouble scale = (GLdouble) 0xffffffff; 2171aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = (GLuint) (*src * scale); 2172aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2173aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2174aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2175aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_float_z_Z32_FLOAT(const GLfloat *src, void *dst) 2176aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2177aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = (GLfloat *) dst; 2178aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = *src; 2179aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2180aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2181aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulgl_pack_float_z_func 2182aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul_mesa_get_pack_float_z_func(gl_format format) 2183aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2184aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul switch (format) { 2185aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z24_S8: 2186aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z24_X8: 2187aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_float_z_Z24_S8; 2188aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_S8_Z24: 2189aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_X8_Z24: 2190aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_float_z_S8_Z24; 2191aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z16: 2192aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_float_z_Z16; 2193aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32: 2194aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_float_z_Z32; 2195aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32_FLOAT: 2196aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32_FLOAT_X24S8: 2197aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_float_z_Z32_FLOAT; 2198aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul default: 2199aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_problem(NULL, 2200aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul "unexpected format in _mesa_get_pack_float_z_func()"); 2201aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return NULL; 2202aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2203aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2204aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2205aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2206aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2207aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/** 2208aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul ** Pack uint Z pixels. The incoming src value is always in 2209aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul ** the range [0, 2^32-1]. 2210aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul **/ 2211aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2212aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2213aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_uint_z_Z24_S8(const GLuint *src, void *dst) 2214aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2215aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the stencil values */ 2216aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2217aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = *d & 0xff; 2218aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = *src & 0xffffff00; 2219aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = z | s; 2220aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2221aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2222aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2223aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_uint_z_S8_Z24(const GLuint *src, void *dst) 2224aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2225aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the stencil values */ 2226aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2227aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = *d & 0xff000000; 2228aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = *src >> 8; 2229aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = s | z; 2230aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2231aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2232aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2233aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_uint_z_Z16(const GLuint *src, void *dst) 2234aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2235aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 2236aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = *src >> 16; 2237aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2238aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2239aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2240aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_uint_z_Z32(const GLuint *src, void *dst) 2241aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2242aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2243aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = *src; 2244aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2245aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2246aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2247aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_uint_z_Z32_FLOAT(const GLuint *src, void *dst) 2248aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2249aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2250fc52534f012837a39c03a764eb611d460210514aMarek Olšák const GLdouble scale = 1.0 / (GLdouble) 0xffffffff; 2251aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = *src * scale; 2252aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(*d >= 0.0f); 2253aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(*d <= 1.0f); 2254aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2255aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2256aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2257aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_uint_z_Z32_FLOAT_X24S8(const GLuint *src, void *dst) 2258aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2259aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 2260fc52534f012837a39c03a764eb611d460210514aMarek Olšák const GLdouble scale = 1.0 / (GLdouble) 0xffffffff; 2261aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = *src * scale; 2262aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(*d >= 0.0f); 2263aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(*d <= 1.0f); 2264aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2265aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2266aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulgl_pack_uint_z_func 2267aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul_mesa_get_pack_uint_z_func(gl_format format) 2268aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2269aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul switch (format) { 2270aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z24_S8: 2271aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z24_X8: 2272aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_uint_z_Z24_S8; 2273aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_S8_Z24: 2274aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_X8_Z24: 2275aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_uint_z_S8_Z24; 2276aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z16: 2277aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_uint_z_Z16; 2278aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32: 2279aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_uint_z_Z32; 2280aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32_FLOAT: 2281aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_uint_z_Z32_FLOAT; 2282aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32_FLOAT_X24S8: 2283aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_uint_z_Z32_FLOAT_X24S8; 2284aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul default: 2285aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_problem(NULL, "unexpected format in _mesa_get_pack_uint_z_func()"); 2286aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return NULL; 2287aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2288aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2289aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2290aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2291aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/** 2292aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul ** Pack ubyte stencil pixels 2293aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul **/ 2294aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2295aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2296aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_stencil_Z24_S8(const GLubyte *src, void *dst) 2297aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2298aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the Z values */ 2299aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2300aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = *src; 2301aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = *d & 0xffffff00; 2302aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = z | s; 2303aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2304aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2305aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2306aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_stencil_S8_Z24(const GLubyte *src, void *dst) 2307aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2308aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the Z values */ 2309aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2310aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = *src << 24; 2311aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = *d & 0xffffff; 2312aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = s | z; 2313aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2314aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2315aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2316aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_stencil_S8(const GLubyte *src, void *dst) 2317aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2318aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLubyte *d = (GLubyte *) dst; 2319aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul *d = *src; 2320aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2321aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2322aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulstatic void 2323aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulpack_ubyte_stencil_Z32_FLOAT_X24S8(const GLubyte *src, void *dst) 2324aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2325aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLfloat *d = ((GLfloat *) dst); 2326aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[1] = *src; 2327aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2328aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2329aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2330aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulgl_pack_ubyte_stencil_func 2331aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul_mesa_get_pack_ubyte_stencil_func(gl_format format) 2332aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2333aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul switch (format) { 2334aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z24_S8: 2335aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_ubyte_stencil_Z24_S8; 2336aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_S8_Z24: 2337aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_ubyte_stencil_S8_Z24; 2338aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_S8: 2339aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_ubyte_stencil_S8; 2340aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32_FLOAT_X24S8: 2341aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return pack_ubyte_stencil_Z32_FLOAT_X24S8; 2342aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul default: 2343aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_problem(NULL, 2344aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul "unexpected format in _mesa_pack_ubyte_stencil_func()"); 2345aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return NULL; 2346aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2347aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2348aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2349aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2350aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2351aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulvoid 2352aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul_mesa_pack_float_z_row(gl_format format, GLuint n, 2353aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul const GLfloat *src, void *dst) 2354aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2355aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul switch (format) { 2356aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z24_S8: 2357aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z24_X8: 2358aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 2359aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the stencil values */ 2360aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2361fc52534f012837a39c03a764eb611d460210514aMarek Olšák const GLdouble scale = (GLdouble) 0xffffff; 2362aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2363aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2364aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = d[i] & 0xff; 2365aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = (GLuint) (src[i] * scale); 2366aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(z <= 0xffffff); 2367aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = (z << 8) | s; 2368aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2369aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2370aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2371aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_S8_Z24: 2372aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_X8_Z24: 2373aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 2374aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the stencil values */ 2375aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2376fc52534f012837a39c03a764eb611d460210514aMarek Olšák const GLdouble scale = (GLdouble) 0xffffff; 2377aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2378aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2379aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = d[i] & 0xff000000; 2380aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = (GLuint) (src[i] * scale); 2381aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(z <= 0xffffff); 2382aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = s | z; 2383aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2384aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2385aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2386aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z16: 2387aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 2388aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 2389aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul const GLfloat scale = (GLfloat) 0xffff; 2390aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2391aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2392aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = (GLushort) (src[i] * scale); 2393aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2394aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2395aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2396aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32: 2397aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 2398aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2399fc52534f012837a39c03a764eb611d460210514aMarek Olšák const GLdouble scale = (GLdouble) 0xffffffff; 2400aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2401aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2402aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = (GLuint) (src[i] * scale); 2403aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2404aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2405aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2406aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32_FLOAT: 2407aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul memcpy(dst, src, n * sizeof(GLfloat)); 2408aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2409aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32_FLOAT_X24S8: 2410aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 24110bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst; 2412aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2413aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 24140bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul d[i].z = src[i]; 2415aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2416aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2417aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2418aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul default: 2419aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_problem(NULL, "unexpected format in _mesa_pack_float_z_row()"); 2420aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2421aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2422aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2423aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2424aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/** 2425aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * The incoming Z values are always in the range [0, 0xffffffff]. 2426aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 2427aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulvoid 2428aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul_mesa_pack_uint_z_row(gl_format format, GLuint n, 2429aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul const GLuint *src, void *dst) 2430aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2431aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul switch (format) { 2432aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z24_S8: 2433aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z24_X8: 2434aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 2435aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the stencil values */ 2436aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2437aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2438aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2439aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = d[i] & 0xff; 2440aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = src[i] & 0xffffff00; 2441aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = z | s; 2442aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2443aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2444aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2445aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_S8_Z24: 2446aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_X8_Z24: 2447aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 2448aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the stencil values */ 2449aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2450aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2451aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2452aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = d[i] & 0xff000000; 2453aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = src[i] >> 8; 2454aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = s | z; 2455aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2456aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2457aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2458aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z16: 2459aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 2460aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLushort *d = ((GLushort *) dst); 2461aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2462aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2463aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = src[i] >> 16; 2464aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2465aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2466aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2467aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32: 2468aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul memcpy(dst, src, n * sizeof(GLfloat)); 2469aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2470aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32_FLOAT: 2471aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 2472aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2473fc52534f012837a39c03a764eb611d460210514aMarek Olšák const GLdouble scale = 1.0 / (GLdouble) 0xffffffff; 2474aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2475aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2476aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = src[i] * scale; 2477aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(d[i] >= 0.0f); 2478aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul assert(d[i] <= 1.0f); 2479aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2480aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2481aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2482aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32_FLOAT_X24S8: 2483aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 24840bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst; 2485fc52534f012837a39c03a764eb611d460210514aMarek Olšák const GLdouble scale = 1.0 / (GLdouble) 0xffffffff; 2486aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2487aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 24880bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul d[i].z = src[i] * scale; 24890bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul assert(d[i].z >= 0.0f); 24900bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul assert(d[i].z <= 1.0f); 2491aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2492aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2493aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2494aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul default: 2495aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_problem(NULL, "unexpected format in _mesa_pack_uint_z_row()"); 2496aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2497aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2498aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2499aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2500aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulvoid 2501aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul_mesa_pack_ubyte_stencil_row(gl_format format, GLuint n, 2502aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul const GLubyte *src, void *dst) 2503aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2504aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul switch (format) { 2505aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z24_S8: 2506aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 2507aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the Z values */ 2508aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2509aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2510aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2511aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = src[i]; 2512aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = d[i] & 0xffffff00; 2513aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = z | s; 2514aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2515aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2516aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2517aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_S8_Z24: 2518aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 2519aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul /* don't disturb the Z values */ 2520aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2521aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2522aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2523aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = src[i] << 24; 2524aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = d[i] & 0xffffff; 2525aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = s | z; 2526aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2527aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2528aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2529aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_S8: 2530aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul memcpy(dst, src, n * sizeof(GLubyte)); 2531aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2532aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z32_FLOAT_X24S8: 2533aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 25340bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst; 2535aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2536aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 25370bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul d[i].x24s8 = src[i]; 2538aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2539aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2540aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2541aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul default: 2542aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_problem(NULL, "unexpected format in _mesa_pack_ubyte_stencil_row()"); 2543aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2544aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2545aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2546aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul 2547aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul/** 2548aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul * Incoming Z/stencil values are always in uint_24_8 format. 2549aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul */ 2550aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paulvoid 2551aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul_mesa_pack_uint_24_8_depth_stencil_row(gl_format format, GLuint n, 2552aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul const GLuint *src, void *dst) 2553aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul{ 2554aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul switch (format) { 2555aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_Z24_S8: 2556aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul memcpy(dst, src, n * sizeof(GLuint)); 2557aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 2558aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul case MESA_FORMAT_S8_Z24: 2559aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul { 2560aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint *d = ((GLuint *) dst); 2561aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint i; 2562aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul for (i = 0; i < n; i++) { 2563aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint s = src[i] << 24; 2564aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul GLuint z = src[i] >> 8; 2565aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul d[i] = s | z; 2566aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2567aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2568aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul break; 256982ddd1129e76b8bb978497df2940d1449a848551Brian Paul case MESA_FORMAT_Z32_FLOAT_X24S8: 257082ddd1129e76b8bb978497df2940d1449a848551Brian Paul { 257182ddd1129e76b8bb978497df2940d1449a848551Brian Paul const GLdouble scale = 1.0 / (GLdouble) 0xffffff; 25720bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst; 257382ddd1129e76b8bb978497df2940d1449a848551Brian Paul GLint i; 257482ddd1129e76b8bb978497df2940d1449a848551Brian Paul for (i = 0; i < n; i++) { 257582ddd1129e76b8bb978497df2940d1449a848551Brian Paul GLfloat z = (src[i] >> 8) * scale; 25760bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul d[i].z = z; 25770bda900743702a2c0f95024f004e6210e59fd5ddBrian Paul d[i].x24s8 = src[i]; 257882ddd1129e76b8bb978497df2940d1449a848551Brian Paul } 257982ddd1129e76b8bb978497df2940d1449a848551Brian Paul } 258082ddd1129e76b8bb978497df2940d1449a848551Brian Paul break; 2581aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul default: 2582aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_problem(NULL, "bad format %s in _mesa_pack_ubyte_s_row", 2583aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul _mesa_get_format_name(format)); 2584aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul return; 2585aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul } 2586aa6cb952c917f4280d75b322c05885fcf7eb6cdbBrian Paul} 2587f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul 2588f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul 2589f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul 2590f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul/** 2591f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul * Convert a boolean color mask to a packed color where each channel of 2592f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul * the packed value at dst will be 0 or ~0 depending on the colorMask. 2593f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul */ 2594f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paulvoid 2595f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul_mesa_pack_colormask(gl_format format, const GLubyte colorMask[4], void *dst) 2596f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul{ 2597f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul GLfloat maskColor[4]; 2598f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul 2599f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul switch (_mesa_get_format_datatype(format)) { 2600f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul case GL_UNSIGNED_NORMALIZED: 2601f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul /* simple: 1.0 will convert to ~0 in the right bit positions */ 2602f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul maskColor[0] = colorMask[0] ? 1.0 : 0.0; 2603f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul maskColor[1] = colorMask[1] ? 1.0 : 0.0; 2604f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul maskColor[2] = colorMask[2] ? 1.0 : 0.0; 2605f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul maskColor[3] = colorMask[3] ? 1.0 : 0.0; 2606f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul _mesa_pack_float_rgba_row(format, 1, 2607f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul (const GLfloat (*)[4]) maskColor, dst); 2608f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul break; 2609f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul case GL_SIGNED_NORMALIZED: 2610f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul case GL_FLOAT: 2611f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul /* These formats are harder because it's hard to know the floating 2612f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul * point values that will convert to ~0 for each color channel's bits. 2613f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul * This solution just generates a non-zero value for each color channel 2614f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul * then fixes up the non-zero values to be ~0. 2615f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul * Note: we'll need to add special case code if we ever have to deal 2616f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul * with formats with unequal color channel sizes, like R11_G11_B10. 2617f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul * We issue a warning below for channel sizes other than 8,16,32. 2618f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul */ 2619f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul { 2620f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul GLuint bits = _mesa_get_format_max_bits(format); /* bits per chan */ 2621f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul GLuint bytes = _mesa_get_format_bytes(format); 2622f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul GLuint i; 2623f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul 2624f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul /* this should put non-zero values into the channels of dst */ 26256bf7d402149b36e0eac7c385c561ec6277a8339dBrian Paul maskColor[0] = colorMask[0] ? -1.0f : 0.0f; 26266bf7d402149b36e0eac7c385c561ec6277a8339dBrian Paul maskColor[1] = colorMask[1] ? -1.0f : 0.0f; 26276bf7d402149b36e0eac7c385c561ec6277a8339dBrian Paul maskColor[2] = colorMask[2] ? -1.0f : 0.0f; 26286bf7d402149b36e0eac7c385c561ec6277a8339dBrian Paul maskColor[3] = colorMask[3] ? -1.0f : 0.0f; 2629f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul _mesa_pack_float_rgba_row(format, 1, 2630f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul (const GLfloat (*)[4]) maskColor, dst); 2631f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul 2632f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul /* fix-up the dst channels by converting non-zero values to ~0 */ 2633f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul if (bits == 8) { 2634f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul GLubyte *d = (GLubyte *) dst; 2635f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul for (i = 0; i < bytes; i++) { 263652d021d4d785a4567b9e73ef89e74a295e8cfed9Dylan Noblesmith d[i] = d[i] ? 0xff : 0x0; 2637f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul } 2638f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul } 2639f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul else if (bits == 16) { 2640f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul GLushort *d = (GLushort *) dst; 2641f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul for (i = 0; i < bytes / 2; i++) { 2642f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul d[i] = d[i] ? 0xffff : 0x0; 2643f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul } 2644f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul } 2645f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul else if (bits == 32) { 2646f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul GLuint *d = (GLuint *) dst; 2647f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul for (i = 0; i < bytes / 4; i++) { 2648f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul d[i] = d[i] ? 0xffffffffU : 0x0; 2649f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul } 2650f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul } 2651f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul else { 2652f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul _mesa_problem(NULL, "unexpected size in _mesa_pack_colormask()"); 2653f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul return; 2654f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul } 2655f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul } 2656f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul break; 2657f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul default: 2658f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul _mesa_problem(NULL, "unexpected format data type in gen_color_mask()"); 2659f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul return; 2660f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul } 2661f1a2aa5cb338766d7a612b2c82c7ec588ed23d0bBrian Paul} 2662