1/*
2 * Mesa 3-D graphics library
3 * Version:  6.5.1
4 *
5 * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25/**
26 * \brief  Templates for vector conversions.
27 * \author Keith Whitwell.
28 */
29
30#ifdef DEST_4F
31static void DEST_4F( GLfloat (*t)[4],
32		     CONST void *ptr,
33		     GLuint stride,
34		     ARGS )
35{
36   const GLubyte *f = (GLubyte *) ptr + SRC_START * stride;
37   const GLubyte *first = f;
38   GLuint i;
39
40   (void) first;
41   (void) start;
42   for (i = DST_START ; i < n ; i++, NEXT_F) {
43      CHECK {
44         NEXT_F2;
45	 if (SZ >= 1) t[i][0] = TRX_4F(f, 0);
46	 if (SZ >= 2) t[i][1] = TRX_4F(f, 1);
47	 if (SZ >= 3) t[i][2] = TRX_4F(f, 2);
48	 if (SZ == 4) t[i][3] = TRX_4F(f, 3); else t[i][3] = 1.0;
49      }
50   }
51}
52#endif
53
54
55
56#ifdef DEST_4FN
57static void DEST_4FN( GLfloat (*t)[4],
58		      CONST void *ptr,
59		      GLuint stride,
60		      ARGS )
61{
62   const GLubyte *f = (GLubyte *) ptr + SRC_START * stride;
63   const GLubyte *first = f;
64   GLuint i;
65
66   (void) first;
67   (void) start;
68   for (i = DST_START ; i < n ; i++, NEXT_F) {
69      CHECK {
70         NEXT_F2;
71	 if (SZ >= 1) t[i][0] = TRX_4FN(f, 0);
72	 if (SZ >= 2) t[i][1] = TRX_4FN(f, 1);
73	 if (SZ >= 3) t[i][2] = TRX_4FN(f, 2);
74	 if (SZ == 4) t[i][3] = TRX_4FN(f, 3); else t[i][3] = 1.0;
75      }
76   }
77}
78#endif
79
80
81#ifdef DEST_3FN
82static void DEST_3FN( GLfloat (*t)[3],
83		     CONST void *ptr,
84		     GLuint stride,
85		     ARGS )
86{
87   const GLubyte *f = (GLubyte *) ptr + SRC_START * stride;
88   const GLubyte *first = f;
89   GLuint i;
90   (void) first;
91   (void) start;
92   for (i = DST_START ; i < n ; i++, NEXT_F) {
93      CHECK {
94         NEXT_F2;
95	 t[i][0] = TRX_3FN(f, 0);
96	 t[i][1] = TRX_3FN(f, 1);
97	 t[i][2] = TRX_3FN(f, 2);
98      }
99   }
100}
101#endif
102
103#ifdef DEST_1F
104static void DEST_1F( GLfloat *t,
105		     CONST void *ptr,
106		     GLuint stride,
107		     ARGS )
108{
109   const GLubyte *f = (GLubyte *) ptr + SRC_START * stride;
110   const GLubyte *first = f;
111   GLuint i;
112   (void) first;
113   (void) start;
114   for (i = DST_START ; i < n ; i++, NEXT_F) {
115      CHECK {
116         NEXT_F2;
117	 t[i] = TRX_1F(f, 0);
118      }
119   }
120}
121#endif
122
123#ifdef DEST_4UB
124static void DEST_4UB( GLubyte (*t)[4],
125                      CONST void *ptr,
126                      GLuint stride,
127                      ARGS )
128{
129   const GLubyte *f = (GLubyte *) ptr + SRC_START * stride;
130   const GLubyte *first = f;
131   GLuint i;
132   (void) start;
133   (void) first;
134   for (i = DST_START ; i < n ; i++, NEXT_F) {
135      CHECK {
136         NEXT_F2;
137	 if (SZ >= 1) TRX_UB(t[i][0], f, 0);
138	 if (SZ >= 2) TRX_UB(t[i][1], f, 1);
139	 if (SZ >= 3) TRX_UB(t[i][2], f, 2);
140	 if (SZ == 4) TRX_UB(t[i][3], f, 3); else t[i][3] = 255;
141      }
142   }
143}
144#endif
145
146
147#ifdef DEST_4US
148static void DEST_4US( GLushort (*t)[4],
149                      CONST void *ptr,
150                      GLuint stride,
151                      ARGS )
152{
153   const GLubyte *f = (GLubyte *) ((GLubyte *) ptr + SRC_START * stride);
154   const GLubyte *first = f;
155   GLuint i;
156   (void) start;
157   (void) first;
158   for (i = DST_START ; i < n ; i++, NEXT_F) {
159      CHECK {
160         NEXT_F2;
161	 if (SZ >= 1) TRX_US(t[i][0], f, 0);
162	 if (SZ >= 2) TRX_US(t[i][1], f, 1);
163	 if (SZ >= 3) TRX_US(t[i][2], f, 2);
164	 if (SZ == 4) TRX_US(t[i][3], f, 3); else t[i][3] = 65535;
165      }
166   }
167}
168#endif
169
170
171#ifdef DEST_1UB
172static void DEST_1UB( GLubyte *t,
173		      CONST void *ptr,
174		      GLuint stride,
175		      ARGS )
176{
177   const GLubyte *f = (GLubyte *) ptr + SRC_START * stride;
178   const GLubyte *first = f;
179   GLuint i;
180   (void) start;
181   (void) first;
182   for (i = DST_START ; i < n ; i++, NEXT_F) {
183      CHECK {
184         NEXT_F2;
185	  TRX_UB(t[i], f, 0);
186      }
187   }
188}
189#endif
190
191
192#ifdef DEST_1UI
193static void DEST_1UI( GLuint *t,
194		      CONST void *ptr,
195		      GLuint stride,
196		      ARGS )
197{
198   const GLubyte *f = (GLubyte *) ptr + SRC_START * stride;
199   const GLubyte *first = f;
200   GLuint i;
201   (void) start;
202   (void) first;
203
204   for (i = DST_START ; i < n ; i++, NEXT_F) {
205      CHECK {
206         NEXT_F2;
207	 t[i] = TRX_UI(f, 0);
208      }
209   }
210}
211#endif
212
213
214static void INIT(void)
215{
216#ifdef DEST_1UI
217   ASSERT(SZ == 1);
218   TAB(_1ui)[SRC_IDX] = DEST_1UI;
219#endif
220#ifdef DEST_1UB
221   ASSERT(SZ == 1);
222   TAB(_1ub)[SRC_IDX] = DEST_1UB;
223#endif
224#ifdef DEST_1F
225   ASSERT(SZ == 1);
226   TAB(_1f)[SRC_IDX] = DEST_1F;
227#endif
228#ifdef DEST_3FN
229   ASSERT(SZ == 3);
230   TAB(_3fn)[SRC_IDX] = DEST_3FN;
231#endif
232#ifdef DEST_4UB
233   TAB(_4ub)[SZ][SRC_IDX] = DEST_4UB;
234#endif
235#ifdef DEST_4US
236   TAB(_4us)[SZ][SRC_IDX] = DEST_4US;
237#endif
238#ifdef DEST_4F
239   TAB(_4f)[SZ][SRC_IDX] = DEST_4F;
240#endif
241#ifdef DEST_4FN
242   TAB(_4fn)[SZ][SRC_IDX] = DEST_4FN;
243#endif
244
245}
246
247
248#ifdef INIT
249#undef INIT
250#endif
251#ifdef DEST_1UI
252#undef DEST_1UI
253#endif
254#ifdef DEST_1UB
255#undef DEST_1UB
256#endif
257#ifdef DEST_4UB
258#undef DEST_4UB
259#endif
260#ifdef DEST_4US
261#undef DEST_4US
262#endif
263#ifdef DEST_3FN
264#undef DEST_3FN
265#endif
266#ifdef DEST_4F
267#undef DEST_4F
268#endif
269#ifdef DEST_4FN
270#undef DEST_4FN
271#endif
272#ifdef DEST_1F
273#undef DEST_1F
274#endif
275#ifdef SZ
276#undef SZ
277#endif
278#ifdef TAG
279#undef TAG
280#endif
281
282