- Port 3.4 texture utils, texture format work to 3.5 (including new
[mesa.git] / src / mesa / main / texformat_tmp.h
1
2 #if DIM == 1
3
4 #define CHAN_SRC( t, i, j, k, sz ) \
5 ((GLchan *)(t)->Data + (i) * (sz))
6 #define UBYTE_SRC( t, i, j, k, sz ) \
7 ((GLubyte *)(t)->Data + (i) * (sz))
8 #define USHORT_SRC( t, i, j, k ) \
9 ((GLushort *)(t)->Data + (i))
10 #define FLOAT_SRC( t, i, j, k ) \
11 ((GLfloat *)(t)->Data + (i))
12
13 #define FETCH(x) fetch_1d_texel_##x
14
15 #elif DIM == 2
16
17 #define CHAN_SRC( t, i, j, k, sz ) \
18 ((GLchan *)(t)->Data + ((t)->Width * (j) + (i)) * (sz))
19 #define UBYTE_SRC( t, i, j, k, sz ) \
20 ((GLubyte *)(t)->Data + ((t)->Width * (j) + (i)) * (sz))
21 #define USHORT_SRC( t, i, j, k ) \
22 ((GLushort *)(t)->Data + ((t)->Width * (j) + (i)))
23 #define FLOAT_SRC( t, i, j, k ) \
24 ((GLfloat *)(t)->Data + ((t)->Width * (j) + (i)))
25
26 #define FETCH(x) fetch_2d_texel_##x
27
28 #elif DIM == 3
29
30 #define CHAN_SRC( t, i, j, k, sz ) \
31 (GLchan *)(t)->Data + (((t)->Height * (k) + (j)) * \
32 (t)->Width + (i)) * (sz)
33 #define UBYTE_SRC( t, i, j, k, sz ) \
34 ((GLubyte *)(t)->Data + (((t)->Height * (k) + (j)) * \
35 (t)->Width + (i)) * (sz))
36 #define USHORT_SRC( t, i, j, k ) \
37 ((GLushort *)(t)->Data + (((t)->Height * (k) + (j)) * \
38 (t)->Width + (i)))
39 #define FLOAT_SRC( t, i, j, k ) \
40 ((GLfloat *)(t)->Data + (((t)->Height * (k) + (j)) * \
41 (t)->Width + (i)))
42
43 #define FETCH(x) fetch_3d_texel_##x
44
45 #else
46 #error "..."
47 #endif
48
49
50 static void FETCH(rgba)( const struct gl_texture_image *texImage,
51 GLint i, GLint j, GLint k, GLvoid *texel )
52 {
53 const GLchan *src = CHAN_SRC( texImage, i, j, k, 4 );
54 GLchan *rgba = (GLchan *) texel;
55 COPY_CHAN4( rgba, src );
56 }
57
58 static void FETCH(rgb)( const struct gl_texture_image *texImage,
59 GLint i, GLint j, GLint k, GLvoid *texel )
60 {
61 const GLchan *src = CHAN_SRC( texImage, i, j, k, 3 );
62 GLchan *rgba = (GLchan *) texel;
63 rgba[RCOMP] = src[0];
64 rgba[GCOMP] = src[1];
65 rgba[BCOMP] = src[2];
66 rgba[ACOMP] = CHAN_MAX;
67 }
68
69 static void FETCH(alpha)( const struct gl_texture_image *texImage,
70 GLint i, GLint j, GLint k, GLvoid *texel )
71 {
72 const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 );
73 GLchan *rgba = (GLchan *) texel;
74 rgba[RCOMP] = 0;
75 rgba[GCOMP] = 0;
76 rgba[BCOMP] = 0;
77 rgba[ACOMP] = src[0];
78 }
79
80 static void FETCH(luminance)( const struct gl_texture_image *texImage,
81 GLint i, GLint j, GLint k, GLvoid *texel )
82 {
83 const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 );
84 GLchan *rgba = (GLchan *) texel;
85 rgba[RCOMP] = src[0];
86 rgba[GCOMP] = src[0];
87 rgba[BCOMP] = src[0];
88 rgba[ACOMP] = CHAN_MAX;
89 }
90
91 static void FETCH(luminance_alpha)( const struct gl_texture_image *texImage,
92 GLint i, GLint j, GLint k, GLvoid *texel )
93 {
94 const GLchan *src = CHAN_SRC( texImage, i, j, k, 2 );
95 GLchan *rgba = (GLchan *) texel;
96 rgba[RCOMP] = src[0];
97 rgba[GCOMP] = src[0];
98 rgba[BCOMP] = src[0];
99 rgba[ACOMP] = src[1];
100 }
101
102 static void FETCH(intensity)( const struct gl_texture_image *texImage,
103 GLint i, GLint j, GLint k, GLvoid *texel )
104 {
105 const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 );
106 GLchan *rgba = (GLchan *) texel;
107 rgba[RCOMP] = src[0];
108 rgba[GCOMP] = src[0];
109 rgba[BCOMP] = src[0];
110 rgba[ACOMP] = src[0];
111 }
112
113 static void FETCH(color_index)( const struct gl_texture_image *texImage,
114 GLint i, GLint j, GLint k, GLvoid *texel )
115 {
116 const GLchan *src = CHAN_SRC( texImage, i, j, k, 1 );
117 GLchan *index = (GLchan *) texel;
118 *index = *src;
119 }
120
121 static void FETCH(depth_component)( const struct gl_texture_image *texImage,
122 GLint i, GLint j, GLint k, GLvoid *texel )
123 {
124 const GLfloat *src = FLOAT_SRC( texImage, i, j, k );
125 GLfloat *depth = (GLfloat *) texel;
126 *depth = *src;
127 }
128
129 static void FETCH(rgba8888)( const struct gl_texture_image *texImage,
130 GLint i, GLint j, GLint k, GLvoid *texel )
131 {
132 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 );
133 GLchan *rgba = (GLchan *) texel;
134 rgba[RCOMP] = UBYTE_TO_CHAN( src[3] );
135 rgba[GCOMP] = UBYTE_TO_CHAN( src[2] );
136 rgba[BCOMP] = UBYTE_TO_CHAN( src[1] );
137 rgba[ACOMP] = UBYTE_TO_CHAN( src[0] );
138 }
139
140 static void FETCH(argb8888)( const struct gl_texture_image *texImage,
141 GLint i, GLint j, GLint k, GLvoid *texel )
142 {
143 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 4 );
144 GLchan *rgba = (GLchan *) texel;
145 rgba[RCOMP] = UBYTE_TO_CHAN( src[2] );
146 rgba[GCOMP] = UBYTE_TO_CHAN( src[1] );
147 rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
148 rgba[ACOMP] = UBYTE_TO_CHAN( src[3] );
149 }
150
151 static void FETCH(rgb888)( const struct gl_texture_image *texImage,
152 GLint i, GLint j, GLint k, GLvoid *texel )
153 {
154 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 3 );
155 GLchan *rgba = (GLchan *) texel;
156 rgba[RCOMP] = UBYTE_TO_CHAN( src[2] );
157 rgba[GCOMP] = UBYTE_TO_CHAN( src[1] );
158 rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
159 rgba[ACOMP] = CHAN_MAX;
160 }
161
162 static void FETCH(rgb565)( const struct gl_texture_image *texImage,
163 GLint i, GLint j, GLint k, GLvoid *texel )
164 {
165 const GLushort *src = USHORT_SRC( texImage, i, j, k );
166 GLchan *rgba = (GLchan *) texel; GLushort s = *src;
167 rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf8) * 255 / 0xf8 );
168 rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 3) & 0xfc) * 255 / 0xfc );
169 rgba[BCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xf8) * 255 / 0xf8 );
170 rgba[ACOMP] = CHAN_MAX;
171 }
172
173 static void FETCH(argb4444)( const struct gl_texture_image *texImage,
174 GLint i, GLint j, GLint k, GLvoid *texel )
175 {
176 const GLushort *src = USHORT_SRC( texImage, i, j, k );
177 GLchan *rgba = (GLchan *) texel; GLushort s = *src;
178 rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 8) & 0xf) * 255 / 0xf );
179 rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 4) & 0xf) * 255 / 0xf );
180 rgba[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf) * 255 / 0xf );
181 rgba[ACOMP] = UBYTE_TO_CHAN( ((s >> 12) & 0xf) * 255 / 0xf );
182 }
183
184 static void FETCH(argb1555)( const struct gl_texture_image *texImage,
185 GLint i, GLint j, GLint k, GLvoid *texel )
186 {
187 const GLushort *src = USHORT_SRC( texImage, i, j, k );
188 GLchan *rgba = (GLchan *) texel; GLushort s = *src;
189 rgba[RCOMP] = UBYTE_TO_CHAN( ((s >> 10) & 0xf8) * 255 / 0xf8 );
190 rgba[GCOMP] = UBYTE_TO_CHAN( ((s >> 5) & 0xf8) * 255 / 0xf8 );
191 rgba[BCOMP] = UBYTE_TO_CHAN( ((s ) & 0xf8) * 255 / 0xf8 );
192 rgba[ACOMP] = UBYTE_TO_CHAN( ((s >> 15) & 0x01) * 255 );
193 }
194
195 static void FETCH(al88)( const struct gl_texture_image *texImage,
196 GLint i, GLint j, GLint k, GLvoid *texel )
197 {
198 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 2 );
199 GLchan *rgba = (GLchan *) texel;
200 rgba[RCOMP] = UBYTE_TO_CHAN( src[0] );
201 rgba[GCOMP] = UBYTE_TO_CHAN( src[0] );
202 rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
203 rgba[ACOMP] = UBYTE_TO_CHAN( src[1] );
204 }
205
206 static void FETCH(rgb332)( const struct gl_texture_image *texImage,
207 GLint i, GLint j, GLint k, GLvoid *texel )
208 {
209 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
210 GLchan *rgba = (GLchan *) texel; GLubyte s = *src;
211 rgba[RCOMP] = UBYTE_TO_CHAN( ((s ) & 0xe0) * 255 / 0xe0 );
212 rgba[GCOMP] = UBYTE_TO_CHAN( ((s << 3) & 0xe0) * 255 / 0xe0 );
213 rgba[BCOMP] = UBYTE_TO_CHAN( ((s << 5) & 0xc0) * 255 / 0xc0 );
214 rgba[ACOMP] = CHAN_MAX;
215 }
216
217 static void FETCH(a8)( const struct gl_texture_image *texImage,
218 GLint i, GLint j, GLint k, GLvoid *texel )
219 {
220 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
221 GLchan *rgba = (GLchan *) texel;
222 rgba[RCOMP] = 0;
223 rgba[GCOMP] = 0;
224 rgba[BCOMP] = 0;
225 rgba[ACOMP] = UBYTE_TO_CHAN( src[0] );
226 }
227
228 static void FETCH(l8)( const struct gl_texture_image *texImage,
229 GLint i, GLint j, GLint k, GLvoid *texel )
230 {
231 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
232 GLchan *rgba = (GLchan *) texel;
233 rgba[RCOMP] = UBYTE_TO_CHAN( src[0] );
234 rgba[GCOMP] = UBYTE_TO_CHAN( src[0] );
235 rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
236 rgba[ACOMP] = CHAN_MAX;
237 }
238
239 static void FETCH(i8)( const struct gl_texture_image *texImage,
240 GLint i, GLint j, GLint k, GLvoid *texel )
241 {
242 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
243 GLchan *rgba = (GLchan *) texel;
244 rgba[RCOMP] = UBYTE_TO_CHAN( src[0] );
245 rgba[GCOMP] = UBYTE_TO_CHAN( src[0] );
246 rgba[BCOMP] = UBYTE_TO_CHAN( src[0] );
247 rgba[ACOMP] = UBYTE_TO_CHAN( src[0] );
248 }
249
250 static void FETCH(ci8)( const struct gl_texture_image *texImage,
251 GLint i, GLint j, GLint k, GLvoid *texel )
252 {
253 const GLubyte *src = UBYTE_SRC( texImage, i, j, k, 1 );
254 GLchan *index = (GLchan *) texel;
255 *index = UBYTE_TO_CHAN( *src );
256 }
257
258
259 #undef CHAN_SRC
260 #undef UBYTE_SRC
261 #undef USHORT_SRC
262 #undef FLOAT_SRC
263 #undef FETCH
264 #undef DIM