1cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/*
2dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
3dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
4dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson *
5dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * Permission is hereby granted, free of charge, to any person obtaining a
6dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * copy of this software and associated documentation files (the "Software"),
7dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * to deal in the Software without restriction, including without limitation
8dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * and/or sell copies of the Software, and to permit persons to whom the
10dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * Software is furnished to do so, subject to the following conditions:
11dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson *
12dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * The above copyright notice including the dates of first publication and
13dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * either this permission notice or a reference to
14dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * http://oss.sgi.com/projects/FreeB/
15dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * shall be included in all copies or substantial portions of the Software.
16dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson *
17dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
22dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * SOFTWARE.
24dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson *
25dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * Except as contained in this notice, the name of Silicon Graphics, Inc.
26dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * shall not be used in advertising or otherwise to promote the sale, use or
27dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * other dealings in this Software without prior written authorization from
28dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson * Silicon Graphics, Inc.
29dc8058c3370588bfcad49fadace1691da47d58cdAdam Jackson */
30cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
31cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#include "packrender.h"
32cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
33cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson/*
34cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson** Routines to pack evaluator maps into the transport buffer.  Maps are
35cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson** allowed to have extra arbitrary data, so these routines extract just
36cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson** the information that the GL needs.
37cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson*/
38cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
39f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristófvoid
40f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf__glFillMap1f(GLint k, GLint order, GLint stride,
41f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf              const GLfloat * points, GLubyte * pc)
42cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
43f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   if (stride == k) {
44f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      /* Just copy the data */
45f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      __GLX_PUT_FLOAT_ARRAY(0, points, order * k);
46f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   }
47f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   else {
48f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      GLint i;
49cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
50f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      for (i = 0; i < order; i++) {
51f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         __GLX_PUT_FLOAT_ARRAY(0, points, k);
52f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         points += stride;
53f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         pc += k * __GLX_SIZE_FLOAT32;
54f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      }
55f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   }
56cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
57cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
58f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristófvoid
59f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf__glFillMap1d(GLint k, GLint order, GLint stride,
60f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf              const GLdouble * points, GLubyte * pc)
61cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
62f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   if (stride == k) {
63f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      /* Just copy the data */
64f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      __GLX_PUT_DOUBLE_ARRAY(0, points, order * k);
65f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   }
66f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   else {
67f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      GLint i;
68f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      for (i = 0; i < order; i++) {
69f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         __GLX_PUT_DOUBLE_ARRAY(0, points, k);
70f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         points += stride;
71f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         pc += k * __GLX_SIZE_FLOAT64;
72f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      }
73f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   }
74cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
75cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
76f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristófvoid
77f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf__glFillMap2f(GLint k, GLint majorOrder, GLint minorOrder,
78f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf              GLint majorStride, GLint minorStride,
79f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf              const GLfloat * points, GLfloat * data)
80cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
81f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   GLint i, j, x;
82cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
83f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   if ((minorStride == k) && (majorStride == minorOrder * k)) {
84f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      /* Just copy the data */
85f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      __GLX_MEM_COPY(data, points, majorOrder * majorStride *
86f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf                     __GLX_SIZE_FLOAT32);
87f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      return;
88f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   }
89f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   for (i = 0; i < majorOrder; i++) {
90f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      for (j = 0; j < minorOrder; j++) {
91f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         for (x = 0; x < k; x++) {
92f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf            data[x] = points[x];
93f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         }
94f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         points += minorStride;
95f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         data += k;
96f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      }
97f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      points += majorStride - minorStride * minorOrder;
98f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   }
99cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
100cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
101f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristófvoid
102f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf__glFillMap2d(GLint k, GLint majorOrder, GLint minorOrder,
103f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf              GLint majorStride, GLint minorStride,
104f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf              const GLdouble * points, GLdouble * data)
105cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson{
106f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   int i, j, x;
107cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
108f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   if ((minorStride == k) && (majorStride == minorOrder * k)) {
109f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      /* Just copy the data */
110f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      __GLX_MEM_COPY(data, points, majorOrder * majorStride *
111f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf                     __GLX_SIZE_FLOAT64);
112f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      return;
113f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   }
114cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson
115cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#ifdef __GLX_ALIGN64
116f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   x = k * __GLX_SIZE_FLOAT64;
117cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif
118f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   for (i = 0; i < majorOrder; i++) {
119f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      for (j = 0; j < minorOrder; j++) {
120cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#ifdef __GLX_ALIGN64
121f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         __GLX_MEM_COPY(data, points, x);
122cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#else
123f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         for (x = 0; x < k; x++) {
124f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf            data[x] = points[x];
125f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         }
126cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson#endif
127f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         points += minorStride;
128f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf         data += k;
129f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      }
130f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf      points += majorStride - minorStride * minorOrder;
131f76724b7672f688fc16622c88394a4a82e8bc660RALOVICH, Kristóf   }
132cb3610e37c4c0a40520441b8515d044dabcc8854Adam Jackson}
133