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#include "indirect.h" 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "indirect_size.h" 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org** This file contains routines that might need to be transported as 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org** GLXRender or GLXRenderLarge commands, and these commands don't 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org** use the pixel header. See renderpix.c for those routines. 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org*/ 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint order, const GLdouble * pnts) 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_DECLARE_VARIABLES(); 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint k; 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_LOAD_VARIABLES(); 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org k = __glMap1d_size(target); 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (k == 0) { 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_INVALID_ENUM); 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else if (stride < k || order <= 0) { 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_INVALID_VALUE); 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org compsize = k * order * __GLX_SIZE_FLOAT64; 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdlen = 28 + compsize; 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!gc->currentDpy) 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (cmdlen <= gc->maxSmallRenderCommandSize) { 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Use GLXRender protocol to send small command */ 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE(X_GLrop_Map1d, cmdlen); 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(4, u1); 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(12, u2); 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(20, target); 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(24, order); 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** NOTE: the doubles that follow are not aligned because of 3 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** longs preceeding 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glFillMap1d(k, order, stride, pnts, (pc + 28)); 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_END(cmdlen); 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Use GLXRenderLarge protocol to send command */ 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE_LARGE(X_GLrop_Map1d, cmdlen + 4); 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(8, u1); 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(16, u2); 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(24, target); 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(28, order); 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** NOTE: the doubles that follow are not aligned because of 3 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** longs preceeding 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (stride != k) { 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLubyte *buf; 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org buf = (GLubyte *) Xmalloc(compsize); 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!buf) { 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_OUT_OF_MEMORY); 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glFillMap1d(k, order, stride, pnts, buf); 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, pc, 32, buf, compsize); 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Xfree((char *) buf); 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Data is already packed. Just send it out */ 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, pc, 32, pnts, compsize); 1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, 1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint order, const GLfloat * pnts) 1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_DECLARE_VARIABLES(); 1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint k; 1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_LOAD_VARIABLES(); 1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org k = __glMap1f_size(target); 1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (k == 0) { 1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_INVALID_ENUM); 1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else if (stride < k || order <= 0) { 1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_INVALID_VALUE); 1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org compsize = k * order * __GLX_SIZE_FLOAT32; 1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdlen = 20 + compsize; 1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!gc->currentDpy) 1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* 1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** The order that arguments are packed is different from the order 1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** for glMap1d. 1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (cmdlen <= gc->maxSmallRenderCommandSize) { 1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Use GLXRender protocol to send small command */ 1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE(X_GLrop_Map1f, cmdlen); 1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(4, target); 1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(8, u1); 1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(12, u2); 1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(16, order); 1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glFillMap1f(k, order, stride, pnts, (GLubyte *) (pc + 20)); 1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_END(cmdlen); 1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Use GLXRenderLarge protocol to send command */ 1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE_LARGE(X_GLrop_Map1f, cmdlen + 4); 1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(8, target); 1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(12, u1); 1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(16, u2); 1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(20, order); 1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (stride != k) { 1533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLubyte *buf; 1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org buf = (GLubyte *) Xmalloc(compsize); 1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!buf) { 1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_OUT_OF_MEMORY); 1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glFillMap1f(k, order, stride, pnts, buf); 1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, pc, 24, buf, compsize); 1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Xfree((char *) buf); 1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Data is already packed. Just send it out */ 1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, pc, 24, pnts, compsize); 1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 1723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustr, 1733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint uord, GLdouble v1, GLdouble v2, GLint vstr, 1743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint vord, const GLdouble * pnts) 1753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 1763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_DECLARE_VARIABLES(); 1773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint k; 1783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_LOAD_VARIABLES(); 1803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org k = __glMap2d_size(target); 1813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (k == 0) { 1823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_INVALID_ENUM); 1833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 1843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else if (vstr < k || ustr < k || vord <= 0 || uord <= 0) { 1863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_INVALID_VALUE); 1873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 1883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org compsize = k * uord * vord * __GLX_SIZE_FLOAT64; 1903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdlen = 48 + compsize; 1913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!gc->currentDpy) 1923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 1933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (cmdlen <= gc->maxSmallRenderCommandSize) { 1953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Use GLXRender protocol to send small command */ 1963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE(X_GLrop_Map2d, cmdlen); 1973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(4, u1); 1983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(12, u2); 1993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(20, v1); 2003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(28, v2); 2013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(36, target); 2023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(40, uord); 2033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(44, vord); 2043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* 2053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** Pack into a u-major ordering. 2063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** NOTE: the doubles that follow are not aligned because of 5 2073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** longs preceeding 2083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 2093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glFillMap2d(k, uord, vord, ustr, vstr, pnts, (GLdouble *) (pc + 48)); 2103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_END(cmdlen); 2113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 2133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Use GLXRenderLarge protocol to send command */ 2143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE_LARGE(X_GLrop_Map2d, cmdlen + 4); 2153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(8, u1); 2163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(16, u2); 2173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(24, v1); 2183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_DOUBLE(32, v2); 2193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(40, target); 2203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(44, uord); 2213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(48, vord); 2223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* 2243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** NOTE: the doubles that follow are not aligned because of 5 2253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** longs preceeding 2263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 2273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if ((vstr != k) || (ustr != k * vord)) { 2283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLdouble *buf; 2293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org buf = (GLdouble *) Xmalloc(compsize); 2313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!buf) { 2323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_OUT_OF_MEMORY); 2333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 2343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* 2363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** Pack into a u-major ordering. 2373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 2383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glFillMap2d(k, uord, vord, ustr, vstr, pnts, buf); 2393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, pc, 52, buf, compsize); 2403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Xfree((char *) buf); 2413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 2433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Data is already packed. Just send it out */ 2443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, pc, 52, pnts, compsize); 2453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 2503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustr, 2513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint uord, GLfloat v1, GLfloat v2, GLint vstr, GLint vord, 2523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLfloat * pnts) 2533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 2543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_DECLARE_VARIABLES(); 2553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint k; 2563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_LOAD_VARIABLES(); 2583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org k = __glMap2f_size(target); 2593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (k == 0) { 2603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_INVALID_ENUM); 2613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 2623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else if (vstr < k || ustr < k || vord <= 0 || uord <= 0) { 2643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_INVALID_VALUE); 2653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 2663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org compsize = k * uord * vord * __GLX_SIZE_FLOAT32; 2683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdlen = 32 + compsize; 2693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!gc->currentDpy) 2703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 2713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* 2733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** The order that arguments are packed is different from the order 2743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** for glMap2d. 2753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 2763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (cmdlen <= gc->maxSmallRenderCommandSize) { 2773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Use GLXRender protocol to send small command */ 2783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE(X_GLrop_Map2f, cmdlen); 2793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(4, target); 2803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(8, u1); 2813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(12, u2); 2823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(16, uord); 2833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(20, v1); 2843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(24, v2); 2853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(28, vord); 2863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* 2873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** Pack into a u-major ordering. 2883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 2893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glFillMap2f(k, uord, vord, ustr, vstr, pnts, (GLfloat *) (pc + 32)); 2903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_END(cmdlen); 2913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 2933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Use GLXRenderLarge protocol to send command */ 2943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE_LARGE(X_GLrop_Map2f, cmdlen + 4); 2953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(8, target); 2963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(12, u1); 2973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(16, u2); 2983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(20, uord); 2993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(24, v1); 3003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_FLOAT(28, v2); 3013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(32, vord); 3023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if ((vstr != k) || (ustr != k * vord)) { 3043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLfloat *buf; 3053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org buf = (GLfloat *) Xmalloc(compsize); 3073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!buf) { 3083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSetError(gc, GL_OUT_OF_MEMORY); 3093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 3103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* 3123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org ** Pack into a u-major ordering. 3133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 3143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glFillMap2f(k, uord, vord, ustr, vstr, pnts, buf); 3153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, pc, 36, buf, compsize); 3163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org Xfree((char *) buf); 3173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 3193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org /* Data is already packed. Just send it out */ 3203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, pc, 36, pnts, compsize); 3213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 3263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glEnable(GLenum cap) 3273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 3283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_DECLARE_VARIABLES(); 3293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_LOAD_VARIABLES(); 3313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!gc->currentDpy) 3323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 3333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org switch (cap) { 3353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_COLOR_ARRAY: 3363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_EDGE_FLAG_ARRAY: 3373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_INDEX_ARRAY: 3383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_NORMAL_ARRAY: 3393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_TEXTURE_COORD_ARRAY: 3403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_VERTEX_ARRAY: 3413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_SECONDARY_COLOR_ARRAY: 3423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_FOG_COORD_ARRAY: 3433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __indirect_glEnableClientState(cap); 3443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 3453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org default: 3463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 3473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN(X_GLrop_Enable, 8); 3503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(4, cap); 3513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_END(8); 3523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 3533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 3553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glDisable(GLenum cap) 3563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 3573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_DECLARE_VARIABLES(); 3583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_LOAD_VARIABLES(); 3603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (!gc->currentDpy) 3613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 3623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org switch (cap) { 3643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_COLOR_ARRAY: 3653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_EDGE_FLAG_ARRAY: 3663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_INDEX_ARRAY: 3673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_NORMAL_ARRAY: 3683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_TEXTURE_COORD_ARRAY: 3693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_VERTEX_ARRAY: 3703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_SECONDARY_COLOR_ARRAY: 3713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org case GL_FOG_COORD_ARRAY: 3723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __indirect_glDisableClientState(cap); 3733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 3743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org default: 3753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org break; 3763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN(X_GLrop_Disable, 8); 3793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(4, cap); 3803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_END(8); 3813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 382