Fix header info.
[mesa.git] / src / mesa / main / texformat_tmp.h
1 /* $Id: texformat_tmp.h,v 1.2 2001/03/18 13:34:24 gareth Exp $ */
2
3 /*
4 * Mesa 3-D graphics library
5 * Version: 3.5
6 *
7 * Copyright (C) 1999-2001 Brian Paul All Rights Reserved.
8 *
9 * Permission is hereby granted, free of charge, to any person obtaining a
10 * copy of this software and associated documentation files (the "Software"),
11 * to deal in the Software without restriction, including without limitation
12 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13 * and/or sell copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25 *
26 * Author:
27 * Gareth Hughes <gareth@valinux.com>
28 */
29
30 #if DIM == 1
31
32 #define CHAN_SRC( t, i, j, k, sz ) \
33 ((GLchan *)(t)->Data + (i) * (sz))
34 #define UBYTE_SRC( t, i, j, k, sz ) \
35 ((GLubyte *)(t)->Data + (i) * (sz))
36 #define USHORT_SRC( t, i, j, k ) \
37 ((GLushort *)(t)->Data + (i))
38 #define FLOAT_SRC( t, i, j, k ) \
39 ((GLfloat *)(t)->Data + (i))
40
41 #define FETCH(x) fetch_1d_texel_##x
42
43 #elif DIM == 2
44
45 #define CHAN_SRC( t, i, j, k, sz ) \
46 ((GLchan *)(t)->Data + ((t)->Width * (j) + (i)) * (sz))
47 #define UBYTE_SRC( t, i, j, k, sz ) \
48 ((GLubyte *)(t)->Data + ((t)->Width * (j) + (i)) * (sz))
49 #define USHORT_SRC( t, i, j, k ) \
50 ((GLushort *)(t)->Data + ((t)->Width * (j) + (i)))
51 #define FLOAT_SRC( t, i, j, k ) \
52 ((GLfloat *)(t)->Data + ((t)->Width * (j) + (i)))
53
54 #define FETCH(x) fetch_2d_texel_##x
55
56 #elif DIM == 3
57
58 #define CHAN_SRC( t, i, j, k, sz ) \
59 (GLchan *)(t)->Data + (((t)->Height * (k) + (j)) * \
60 (t)->Width + (i)) * (sz)
61 #define UBYTE_SRC( t, i, j, k, sz ) \
62 ((GLubyte *)(t)->Data + (((t)->Height * (k) + (j)) * \
63 (t)->Width + (i)) * (sz))
64 #define USHORT_SRC( t, i, j, k ) \
65 ((GLushort *)(t)->Data + (((t)->Height * (k) + (j)) * \
66 (t)->Width + (i)))
67 #define FLOAT_SRC( t, i, j, k ) \
68 ((GLfloat *)(t)->Data + (((t)->Height * (k) + (j)) * \
69 (t)->Width + (i)))
70
71 #define FETCH(x) fetch_3d_texel_##x
72
73 #else
74 #error "..."
75 #endif
76
77
78 static void FETCH(rgba)( const struct gl_texture_image *texImage,
79 GLint i, GLint j, GLint k, GLvoid *texel )
80 {
81 const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 );
82 GLchan *rgba = (GLchan *) texel;
83 COPY_CHAN4( rgba, src );
84 }
85
86 static void FETCH(rgb)( const struct gl_texture_image *texImage,
87 GLint i, GLint j, GLint k, GLvoid *texel )
88 {
89 const GLchan *src = CHAN_SRC( texImage, i, j, k, 3 );
90 GLchan *rgba = (GLchan *) texel;
91 rgba[RCOMP] = src[0];
92 rgba[GCOMP] = src[1];
93 rgba[BCOMP] = src[2];
94 rgba[ACOMP] = CHAN_MAX;
95 }
96
97 static void FETCH(alpha)( const struct gl_texture_image *texImage,
98 GLint i, GLint j, GLint k, GLvoid *texel )
99 {
100 const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 );
101 GLchan *rgba = (GLchan *) texel;
102 rgba[RCOMP] = 0;
103 rgba[GCOMP] = 0;
104 rgba[BCOMP] = 0;
105 rgba[ACOMP] = src[0];
106 }
107
108 static void FETCH(luminance)( const struct gl_texture_image *texImage,
109 GLint i, GLint j, GLint k, GLvoid *texel )
110 {
111 const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 );
112 GLchan *rgba = (GLchan *) texel;
113 rgba[RCOMP] = src[0];
114 rgba[GCOMP] = src[0];
115 rgba[BCOMP] = src[0];
116 rgba[ACOMP] = CHAN_MAX;
117 }
118
119 static void FETCH(luminance_alpha)( const struct gl_texture_image *texImage,
120 GLint i, GLint j, GLint k, GLvoid *texel )
121 {
122 const GLchan *src = CHAN_SRC( texImage, i, j, k, 2 );
123 GLchan *rgba = (GLchan *) texel;
124 rgba[RCOMP] = src[0];
125 rgba[GCOMP] = src[0];
126 rgba[BCOMP] = src[0];
127 rgba[ACOMP] = src[1];
128 }
129
130 static void FETCH(intensity)( const struct gl_texture_image *texImage,
131 GLint i, GLint j, GLint k, GLvoid *texel )
132 {
133 const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 );
134 GLchan *rgba = (GLchan *) texel;
135 rgba[RCOMP] = src[0];
136 rgba[GCOMP] = src[0];
137 rgba[BCOMP] = src[0];
138 rgba[ACOMP] = src[0];
139 }
140
141 static void FETCH(color_index)( const struct gl_texture_image *texImage,
142 GLint i, GLint j, GLint k, GLvoid *texel )
143 {
144 const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 );
145 GLchan *index = (GLchan *) texel;
146 *index = *src;
147 }
148
149 static void FETCH(depth_component)( const struct gl_texture_image *texImage,
150 GLint i, GLint j, GLint k, GLvoid *texel )
151 {
152 const GLfloat *src = FLOAT_SRC( texImage, i, j, k );
153 GLfloat *depth = (GLfloat *) texel;
154 *depth = *src;
155 }
156
157 static void FETCH(rgba8888)( const struct gl_texture_image *texImage,
158 GLint i, GLint j, GLint k, GLvoid *texel )
159 {
160 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 );
161 GLchan *rgba = (GLchan *) texel;
162 rgba[RCOMP] = UBYTE_TO_CHAN( src[3] );
163 rgba[GCOMP] = UBYTE_TO_CHAN( src[2] );
164 rgba[BCOMP] = UBYTE_TO_CHAN( src[1] );
165 rgba[ACOMP] = UBYTE_TO_CHAN( src[0] );
166 }
167
168 static void FETCH(argb8888)( const struct gl_texture_image *texImage,
169 GLint i, GLint j, GLint k, GLvoid *texel )
170 {
171 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 );
172 GLchan *rgba = (GLchan *) texel;
173 rgba[RCOMP] = UBYTE_TO_CHAN( src[2] );
174 rgba[GCOMP] = UBYTE_TO_CHAN( src[1] );
175 rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
176 rgba[ACOMP] = UBYTE_TO_CHAN( src[3] );
177 }
178
179 static void FETCH(rgb888)( const struct gl_texture_image *texImage,
180 GLint i, GLint j, GLint k, GLvoid *texel )
181 {
182 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 3 );
183 GLchan *rgba = (GLchan *) texel;
184 rgba[RCOMP] = UBYTE_TO_CHAN( src[2] );
185 rgba[GCOMP] = UBYTE_TO_CHAN( src[1] );
186 rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
187 rgba[ACOMP] = CHAN_MAX;
188 }
189
190 static void FETCH(rgb565)( const struct gl_texture_image *texImage,
191 GLint i, GLint j, GLint k, GLvoid *texel )
192 {
193 const GLushort *src = USHORT_SRC( texImage, i, j, k );
194 GLchan *rgba = (GLchan *) texel; GLushort s = *src;
195 rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) * 255 / 0xf8 );
196 rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) * 255 / 0xfc );
197 rgba[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) * 255 / 0xf8 );
198 rgba[ACOMP] = CHAN_MAX;
199 }
200
201 static void FETCH(argb4444)( const struct gl_texture_image *texImage,
202 GLint i, GLint j, GLint k, GLvoid *texel )
203 {
204 const GLushort *src = USHORT_SRC( texImage, i, j, k );
205 GLchan *rgba = (GLchan *) texel; GLushort s = *src;
206 rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf) * 255 / 0xf );
207 rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 4) & 0xf) * 255 / 0xf );
208 rgba[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf) * 255 / 0xf );
209 rgba[ACOMP] = UBYTE_TO_CHAN( ((s >> 12) & 0xf) * 255 / 0xf );
210 }
211
212 static void FETCH(argb1555)( const struct gl_texture_image *texImage,
213 GLint i, GLint j, GLint k, GLvoid *texel )
214 {
215 const GLushort *src = USHORT_SRC( texImage, i, j, k );
216 GLchan *rgba = (GLchan *) texel; GLushort s = *src;
217 rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 10) & 0xf8) * 255 / 0xf8 );
218 rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 5) & 0xf8) * 255 / 0xf8 );
219 rgba[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf8) * 255 / 0xf8 );
220 rgba[ACOMP] = UBYTE_TO_CHAN( ((s >> 15) & 0x01) * 255 );
221 }
222
223 static void FETCH(al88)( const struct gl_texture_image *texImage,
224 GLint i, GLint j, GLint k, GLvoid *texel )
225 {
226 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 2 );
227 GLchan *rgba = (GLchan *) texel;
228 rgba[RCOMP] = UBYTE_TO_CHAN( src[0] );
229 rgba[GCOMP] = UBYTE_TO_CHAN( src[0] );
230 rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
231 rgba[ACOMP] = UBYTE_TO_CHAN( src[1] );
232 }
233
234 static void FETCH(rgb332)( const struct gl_texture_image *texImage,
235 GLint i, GLint j, GLint k, GLvoid *texel )
236 {
237 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
238 GLchan *rgba = (GLchan *) texel; GLubyte s = *src;
239 rgba[RCOMP] = UBYTE_TO_CHAN( ((s ) & 0xe0) * 255 / 0xe0 );
240 rgba[GCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xe0) * 255 / 0xe0 );
241 rgba[BCOMP] = UBYTE_TO_CHAN( ((s << 5) & 0xc0) * 255 / 0xc0 );
242 rgba[ACOMP] = CHAN_MAX;
243 }
244
245 static void FETCH(a8)( const struct gl_texture_image *texImage,
246 GLint i, GLint j, GLint k, GLvoid *texel )
247 {
248 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
249 GLchan *rgba = (GLchan *) texel;
250 rgba[RCOMP] = 0;
251 rgba[GCOMP] = 0;
252 rgba[BCOMP] = 0;
253 rgba[ACOMP] = UBYTE_TO_CHAN( src[0] );
254 }
255
256 static void FETCH(l8)( const struct gl_texture_image *texImage,
257 GLint i, GLint j, GLint k, GLvoid *texel )
258 {
259 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
260 GLchan *rgba = (GLchan *) texel;
261 rgba[RCOMP] = UBYTE_TO_CHAN( src[0] );
262 rgba[GCOMP] = UBYTE_TO_CHAN( src[0] );
263 rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
264 rgba[ACOMP] = CHAN_MAX;
265 }
266
267 static void FETCH(i8)( const struct gl_texture_image *texImage,
268 GLint i, GLint j, GLint k, GLvoid *texel )
269 {
270 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
271 GLchan *rgba = (GLchan *) texel;
272 rgba[RCOMP] = UBYTE_TO_CHAN( src[0] );
273 rgba[GCOMP] = UBYTE_TO_CHAN( src[0] );
274 rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
275 rgba[ACOMP] = UBYTE_TO_CHAN( src[0] );
276 }
277
278 static void FETCH(ci8)( const struct gl_texture_image *texImage,
279 GLint i, GLint j, GLint k, GLvoid *texel )
280 {
281 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
282 GLchan *index = (GLchan *) texel;
283 *index = UBYTE_TO_CHAN( *src );
284 }
285
286
287 #undef CHAN_SRC
288 #undef UBYTE_SRC
289 #undef USHORT_SRC
290 #undef FLOAT_SRC
291 #undef FETCH
292 #undef DIM