13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the "Software"), 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * to deal in the Software without restriction, including without limitation 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense, 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * and/or sell copies of the Software, and to permit persons to whom the 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Software is furnished to do so, subject to the following conditions: 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice including the dates of first publication and 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * either this permission notice or a reference to 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * http://oss.sgi.com/projects/FreeB/ 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * shall be included in all copies or substantial portions of the Software. 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SOFTWARE. 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Except as contained in this notice, the name of Silicon Graphics, Inc. 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * shall not be used in advertising or otherwise to promote the sale, use or 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * other dealings in this Software without prior written authorization from 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Silicon Graphics, Inc. 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "packrender.h" 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org** Routines to pack evaluator maps into the transport buffer. Maps are 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org** allowed to have extra arbitrary data, so these routines extract just 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org** the information that the GL needs. 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org*/ 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__glFillMap1f(GLint k, GLint order, GLint stride, 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLfloat * points, GLubyte * pc) 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (stride == k) { 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Just copy the data */ 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT_ARRAY(0, points, order * k); 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint i; 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0; i < order; i++) { 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT_ARRAY(0, points, k); 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org points += stride; 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org pc += k * __GLX_SIZE_FLOAT32; 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__glFillMap1d(GLint k, GLint order, GLint stride, 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLdouble * points, GLubyte * pc) 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (stride == k) { 633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Just copy the data */ 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE_ARRAY(0, points, order * k); 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint i; 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0; i < order; i++) { 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE_ARRAY(0, points, k); 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org points += stride; 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org pc += k * __GLX_SIZE_FLOAT64; 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__glFillMap2f(GLint k, GLint majorOrder, GLint minorOrder, 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint majorStride, GLint minorStride, 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLfloat * points, GLfloat * data) 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint i, j, x; 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if ((minorStride == k) && (majorStride == minorOrder * k)) { 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Just copy the data */ 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_MEM_COPY(data, points, majorOrder * majorStride * 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_SIZE_FLOAT32); 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0; i < majorOrder; i++) { 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (j = 0; j < minorOrder; j++) { 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (x = 0; x < k; x++) { 923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data[x] = points[x]; 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org points += minorStride; 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data += k; 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org points += majorStride - minorStride * minorOrder; 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__glFillMap2d(GLint k, GLint majorOrder, GLint minorOrder, 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint majorStride, GLint minorStride, 1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLdouble * points, GLdouble * data) 1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int i, j, x; 1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if ((minorStride == k) && (majorStride == minorOrder * k)) { 1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Just copy the data */ 1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_MEM_COPY(data, points, majorOrder * majorStride * 1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_SIZE_FLOAT64); 1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifdef __GLX_ALIGN64 1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org x = k * __GLX_SIZE_FLOAT64; 1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (i = 0; i < majorOrder; i++) { 1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (j = 0; j < minorOrder; j++) { 1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifdef __GLX_ALIGN64 1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_MEM_COPY(data, points, x); 1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#else 1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org for (x = 0; x < k; x++) { 1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data[x] = points[x]; 1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org points += minorStride; 1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data += k; 1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org points += majorStride - minorStride * minorOrder; 1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 133