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