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 31 static 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 57 static 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 82 static 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 104 static 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 124 static 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 148 static 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 172 static 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 193 static 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 214 static 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