13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/* 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * (C) Copyright IBM Corporation 2004 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 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 * on the rights to use, copy, modify, merge, publish, distribute, sub 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * license, and/or sell copies of the Software, and to permit persons to whom 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the Software is furnished to do so, subject to the following conditions: 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice (including the next 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * paragraph) shall be included in all copies or substantial portions of the 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Software. 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * USE OR OTHER DEALINGS IN THE SOFTWARE. 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * \file glx_texture_compression.c 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Contains the routines required to implement GLX protocol for 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * ARB_texture_compression and related extensions. 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * \sa http://oss.sgi.com/projects/ogl-sample/registry/ARB/texture_compression.txt 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * \author Ian Romanick <idr@us.ibm.com> 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "packrender.h" 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "packsingle.h" 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "indirect.h" 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include <assert.h> 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glGetCompressedTexImageARB(GLenum target, GLint level, 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLvoid * img) 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_SINGLE_DECLARE_VARIABLES(); 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org xGLXGetTexImageReply reply; 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org size_t image_bytes; 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_SINGLE_LOAD_VARIABLES(); 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_SINGLE_BEGIN(X_GLsop_GetCompressedTexImage, 8); 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_SINGLE_PUT_LONG(0, target); 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_SINGLE_PUT_LONG(4, level); 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_SINGLE_READ_XREPLY(); 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org image_bytes = reply.width; 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org assert(image_bytes <= ((4 * reply.length) - 0)); 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org assert(image_bytes >= ((4 * reply.length) - 3)); 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (image_bytes != 0) { 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org _XRead(dpy, (char *) img, image_bytes); 623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (image_bytes < (4 * reply.length)) { 633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org _XEatData(dpy, (4 * reply.length) - image_bytes); 643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_SINGLE_END(); 683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Internal function used for \c glCompressedTexImage1D and 733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * \c glCompressedTexImage2D. 743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic void 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgCompressedTexImage1D2D(GLenum target, GLint level, 773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLenum internal_format, 783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLsizei width, GLsizei height, 793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint border, GLsizei image_size, 803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLvoid * data, CARD32 rop) 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_DECLARE_VARIABLES(); 833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_LOAD_VARIABLES(); 853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (gc->currentDpy == NULL) { 863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if ((target == GL_PROXY_TEXTURE_1D) 903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org || (target == GL_PROXY_TEXTURE_2D) 913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org || (target == GL_PROXY_TEXTURE_CUBE_MAP)) { 923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org compsize = 0; 933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org compsize = image_size; 963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdlen = __GLX_PAD(__GLX_COMPRESSED_TEXIMAGE_CMD_HDR_SIZE + compsize); 993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (cmdlen <= gc->maxSmallRenderCommandSize) { 1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE(rop, cmdlen); 1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(4, target); 1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(8, level); 1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(12, internal_format); 1043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(16, width); 1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(20, height); 1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(24, border); 1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(28, image_size); 1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (compsize != 0) { 1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_CHAR_ARRAY(__GLX_COMPRESSED_TEXIMAGE_CMD_HDR_SIZE, 1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data, image_size); 1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_END(cmdlen); 1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org assert(compsize != 0); 1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE_LARGE(rop, cmdlen + 4); 1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(8, target); 1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(12, level); 1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(16, internal_format); 1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(20, width); 1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(24, height); 1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(28, border); 1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(32, image_size); 1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, gc->pc, 1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_COMPRESSED_TEXIMAGE_CMD_HDR_SIZE + 4, 1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data, image_size); 1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Internal function used for \c glCompressedTexSubImage1D and 1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * \c glCompressedTexSubImage2D. 1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstatic void 1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgCompressedTexSubImage1D2D(GLenum target, GLint level, 1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLsizei xoffset, GLsizei yoffset, 1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLsizei width, GLsizei height, 1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLenum format, GLsizei image_size, 1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLvoid * data, CARD32 rop) 1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_DECLARE_VARIABLES(); 1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_LOAD_VARIABLES(); 1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (gc->currentDpy == NULL) { 1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (target == GL_PROXY_TEXTURE_3D) { 1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org compsize = 0; 1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org compsize = image_size; 1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdlen = __GLX_PAD(__GLX_COMPRESSED_TEXSUBIMAGE_CMD_HDR_SIZE + compsize); 1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (cmdlen <= gc->maxSmallRenderCommandSize) { 1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE(rop, cmdlen); 1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(4, target); 1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(8, level); 1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(12, xoffset); 1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(16, yoffset); 1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(20, width); 1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(24, height); 1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(28, format); 1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(32, image_size); 1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (compsize != 0) { 1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_CHAR_ARRAY(__GLX_COMPRESSED_TEXSUBIMAGE_CMD_HDR_SIZE, 1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data, image_size); 1713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_END(cmdlen); 1733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 1753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org assert(compsize != 0); 1763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE_LARGE(rop, cmdlen + 4); 1783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(8, target); 1793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(12, level); 1803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(16, xoffset); 1813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(20, yoffset); 1823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(24, width); 1833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(28, height); 1843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(32, format); 1853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(36, image_size); 1863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, gc->pc, 1873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_COMPRESSED_TEXSUBIMAGE_CMD_HDR_SIZE + 4, 1883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data, image_size); 1893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 1903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 1943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glCompressedTexImage1DARB(GLenum target, GLint level, 1953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLenum internal_format, GLsizei width, 1963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint border, GLsizei image_size, 1973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLvoid * data) 1983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 1993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org CompressedTexImage1D2D(target, level, internal_format, width, 0, 2003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org border, image_size, data, 2013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org X_GLrop_CompressedTexImage1D); 2023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 2063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glCompressedTexImage2DARB(GLenum target, GLint level, 2073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLenum internal_format, 2083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLsizei width, GLsizei height, 2093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint border, GLsizei image_size, 2103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLvoid * data) 2113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 2123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org CompressedTexImage1D2D(target, level, internal_format, width, height, 2133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org border, image_size, data, 2143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org X_GLrop_CompressedTexImage2D); 2153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 2193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glCompressedTexImage3DARB(GLenum target, GLint level, 2203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLenum internal_format, 2213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLsizei width, GLsizei height, 2223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLsizei depth, GLint border, 2233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLsizei image_size, const GLvoid * data) 2243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 2253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_DECLARE_VARIABLES(); 2263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_LOAD_VARIABLES(); 2283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (gc->currentDpy == NULL) { 2293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 2303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdlen = __GLX_PAD(__GLX_COMPRESSED_TEXIMAGE_3D_CMD_HDR_SIZE + image_size); 2333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (cmdlen <= gc->maxSmallRenderCommandSize) { 2343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE(X_GLrop_CompressedTexImage3D, cmdlen); 2353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(4, target); 2363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(8, level); 2373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(12, internal_format); 2383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(16, width); 2393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(20, height); 2403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(24, depth); 2413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(28, border); 2423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(32, image_size); 2433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (image_size != 0) { 2443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_CHAR_ARRAY(__GLX_COMPRESSED_TEXIMAGE_3D_CMD_HDR_SIZE, 2453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data, image_size); 2463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_END(cmdlen); 2483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 2503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE_LARGE(X_GLrop_CompressedTexImage3D, cmdlen + 4); 2513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(8, target); 2523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(12, level); 2533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(16, internal_format); 2543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(20, width); 2553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(24, height); 2563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(28, depth); 2573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(32, border); 2583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(36, image_size); 2593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, gc->pc, 2603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_COMPRESSED_TEXIMAGE_3D_CMD_HDR_SIZE + 4, 2613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data, image_size); 2623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 2633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 2673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glCompressedTexSubImage1DARB(GLenum target, GLint level, 2683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint xoffset, 2693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLsizei width, 2703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLenum format, GLsizei image_size, 2713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLvoid * data) 2723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 2733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org CompressedTexSubImage1D2D(target, level, xoffset, 0, width, 0, 2743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org format, image_size, data, 2753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org X_GLrop_CompressedTexSubImage1D); 2763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 2803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glCompressedTexSubImage2DARB(GLenum target, GLint level, 2813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint xoffset, GLint yoffset, 2823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLsizei width, GLsizei height, 2833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLenum format, GLsizei image_size, 2843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLvoid * data) 2853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 2863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org CompressedTexSubImage1D2D(target, level, xoffset, yoffset, width, height, 2873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org format, image_size, data, 2883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org X_GLrop_CompressedTexSubImage2D); 2893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 2903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 2923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid 2933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glCompressedTexSubImage3DARB(GLenum target, GLint level, 2943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint xoffset, GLint yoffset, 2953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLint zoffset, GLsizei width, 2963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLsizei height, GLsizei depth, 2973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org GLenum format, GLsizei image_size, 2983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const GLvoid * data) 2993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 3003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_DECLARE_VARIABLES(); 3013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_LOAD_VARIABLES(); 3033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (gc->currentDpy == NULL) { 3043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org return; 3053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 3073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org cmdlen = __GLX_PAD(__GLX_COMPRESSED_TEXSUBIMAGE_3D_CMD_HDR_SIZE 3083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org + image_size); 3093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (cmdlen <= gc->maxSmallRenderCommandSize) { 3103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE(X_GLrop_CompressedTexSubImage3D, cmdlen); 3113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(4, target); 3123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(8, level); 3133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(12, xoffset); 3143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(16, yoffset); 3153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(20, zoffset); 3163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(24, width); 3173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(28, height); 3183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(32, depth); 3193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(36, format); 3203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(40, image_size); 3213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org if (image_size != 0) { 3223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_CHAR_ARRAY(__GLX_COMPRESSED_TEXSUBIMAGE_3D_CMD_HDR_SIZE, 3233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data, image_size); 3243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_END(cmdlen); 3263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org else { 3283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_BEGIN_VARIABLE_LARGE(X_GLrop_CompressedTexSubImage3D, cmdlen + 4); 3293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(8, target); 3303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(12, level); 3313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(16, xoffset); 3323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(20, yoffset); 3333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(24, zoffset); 3343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(28, width); 3353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(32, height); 3363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(36, depth); 3373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(40, format); 3383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_PUT_LONG(44, image_size); 3393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __glXSendLargeCommand(gc, gc->pc, 3403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org __GLX_COMPRESSED_TEXSUBIMAGE_3D_CMD_HDR_SIZE + 4, 3413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org data, image_size); 3423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org } 3433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 344