xref: /aosp_15_r20/external/mesa3d/src/glx/indirect_texture_compression.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * (C) Copyright IBM Corporation 2004
3*61046927SAndroid Build Coastguard Worker  * All Rights Reserved.
4*61046927SAndroid Build Coastguard Worker  *
5*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
6*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
7*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
8*61046927SAndroid Build Coastguard Worker  * on the rights to use, copy, modify, merge, publish, distribute, sub
9*61046927SAndroid Build Coastguard Worker  * license, and/or sell copies of the Software, and to permit persons to whom
10*61046927SAndroid Build Coastguard Worker  * the Software is furnished to do so, subject to the following conditions:
11*61046927SAndroid Build Coastguard Worker  *
12*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
13*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
14*61046927SAndroid Build Coastguard Worker  * Software.
15*61046927SAndroid Build Coastguard Worker  *
16*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.  IN NO EVENT SHALL
19*61046927SAndroid Build Coastguard Worker  * THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
20*61046927SAndroid Build Coastguard Worker  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
21*61046927SAndroid Build Coastguard Worker  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22*61046927SAndroid Build Coastguard Worker  * USE OR OTHER DEALINGS IN THE SOFTWARE.
23*61046927SAndroid Build Coastguard Worker  */
24*61046927SAndroid Build Coastguard Worker 
25*61046927SAndroid Build Coastguard Worker /**
26*61046927SAndroid Build Coastguard Worker  * \file glx_texture_compression.c
27*61046927SAndroid Build Coastguard Worker  * Contains the routines required to implement GLX protocol for
28*61046927SAndroid Build Coastguard Worker  * ARB_texture_compression and related extensions.
29*61046927SAndroid Build Coastguard Worker  *
30*61046927SAndroid Build Coastguard Worker  * \sa http://oss.sgi.com/projects/ogl-sample/registry/ARB/texture_compression.txt
31*61046927SAndroid Build Coastguard Worker  *
32*61046927SAndroid Build Coastguard Worker  * \author Ian Romanick <[email protected]>
33*61046927SAndroid Build Coastguard Worker  */
34*61046927SAndroid Build Coastguard Worker 
35*61046927SAndroid Build Coastguard Worker #include "packrender.h"
36*61046927SAndroid Build Coastguard Worker #include "packsingle.h"
37*61046927SAndroid Build Coastguard Worker #include "indirect.h"
38*61046927SAndroid Build Coastguard Worker 
39*61046927SAndroid Build Coastguard Worker #include <assert.h>
40*61046927SAndroid Build Coastguard Worker 
41*61046927SAndroid Build Coastguard Worker 
42*61046927SAndroid Build Coastguard Worker void
__indirect_glGetCompressedTexImage(GLenum target,GLint level,GLvoid * img)43*61046927SAndroid Build Coastguard Worker __indirect_glGetCompressedTexImage(GLenum target, GLint level,
44*61046927SAndroid Build Coastguard Worker                                       GLvoid * img)
45*61046927SAndroid Build Coastguard Worker {
46*61046927SAndroid Build Coastguard Worker    __GLX_SINGLE_DECLARE_VARIABLES();
47*61046927SAndroid Build Coastguard Worker    xGLXGetTexImageReply reply;
48*61046927SAndroid Build Coastguard Worker    size_t image_bytes;
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker    __GLX_SINGLE_LOAD_VARIABLES();
51*61046927SAndroid Build Coastguard Worker    __GLX_SINGLE_BEGIN(X_GLsop_GetCompressedTexImage, 8);
52*61046927SAndroid Build Coastguard Worker    __GLX_SINGLE_PUT_LONG(0, target);
53*61046927SAndroid Build Coastguard Worker    __GLX_SINGLE_PUT_LONG(4, level);
54*61046927SAndroid Build Coastguard Worker    __GLX_SINGLE_READ_XREPLY();
55*61046927SAndroid Build Coastguard Worker 
56*61046927SAndroid Build Coastguard Worker    image_bytes = reply.width;
57*61046927SAndroid Build Coastguard Worker    assert(image_bytes <= ((4 * reply.length) - 0));
58*61046927SAndroid Build Coastguard Worker    assert(image_bytes >= ((4 * reply.length) - 3));
59*61046927SAndroid Build Coastguard Worker 
60*61046927SAndroid Build Coastguard Worker    if (image_bytes != 0) {
61*61046927SAndroid Build Coastguard Worker       _XRead(dpy, (char *) img, image_bytes);
62*61046927SAndroid Build Coastguard Worker       if (image_bytes < (4 * reply.length)) {
63*61046927SAndroid Build Coastguard Worker          _XEatData(dpy, (4 * reply.length) - image_bytes);
64*61046927SAndroid Build Coastguard Worker       }
65*61046927SAndroid Build Coastguard Worker    }
66*61046927SAndroid Build Coastguard Worker 
67*61046927SAndroid Build Coastguard Worker    __GLX_SINGLE_END();
68*61046927SAndroid Build Coastguard Worker }
69*61046927SAndroid Build Coastguard Worker 
70*61046927SAndroid Build Coastguard Worker 
71*61046927SAndroid Build Coastguard Worker /**
72*61046927SAndroid Build Coastguard Worker  * Internal function used for \c glCompressedTexImage1D and
73*61046927SAndroid Build Coastguard Worker  * \c glCompressedTexImage2D.
74*61046927SAndroid Build Coastguard Worker  */
75*61046927SAndroid Build Coastguard Worker static void
CompressedTexImage1D2D(GLenum target,GLint level,GLenum internal_format,GLsizei width,GLsizei height,GLint border,GLsizei image_size,const GLvoid * data,CARD32 rop)76*61046927SAndroid Build Coastguard Worker CompressedTexImage1D2D(GLenum target, GLint level,
77*61046927SAndroid Build Coastguard Worker                        GLenum internal_format,
78*61046927SAndroid Build Coastguard Worker                        GLsizei width, GLsizei height,
79*61046927SAndroid Build Coastguard Worker                        GLint border, GLsizei image_size,
80*61046927SAndroid Build Coastguard Worker                        const GLvoid * data, CARD32 rop)
81*61046927SAndroid Build Coastguard Worker {
82*61046927SAndroid Build Coastguard Worker    __GLX_DECLARE_VARIABLES();
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker    __GLX_LOAD_VARIABLES();
85*61046927SAndroid Build Coastguard Worker    if (gc->currentDpy == NULL) {
86*61046927SAndroid Build Coastguard Worker       return;
87*61046927SAndroid Build Coastguard Worker    }
88*61046927SAndroid Build Coastguard Worker 
89*61046927SAndroid Build Coastguard Worker    if ((target == GL_PROXY_TEXTURE_1D)
90*61046927SAndroid Build Coastguard Worker        || (target == GL_PROXY_TEXTURE_2D)
91*61046927SAndroid Build Coastguard Worker        || (target == GL_PROXY_TEXTURE_CUBE_MAP)) {
92*61046927SAndroid Build Coastguard Worker       compsize = 0;
93*61046927SAndroid Build Coastguard Worker    }
94*61046927SAndroid Build Coastguard Worker    else {
95*61046927SAndroid Build Coastguard Worker       compsize = image_size;
96*61046927SAndroid Build Coastguard Worker    }
97*61046927SAndroid Build Coastguard Worker 
98*61046927SAndroid Build Coastguard Worker    cmdlen = __GLX_PAD(__GLX_COMPRESSED_TEXIMAGE_CMD_HDR_SIZE + compsize);
99*61046927SAndroid Build Coastguard Worker    if (cmdlen <= gc->maxSmallRenderCommandSize) {
100*61046927SAndroid Build Coastguard Worker       __GLX_BEGIN_VARIABLE(rop, cmdlen);
101*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(4, target);
102*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(8, level);
103*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(12, internal_format);
104*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(16, width);
105*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(20, height);
106*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(24, border);
107*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(28, image_size);
108*61046927SAndroid Build Coastguard Worker       if (compsize != 0) {
109*61046927SAndroid Build Coastguard Worker          __GLX_PUT_CHAR_ARRAY(__GLX_COMPRESSED_TEXIMAGE_CMD_HDR_SIZE,
110*61046927SAndroid Build Coastguard Worker                               data, image_size);
111*61046927SAndroid Build Coastguard Worker       }
112*61046927SAndroid Build Coastguard Worker       __GLX_END(cmdlen);
113*61046927SAndroid Build Coastguard Worker    }
114*61046927SAndroid Build Coastguard Worker    else {
115*61046927SAndroid Build Coastguard Worker       assert(compsize != 0);
116*61046927SAndroid Build Coastguard Worker 
117*61046927SAndroid Build Coastguard Worker       __GLX_BEGIN_VARIABLE_LARGE(rop, cmdlen + 4);
118*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(8, target);
119*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(12, level);
120*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(16, internal_format);
121*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(20, width);
122*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(24, height);
123*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(28, border);
124*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(32, image_size);
125*61046927SAndroid Build Coastguard Worker       __glXSendLargeCommand(gc, gc->pc,
126*61046927SAndroid Build Coastguard Worker                             __GLX_COMPRESSED_TEXIMAGE_CMD_HDR_SIZE + 4,
127*61046927SAndroid Build Coastguard Worker                             data, image_size);
128*61046927SAndroid Build Coastguard Worker    }
129*61046927SAndroid Build Coastguard Worker }
130*61046927SAndroid Build Coastguard Worker 
131*61046927SAndroid Build Coastguard Worker 
132*61046927SAndroid Build Coastguard Worker /**
133*61046927SAndroid Build Coastguard Worker  * Internal function used for \c glCompressedTexSubImage1D and
134*61046927SAndroid Build Coastguard Worker  * \c glCompressedTexSubImage2D.
135*61046927SAndroid Build Coastguard Worker  */
136*61046927SAndroid Build Coastguard Worker static void
CompressedTexSubImage1D2D(GLenum target,GLint level,GLsizei xoffset,GLsizei yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei image_size,const GLvoid * data,CARD32 rop)137*61046927SAndroid Build Coastguard Worker CompressedTexSubImage1D2D(GLenum target, GLint level,
138*61046927SAndroid Build Coastguard Worker                           GLsizei xoffset, GLsizei yoffset,
139*61046927SAndroid Build Coastguard Worker                           GLsizei width, GLsizei height,
140*61046927SAndroid Build Coastguard Worker                           GLenum format, GLsizei image_size,
141*61046927SAndroid Build Coastguard Worker                           const GLvoid * data, CARD32 rop)
142*61046927SAndroid Build Coastguard Worker {
143*61046927SAndroid Build Coastguard Worker    __GLX_DECLARE_VARIABLES();
144*61046927SAndroid Build Coastguard Worker 
145*61046927SAndroid Build Coastguard Worker    __GLX_LOAD_VARIABLES();
146*61046927SAndroid Build Coastguard Worker    if (gc->currentDpy == NULL) {
147*61046927SAndroid Build Coastguard Worker       return;
148*61046927SAndroid Build Coastguard Worker    }
149*61046927SAndroid Build Coastguard Worker 
150*61046927SAndroid Build Coastguard Worker    if (target == GL_PROXY_TEXTURE_3D) {
151*61046927SAndroid Build Coastguard Worker       compsize = 0;
152*61046927SAndroid Build Coastguard Worker    }
153*61046927SAndroid Build Coastguard Worker    else {
154*61046927SAndroid Build Coastguard Worker       compsize = image_size;
155*61046927SAndroid Build Coastguard Worker    }
156*61046927SAndroid Build Coastguard Worker 
157*61046927SAndroid Build Coastguard Worker    cmdlen = __GLX_PAD(__GLX_COMPRESSED_TEXSUBIMAGE_CMD_HDR_SIZE + compsize);
158*61046927SAndroid Build Coastguard Worker    if (cmdlen <= gc->maxSmallRenderCommandSize) {
159*61046927SAndroid Build Coastguard Worker       __GLX_BEGIN_VARIABLE(rop, cmdlen);
160*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(4, target);
161*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(8, level);
162*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(12, xoffset);
163*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(16, yoffset);
164*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(20, width);
165*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(24, height);
166*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(28, format);
167*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(32, image_size);
168*61046927SAndroid Build Coastguard Worker       if (compsize != 0) {
169*61046927SAndroid Build Coastguard Worker          __GLX_PUT_CHAR_ARRAY(__GLX_COMPRESSED_TEXSUBIMAGE_CMD_HDR_SIZE,
170*61046927SAndroid Build Coastguard Worker                               data, image_size);
171*61046927SAndroid Build Coastguard Worker       }
172*61046927SAndroid Build Coastguard Worker       __GLX_END(cmdlen);
173*61046927SAndroid Build Coastguard Worker    }
174*61046927SAndroid Build Coastguard Worker    else {
175*61046927SAndroid Build Coastguard Worker       assert(compsize != 0);
176*61046927SAndroid Build Coastguard Worker 
177*61046927SAndroid Build Coastguard Worker       __GLX_BEGIN_VARIABLE_LARGE(rop, cmdlen + 4);
178*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(8, target);
179*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(12, level);
180*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(16, xoffset);
181*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(20, yoffset);
182*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(24, width);
183*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(28, height);
184*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(32, format);
185*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(36, image_size);
186*61046927SAndroid Build Coastguard Worker       __glXSendLargeCommand(gc, gc->pc,
187*61046927SAndroid Build Coastguard Worker                             __GLX_COMPRESSED_TEXSUBIMAGE_CMD_HDR_SIZE + 4,
188*61046927SAndroid Build Coastguard Worker                             data, image_size);
189*61046927SAndroid Build Coastguard Worker    }
190*61046927SAndroid Build Coastguard Worker }
191*61046927SAndroid Build Coastguard Worker 
192*61046927SAndroid Build Coastguard Worker 
193*61046927SAndroid Build Coastguard Worker void
__indirect_glCompressedTexImage1D(GLenum target,GLint level,GLenum internal_format,GLsizei width,GLint border,GLsizei image_size,const GLvoid * data)194*61046927SAndroid Build Coastguard Worker __indirect_glCompressedTexImage1D(GLenum target, GLint level,
195*61046927SAndroid Build Coastguard Worker                                      GLenum internal_format, GLsizei width,
196*61046927SAndroid Build Coastguard Worker                                      GLint border, GLsizei image_size,
197*61046927SAndroid Build Coastguard Worker                                      const GLvoid * data)
198*61046927SAndroid Build Coastguard Worker {
199*61046927SAndroid Build Coastguard Worker    CompressedTexImage1D2D(target, level, internal_format, width, 0,
200*61046927SAndroid Build Coastguard Worker                           border, image_size, data,
201*61046927SAndroid Build Coastguard Worker                           X_GLrop_CompressedTexImage1D);
202*61046927SAndroid Build Coastguard Worker }
203*61046927SAndroid Build Coastguard Worker 
204*61046927SAndroid Build Coastguard Worker 
205*61046927SAndroid Build Coastguard Worker void
__indirect_glCompressedTexImage2D(GLenum target,GLint level,GLenum internal_format,GLsizei width,GLsizei height,GLint border,GLsizei image_size,const GLvoid * data)206*61046927SAndroid Build Coastguard Worker __indirect_glCompressedTexImage2D(GLenum target, GLint level,
207*61046927SAndroid Build Coastguard Worker                                      GLenum internal_format,
208*61046927SAndroid Build Coastguard Worker                                      GLsizei width, GLsizei height,
209*61046927SAndroid Build Coastguard Worker                                      GLint border, GLsizei image_size,
210*61046927SAndroid Build Coastguard Worker                                      const GLvoid * data)
211*61046927SAndroid Build Coastguard Worker {
212*61046927SAndroid Build Coastguard Worker    CompressedTexImage1D2D(target, level, internal_format, width, height,
213*61046927SAndroid Build Coastguard Worker                           border, image_size, data,
214*61046927SAndroid Build Coastguard Worker                           X_GLrop_CompressedTexImage2D);
215*61046927SAndroid Build Coastguard Worker }
216*61046927SAndroid Build Coastguard Worker 
217*61046927SAndroid Build Coastguard Worker 
218*61046927SAndroid Build Coastguard Worker void
__indirect_glCompressedTexImage3D(GLenum target,GLint level,GLenum internal_format,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLsizei image_size,const GLvoid * data)219*61046927SAndroid Build Coastguard Worker __indirect_glCompressedTexImage3D(GLenum target, GLint level,
220*61046927SAndroid Build Coastguard Worker                                      GLenum internal_format,
221*61046927SAndroid Build Coastguard Worker                                      GLsizei width, GLsizei height,
222*61046927SAndroid Build Coastguard Worker                                      GLsizei depth, GLint border,
223*61046927SAndroid Build Coastguard Worker                                      GLsizei image_size, const GLvoid * data)
224*61046927SAndroid Build Coastguard Worker {
225*61046927SAndroid Build Coastguard Worker    __GLX_DECLARE_VARIABLES();
226*61046927SAndroid Build Coastguard Worker 
227*61046927SAndroid Build Coastguard Worker    __GLX_LOAD_VARIABLES();
228*61046927SAndroid Build Coastguard Worker    if (gc->currentDpy == NULL) {
229*61046927SAndroid Build Coastguard Worker       return;
230*61046927SAndroid Build Coastguard Worker    }
231*61046927SAndroid Build Coastguard Worker 
232*61046927SAndroid Build Coastguard Worker    cmdlen = __GLX_PAD(__GLX_COMPRESSED_TEXIMAGE_3D_CMD_HDR_SIZE + image_size);
233*61046927SAndroid Build Coastguard Worker    if (cmdlen <= gc->maxSmallRenderCommandSize) {
234*61046927SAndroid Build Coastguard Worker       __GLX_BEGIN_VARIABLE(X_GLrop_CompressedTexImage3D, cmdlen);
235*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(4, target);
236*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(8, level);
237*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(12, internal_format);
238*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(16, width);
239*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(20, height);
240*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(24, depth);
241*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(28, border);
242*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(32, image_size);
243*61046927SAndroid Build Coastguard Worker       if (image_size != 0) {
244*61046927SAndroid Build Coastguard Worker          __GLX_PUT_CHAR_ARRAY(__GLX_COMPRESSED_TEXIMAGE_3D_CMD_HDR_SIZE,
245*61046927SAndroid Build Coastguard Worker                               data, image_size);
246*61046927SAndroid Build Coastguard Worker       }
247*61046927SAndroid Build Coastguard Worker       __GLX_END(cmdlen);
248*61046927SAndroid Build Coastguard Worker    }
249*61046927SAndroid Build Coastguard Worker    else {
250*61046927SAndroid Build Coastguard Worker       __GLX_BEGIN_VARIABLE_LARGE(X_GLrop_CompressedTexImage3D, cmdlen + 4);
251*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(8, target);
252*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(12, level);
253*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(16, internal_format);
254*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(20, width);
255*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(24, height);
256*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(28, depth);
257*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(32, border);
258*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(36, image_size);
259*61046927SAndroid Build Coastguard Worker       __glXSendLargeCommand(gc, gc->pc,
260*61046927SAndroid Build Coastguard Worker                             __GLX_COMPRESSED_TEXIMAGE_3D_CMD_HDR_SIZE + 4,
261*61046927SAndroid Build Coastguard Worker                             data, image_size);
262*61046927SAndroid Build Coastguard Worker    }
263*61046927SAndroid Build Coastguard Worker }
264*61046927SAndroid Build Coastguard Worker 
265*61046927SAndroid Build Coastguard Worker 
266*61046927SAndroid Build Coastguard Worker void
__indirect_glCompressedTexSubImage1D(GLenum target,GLint level,GLint xoffset,GLsizei width,GLenum format,GLsizei image_size,const GLvoid * data)267*61046927SAndroid Build Coastguard Worker __indirect_glCompressedTexSubImage1D(GLenum target, GLint level,
268*61046927SAndroid Build Coastguard Worker                                         GLint xoffset,
269*61046927SAndroid Build Coastguard Worker                                         GLsizei width,
270*61046927SAndroid Build Coastguard Worker                                         GLenum format, GLsizei image_size,
271*61046927SAndroid Build Coastguard Worker                                         const GLvoid * data)
272*61046927SAndroid Build Coastguard Worker {
273*61046927SAndroid Build Coastguard Worker    CompressedTexSubImage1D2D(target, level, xoffset, 0, width, 0,
274*61046927SAndroid Build Coastguard Worker                              format, image_size, data,
275*61046927SAndroid Build Coastguard Worker                              X_GLrop_CompressedTexSubImage1D);
276*61046927SAndroid Build Coastguard Worker }
277*61046927SAndroid Build Coastguard Worker 
278*61046927SAndroid Build Coastguard Worker 
279*61046927SAndroid Build Coastguard Worker void
__indirect_glCompressedTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLsizei image_size,const GLvoid * data)280*61046927SAndroid Build Coastguard Worker __indirect_glCompressedTexSubImage2D(GLenum target, GLint level,
281*61046927SAndroid Build Coastguard Worker                                         GLint xoffset, GLint yoffset,
282*61046927SAndroid Build Coastguard Worker                                         GLsizei width, GLsizei height,
283*61046927SAndroid Build Coastguard Worker                                         GLenum format, GLsizei image_size,
284*61046927SAndroid Build Coastguard Worker                                         const GLvoid * data)
285*61046927SAndroid Build Coastguard Worker {
286*61046927SAndroid Build Coastguard Worker    CompressedTexSubImage1D2D(target, level, xoffset, yoffset, width, height,
287*61046927SAndroid Build Coastguard Worker                              format, image_size, data,
288*61046927SAndroid Build Coastguard Worker                              X_GLrop_CompressedTexSubImage2D);
289*61046927SAndroid Build Coastguard Worker }
290*61046927SAndroid Build Coastguard Worker 
291*61046927SAndroid Build Coastguard Worker 
292*61046927SAndroid Build Coastguard Worker void
__indirect_glCompressedTexSubImage3D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint zoffset,GLsizei width,GLsizei height,GLsizei depth,GLenum format,GLsizei image_size,const GLvoid * data)293*61046927SAndroid Build Coastguard Worker __indirect_glCompressedTexSubImage3D(GLenum target, GLint level,
294*61046927SAndroid Build Coastguard Worker                                         GLint xoffset, GLint yoffset,
295*61046927SAndroid Build Coastguard Worker                                         GLint zoffset, GLsizei width,
296*61046927SAndroid Build Coastguard Worker                                         GLsizei height, GLsizei depth,
297*61046927SAndroid Build Coastguard Worker                                         GLenum format, GLsizei image_size,
298*61046927SAndroid Build Coastguard Worker                                         const GLvoid * data)
299*61046927SAndroid Build Coastguard Worker {
300*61046927SAndroid Build Coastguard Worker    __GLX_DECLARE_VARIABLES();
301*61046927SAndroid Build Coastguard Worker 
302*61046927SAndroid Build Coastguard Worker    __GLX_LOAD_VARIABLES();
303*61046927SAndroid Build Coastguard Worker    if (gc->currentDpy == NULL) {
304*61046927SAndroid Build Coastguard Worker       return;
305*61046927SAndroid Build Coastguard Worker    }
306*61046927SAndroid Build Coastguard Worker 
307*61046927SAndroid Build Coastguard Worker    cmdlen = __GLX_PAD(__GLX_COMPRESSED_TEXSUBIMAGE_3D_CMD_HDR_SIZE
308*61046927SAndroid Build Coastguard Worker                       + image_size);
309*61046927SAndroid Build Coastguard Worker    if (cmdlen <= gc->maxSmallRenderCommandSize) {
310*61046927SAndroid Build Coastguard Worker       __GLX_BEGIN_VARIABLE(X_GLrop_CompressedTexSubImage3D, cmdlen);
311*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(4, target);
312*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(8, level);
313*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(12, xoffset);
314*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(16, yoffset);
315*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(20, zoffset);
316*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(24, width);
317*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(28, height);
318*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(32, depth);
319*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(36, format);
320*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(40, image_size);
321*61046927SAndroid Build Coastguard Worker       if (image_size != 0) {
322*61046927SAndroid Build Coastguard Worker          __GLX_PUT_CHAR_ARRAY(__GLX_COMPRESSED_TEXSUBIMAGE_3D_CMD_HDR_SIZE,
323*61046927SAndroid Build Coastguard Worker                               data, image_size);
324*61046927SAndroid Build Coastguard Worker       }
325*61046927SAndroid Build Coastguard Worker       __GLX_END(cmdlen);
326*61046927SAndroid Build Coastguard Worker    }
327*61046927SAndroid Build Coastguard Worker    else {
328*61046927SAndroid Build Coastguard Worker       __GLX_BEGIN_VARIABLE_LARGE(X_GLrop_CompressedTexSubImage3D, cmdlen + 4);
329*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(8, target);
330*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(12, level);
331*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(16, xoffset);
332*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(20, yoffset);
333*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(24, zoffset);
334*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(28, width);
335*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(32, height);
336*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(36, depth);
337*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(40, format);
338*61046927SAndroid Build Coastguard Worker       __GLX_PUT_LONG(44, image_size);
339*61046927SAndroid Build Coastguard Worker       __glXSendLargeCommand(gc, gc->pc,
340*61046927SAndroid Build Coastguard Worker                             __GLX_COMPRESSED_TEXSUBIMAGE_3D_CMD_HDR_SIZE + 4,
341*61046927SAndroid Build Coastguard Worker                             data, image_size);
342*61046927SAndroid Build Coastguard Worker    }
343*61046927SAndroid Build Coastguard Worker }
344