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