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