xref: /OK3568_Linux_fs/external/xserver/hw/dmx/glxProxy/compsize.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
3*4882a593Smuzhiyun  * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Permission is hereby granted, free of charge, to any person obtaining a
6*4882a593Smuzhiyun  * copy of this software and associated documentation files (the "Software"),
7*4882a593Smuzhiyun  * to deal in the Software without restriction, including without limitation
8*4882a593Smuzhiyun  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*4882a593Smuzhiyun  * and/or sell copies of the Software, and to permit persons to whom the
10*4882a593Smuzhiyun  * Software is furnished to do so, subject to the following conditions:
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  * The above copyright notice including the dates of first publication and
13*4882a593Smuzhiyun  * either this permission notice or a reference to
14*4882a593Smuzhiyun  * http://oss.sgi.com/projects/FreeB/
15*4882a593Smuzhiyun  * shall be included in all copies or substantial portions of the Software.
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18*4882a593Smuzhiyun  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20*4882a593Smuzhiyun  * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21*4882a593Smuzhiyun  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
22*4882a593Smuzhiyun  * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23*4882a593Smuzhiyun  * SOFTWARE.
24*4882a593Smuzhiyun  *
25*4882a593Smuzhiyun  * Except as contained in this notice, the name of Silicon Graphics, Inc.
26*4882a593Smuzhiyun  * shall not be used in advertising or otherwise to promote the sale, use or
27*4882a593Smuzhiyun  * other dealings in this Software without prior written authorization from
28*4882a593Smuzhiyun  * Silicon Graphics, Inc.
29*4882a593Smuzhiyun  */
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #include <GL/gl.h>
32*4882a593Smuzhiyun #include "compsize.h"
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun GLint
__glFogiv_size(GLenum pname)35*4882a593Smuzhiyun __glFogiv_size(GLenum pname)
36*4882a593Smuzhiyun {
37*4882a593Smuzhiyun     switch (pname) {
38*4882a593Smuzhiyun     case GL_FOG_COLOR:
39*4882a593Smuzhiyun         return 4;
40*4882a593Smuzhiyun     case GL_FOG_DENSITY:
41*4882a593Smuzhiyun         return 1;
42*4882a593Smuzhiyun     case GL_FOG_END:
43*4882a593Smuzhiyun         return 1;
44*4882a593Smuzhiyun     case GL_FOG_MODE:
45*4882a593Smuzhiyun         return 1;
46*4882a593Smuzhiyun     case GL_FOG_INDEX:
47*4882a593Smuzhiyun         return 1;
48*4882a593Smuzhiyun     case GL_FOG_START:
49*4882a593Smuzhiyun         return 1;
50*4882a593Smuzhiyun     default:
51*4882a593Smuzhiyun         return 0;
52*4882a593Smuzhiyun     }
53*4882a593Smuzhiyun }
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun GLint
__glFogfv_size(GLenum pname)56*4882a593Smuzhiyun __glFogfv_size(GLenum pname)
57*4882a593Smuzhiyun {
58*4882a593Smuzhiyun     return __glFogiv_size(pname);
59*4882a593Smuzhiyun }
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun GLint
__glCallLists_size(GLsizei n,GLenum type)62*4882a593Smuzhiyun __glCallLists_size(GLsizei n, GLenum type)
63*4882a593Smuzhiyun {
64*4882a593Smuzhiyun     GLint size;
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun     if (n < 0)
67*4882a593Smuzhiyun         return 0;
68*4882a593Smuzhiyun     switch (type) {
69*4882a593Smuzhiyun     case GL_BYTE:
70*4882a593Smuzhiyun         size = 1;
71*4882a593Smuzhiyun         break;
72*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE:
73*4882a593Smuzhiyun         size = 1;
74*4882a593Smuzhiyun         break;
75*4882a593Smuzhiyun     case GL_SHORT:
76*4882a593Smuzhiyun         size = 2;
77*4882a593Smuzhiyun         break;
78*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT:
79*4882a593Smuzhiyun         size = 2;
80*4882a593Smuzhiyun         break;
81*4882a593Smuzhiyun     case GL_INT:
82*4882a593Smuzhiyun         size = 4;
83*4882a593Smuzhiyun         break;
84*4882a593Smuzhiyun     case GL_UNSIGNED_INT:
85*4882a593Smuzhiyun         size = 4;
86*4882a593Smuzhiyun         break;
87*4882a593Smuzhiyun     case GL_FLOAT:
88*4882a593Smuzhiyun         size = 4;
89*4882a593Smuzhiyun         break;
90*4882a593Smuzhiyun     case GL_2_BYTES:
91*4882a593Smuzhiyun         size = 2;
92*4882a593Smuzhiyun         break;
93*4882a593Smuzhiyun     case GL_3_BYTES:
94*4882a593Smuzhiyun         size = 3;
95*4882a593Smuzhiyun         break;
96*4882a593Smuzhiyun     case GL_4_BYTES:
97*4882a593Smuzhiyun         size = 4;
98*4882a593Smuzhiyun         break;
99*4882a593Smuzhiyun     default:
100*4882a593Smuzhiyun         return 0;
101*4882a593Smuzhiyun     }
102*4882a593Smuzhiyun     return n * size;
103*4882a593Smuzhiyun }
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun GLint
__glDrawPixels_size(GLenum format,GLenum type,GLsizei w,GLsizei h)106*4882a593Smuzhiyun __glDrawPixels_size(GLenum format, GLenum type, GLsizei w, GLsizei h)
107*4882a593Smuzhiyun {
108*4882a593Smuzhiyun     GLint elements, esize;
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun     switch (format) {
111*4882a593Smuzhiyun     case GL_COLOR_INDEX:
112*4882a593Smuzhiyun     case GL_STENCIL_INDEX:
113*4882a593Smuzhiyun     case GL_DEPTH_COMPONENT:
114*4882a593Smuzhiyun         elements = 1;
115*4882a593Smuzhiyun         break;
116*4882a593Smuzhiyun     case GL_RED:
117*4882a593Smuzhiyun     case GL_GREEN:
118*4882a593Smuzhiyun     case GL_BLUE:
119*4882a593Smuzhiyun     case GL_ALPHA:
120*4882a593Smuzhiyun     case GL_LUMINANCE:
121*4882a593Smuzhiyun         elements = 1;
122*4882a593Smuzhiyun         break;
123*4882a593Smuzhiyun     case GL_LUMINANCE_ALPHA:
124*4882a593Smuzhiyun         elements = 2;
125*4882a593Smuzhiyun         break;
126*4882a593Smuzhiyun     case GL_RGB:
127*4882a593Smuzhiyun         elements = 3;
128*4882a593Smuzhiyun         break;
129*4882a593Smuzhiyun     case GL_RGBA:
130*4882a593Smuzhiyun     case GL_ABGR_EXT:
131*4882a593Smuzhiyun         elements = 4;
132*4882a593Smuzhiyun         break;
133*4882a593Smuzhiyun     default:
134*4882a593Smuzhiyun         return 0;
135*4882a593Smuzhiyun     }
136*4882a593Smuzhiyun     switch (type) {
137*4882a593Smuzhiyun     case GL_BITMAP:
138*4882a593Smuzhiyun         if (format == GL_COLOR_INDEX || format == GL_STENCIL_INDEX) {
139*4882a593Smuzhiyun             return (h * ((w + 7) / 8));
140*4882a593Smuzhiyun         }
141*4882a593Smuzhiyun         else {
142*4882a593Smuzhiyun             return 0;
143*4882a593Smuzhiyun         }
144*4882a593Smuzhiyun     case GL_BYTE:
145*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE:
146*4882a593Smuzhiyun         esize = 1;
147*4882a593Smuzhiyun         break;
148*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE_3_3_2:
149*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE_2_3_3_REV:
150*4882a593Smuzhiyun         esize = 1;
151*4882a593Smuzhiyun         elements = 1;
152*4882a593Smuzhiyun         break;
153*4882a593Smuzhiyun     case GL_SHORT:
154*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT:
155*4882a593Smuzhiyun         esize = 2;
156*4882a593Smuzhiyun         break;
157*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_6_5:
158*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_6_5_REV:
159*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_4_4_4_4:
160*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_4_4_4_4_REV:
161*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_5_5_1:
162*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_1_5_5_5_REV:
163*4882a593Smuzhiyun         esize = 2;
164*4882a593Smuzhiyun         elements = 1;
165*4882a593Smuzhiyun         break;
166*4882a593Smuzhiyun     case GL_INT:
167*4882a593Smuzhiyun     case GL_UNSIGNED_INT:
168*4882a593Smuzhiyun     case GL_FLOAT:
169*4882a593Smuzhiyun         esize = 4;
170*4882a593Smuzhiyun         break;
171*4882a593Smuzhiyun     case GL_UNSIGNED_INT_8_8_8_8:
172*4882a593Smuzhiyun     case GL_UNSIGNED_INT_8_8_8_8_REV:
173*4882a593Smuzhiyun     case GL_UNSIGNED_INT_10_10_10_2:
174*4882a593Smuzhiyun     case GL_UNSIGNED_INT_2_10_10_10_REV:
175*4882a593Smuzhiyun         esize = 4;
176*4882a593Smuzhiyun         elements = 1;
177*4882a593Smuzhiyun         break;
178*4882a593Smuzhiyun     default:
179*4882a593Smuzhiyun         return 0;
180*4882a593Smuzhiyun     }
181*4882a593Smuzhiyun     return elements * esize * w * h;
182*4882a593Smuzhiyun }
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun GLint
__glBitmap_size(GLsizei w,GLsizei h)185*4882a593Smuzhiyun __glBitmap_size(GLsizei w, GLsizei h)
186*4882a593Smuzhiyun {
187*4882a593Smuzhiyun     return __glDrawPixels_size(GL_COLOR_INDEX, GL_BITMAP, w, h);
188*4882a593Smuzhiyun }
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun GLint
__glTexGendv_size(GLenum e)191*4882a593Smuzhiyun __glTexGendv_size(GLenum e)
192*4882a593Smuzhiyun {
193*4882a593Smuzhiyun     switch (e) {
194*4882a593Smuzhiyun     case GL_TEXTURE_GEN_MODE:
195*4882a593Smuzhiyun         return 1;
196*4882a593Smuzhiyun     case GL_OBJECT_PLANE:
197*4882a593Smuzhiyun     case GL_EYE_PLANE:
198*4882a593Smuzhiyun         return 4;
199*4882a593Smuzhiyun     default:
200*4882a593Smuzhiyun         return 0;
201*4882a593Smuzhiyun     }
202*4882a593Smuzhiyun }
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun GLint
__glTexGenfv_size(GLenum e)205*4882a593Smuzhiyun __glTexGenfv_size(GLenum e)
206*4882a593Smuzhiyun {
207*4882a593Smuzhiyun     return __glTexGendv_size(e);
208*4882a593Smuzhiyun }
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun GLint
__glTexGeniv_size(GLenum e)211*4882a593Smuzhiyun __glTexGeniv_size(GLenum e)
212*4882a593Smuzhiyun {
213*4882a593Smuzhiyun     return __glTexGendv_size(e);
214*4882a593Smuzhiyun }
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun GLint
__glTexParameterfv_size(GLenum e)217*4882a593Smuzhiyun __glTexParameterfv_size(GLenum e)
218*4882a593Smuzhiyun {
219*4882a593Smuzhiyun     switch (e) {
220*4882a593Smuzhiyun     case GL_TEXTURE_WRAP_S:
221*4882a593Smuzhiyun     case GL_TEXTURE_WRAP_T:
222*4882a593Smuzhiyun     case GL_TEXTURE_WRAP_R:
223*4882a593Smuzhiyun     case GL_TEXTURE_MIN_FILTER:
224*4882a593Smuzhiyun     case GL_TEXTURE_MAG_FILTER:
225*4882a593Smuzhiyun         return 1;
226*4882a593Smuzhiyun     case GL_TEXTURE_BORDER_COLOR:
227*4882a593Smuzhiyun         return 4;
228*4882a593Smuzhiyun     case GL_TEXTURE_PRIORITY:
229*4882a593Smuzhiyun         return 1;
230*4882a593Smuzhiyun     case GL_TEXTURE_MIN_LOD:
231*4882a593Smuzhiyun     case GL_TEXTURE_MAX_LOD:
232*4882a593Smuzhiyun     case GL_TEXTURE_BASE_LEVEL:
233*4882a593Smuzhiyun     case GL_TEXTURE_MAX_LEVEL:
234*4882a593Smuzhiyun         return 1;
235*4882a593Smuzhiyun     default:
236*4882a593Smuzhiyun         return 0;
237*4882a593Smuzhiyun     }
238*4882a593Smuzhiyun }
239*4882a593Smuzhiyun 
240*4882a593Smuzhiyun GLint
__glTexParameteriv_size(GLenum e)241*4882a593Smuzhiyun __glTexParameteriv_size(GLenum e)
242*4882a593Smuzhiyun {
243*4882a593Smuzhiyun     return __glTexParameterfv_size(e);
244*4882a593Smuzhiyun }
245*4882a593Smuzhiyun 
246*4882a593Smuzhiyun GLint
__glTexEnvfv_size(GLenum e)247*4882a593Smuzhiyun __glTexEnvfv_size(GLenum e)
248*4882a593Smuzhiyun {
249*4882a593Smuzhiyun     switch (e) {
250*4882a593Smuzhiyun     case GL_TEXTURE_ENV_MODE:
251*4882a593Smuzhiyun         return 1;
252*4882a593Smuzhiyun     case GL_TEXTURE_ENV_COLOR:
253*4882a593Smuzhiyun         return 4;
254*4882a593Smuzhiyun     default:
255*4882a593Smuzhiyun         return 0;
256*4882a593Smuzhiyun     }
257*4882a593Smuzhiyun }
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun GLint
__glTexEnviv_size(GLenum e)260*4882a593Smuzhiyun __glTexEnviv_size(GLenum e)
261*4882a593Smuzhiyun {
262*4882a593Smuzhiyun     return __glTexEnvfv_size(e);
263*4882a593Smuzhiyun }
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun GLint
__glTexImage1D_size(GLenum format,GLenum type,GLsizei w)266*4882a593Smuzhiyun __glTexImage1D_size(GLenum format, GLenum type, GLsizei w)
267*4882a593Smuzhiyun {
268*4882a593Smuzhiyun     GLint elements, esize;
269*4882a593Smuzhiyun 
270*4882a593Smuzhiyun     if (w < 0)
271*4882a593Smuzhiyun         return 0;
272*4882a593Smuzhiyun     switch (format) {
273*4882a593Smuzhiyun     case GL_COLOR_INDEX:
274*4882a593Smuzhiyun         elements = 1;
275*4882a593Smuzhiyun         break;
276*4882a593Smuzhiyun     case GL_RED:
277*4882a593Smuzhiyun     case GL_GREEN:
278*4882a593Smuzhiyun     case GL_BLUE:
279*4882a593Smuzhiyun     case GL_ALPHA:
280*4882a593Smuzhiyun     case GL_LUMINANCE:
281*4882a593Smuzhiyun         elements = 1;
282*4882a593Smuzhiyun         break;
283*4882a593Smuzhiyun     case GL_LUMINANCE_ALPHA:
284*4882a593Smuzhiyun         elements = 2;
285*4882a593Smuzhiyun         break;
286*4882a593Smuzhiyun     case GL_RGB:
287*4882a593Smuzhiyun         elements = 3;
288*4882a593Smuzhiyun         break;
289*4882a593Smuzhiyun     case GL_RGBA:
290*4882a593Smuzhiyun     case GL_ABGR_EXT:
291*4882a593Smuzhiyun         elements = 4;
292*4882a593Smuzhiyun         break;
293*4882a593Smuzhiyun     default:
294*4882a593Smuzhiyun         return 0;
295*4882a593Smuzhiyun     }
296*4882a593Smuzhiyun     switch (type) {
297*4882a593Smuzhiyun     case GL_BITMAP:
298*4882a593Smuzhiyun         if (format == GL_COLOR_INDEX) {
299*4882a593Smuzhiyun             return (w + 7) / 8;
300*4882a593Smuzhiyun         }
301*4882a593Smuzhiyun         else {
302*4882a593Smuzhiyun             return 0;
303*4882a593Smuzhiyun         }
304*4882a593Smuzhiyun     case GL_BYTE:
305*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE:
306*4882a593Smuzhiyun         esize = 1;
307*4882a593Smuzhiyun         break;
308*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE_3_3_2:
309*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE_2_3_3_REV:
310*4882a593Smuzhiyun         esize = 1;
311*4882a593Smuzhiyun         elements = 1;
312*4882a593Smuzhiyun         break;
313*4882a593Smuzhiyun     case GL_SHORT:
314*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT:
315*4882a593Smuzhiyun         esize = 2;
316*4882a593Smuzhiyun         break;
317*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_6_5:
318*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_6_5_REV:
319*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_4_4_4_4:
320*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_4_4_4_4_REV:
321*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_5_5_1:
322*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_1_5_5_5_REV:
323*4882a593Smuzhiyun         esize = 2;
324*4882a593Smuzhiyun         elements = 1;
325*4882a593Smuzhiyun         break;
326*4882a593Smuzhiyun     case GL_INT:
327*4882a593Smuzhiyun     case GL_UNSIGNED_INT:
328*4882a593Smuzhiyun     case GL_FLOAT:
329*4882a593Smuzhiyun         esize = 4;
330*4882a593Smuzhiyun         break;
331*4882a593Smuzhiyun     case GL_UNSIGNED_INT_8_8_8_8:
332*4882a593Smuzhiyun     case GL_UNSIGNED_INT_8_8_8_8_REV:
333*4882a593Smuzhiyun     case GL_UNSIGNED_INT_10_10_10_2:
334*4882a593Smuzhiyun     case GL_UNSIGNED_INT_2_10_10_10_REV:
335*4882a593Smuzhiyun         esize = 4;
336*4882a593Smuzhiyun         elements = 1;
337*4882a593Smuzhiyun         break;
338*4882a593Smuzhiyun     default:
339*4882a593Smuzhiyun         return 0;
340*4882a593Smuzhiyun     }
341*4882a593Smuzhiyun     return elements * esize * w;
342*4882a593Smuzhiyun }
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun GLint
__glTexImage2D_size(GLenum format,GLenum type,GLsizei w,GLsizei h)345*4882a593Smuzhiyun __glTexImage2D_size(GLenum format, GLenum type, GLsizei w, GLsizei h)
346*4882a593Smuzhiyun {
347*4882a593Smuzhiyun     GLint elements, esize;
348*4882a593Smuzhiyun 
349*4882a593Smuzhiyun     if (w < 0)
350*4882a593Smuzhiyun         return 0;
351*4882a593Smuzhiyun     if (h < 0)
352*4882a593Smuzhiyun         return 0;
353*4882a593Smuzhiyun     switch (format) {
354*4882a593Smuzhiyun     case GL_COLOR_INDEX:
355*4882a593Smuzhiyun         elements = 1;
356*4882a593Smuzhiyun         break;
357*4882a593Smuzhiyun     case GL_RED:
358*4882a593Smuzhiyun     case GL_GREEN:
359*4882a593Smuzhiyun     case GL_BLUE:
360*4882a593Smuzhiyun     case GL_ALPHA:
361*4882a593Smuzhiyun     case GL_LUMINANCE:
362*4882a593Smuzhiyun         elements = 1;
363*4882a593Smuzhiyun         break;
364*4882a593Smuzhiyun     case GL_LUMINANCE_ALPHA:
365*4882a593Smuzhiyun         elements = 2;
366*4882a593Smuzhiyun         break;
367*4882a593Smuzhiyun     case GL_RGB:
368*4882a593Smuzhiyun         elements = 3;
369*4882a593Smuzhiyun         break;
370*4882a593Smuzhiyun     case GL_RGBA:
371*4882a593Smuzhiyun     case GL_ABGR_EXT:
372*4882a593Smuzhiyun         elements = 4;
373*4882a593Smuzhiyun         break;
374*4882a593Smuzhiyun     default:
375*4882a593Smuzhiyun         return 0;
376*4882a593Smuzhiyun     }
377*4882a593Smuzhiyun     switch (type) {
378*4882a593Smuzhiyun     case GL_BITMAP:
379*4882a593Smuzhiyun         if (format == GL_COLOR_INDEX) {
380*4882a593Smuzhiyun             return (h * ((w + 7) / 8));
381*4882a593Smuzhiyun         }
382*4882a593Smuzhiyun         else {
383*4882a593Smuzhiyun             return 0;
384*4882a593Smuzhiyun         }
385*4882a593Smuzhiyun     case GL_BYTE:
386*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE:
387*4882a593Smuzhiyun         esize = 1;
388*4882a593Smuzhiyun         break;
389*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE_3_3_2:
390*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE_2_3_3_REV:
391*4882a593Smuzhiyun         esize = 1;
392*4882a593Smuzhiyun         elements = 1;
393*4882a593Smuzhiyun         break;
394*4882a593Smuzhiyun     case GL_SHORT:
395*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT:
396*4882a593Smuzhiyun         esize = 2;
397*4882a593Smuzhiyun         break;
398*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_6_5:
399*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_6_5_REV:
400*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_4_4_4_4:
401*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_4_4_4_4_REV:
402*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_5_5_1:
403*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_1_5_5_5_REV:
404*4882a593Smuzhiyun         esize = 2;
405*4882a593Smuzhiyun         elements = 1;
406*4882a593Smuzhiyun         break;
407*4882a593Smuzhiyun     case GL_INT:
408*4882a593Smuzhiyun     case GL_UNSIGNED_INT:
409*4882a593Smuzhiyun     case GL_FLOAT:
410*4882a593Smuzhiyun         esize = 4;
411*4882a593Smuzhiyun         break;
412*4882a593Smuzhiyun     case GL_UNSIGNED_INT_8_8_8_8:
413*4882a593Smuzhiyun     case GL_UNSIGNED_INT_8_8_8_8_REV:
414*4882a593Smuzhiyun     case GL_UNSIGNED_INT_10_10_10_2:
415*4882a593Smuzhiyun     case GL_UNSIGNED_INT_2_10_10_10_REV:
416*4882a593Smuzhiyun         esize = 4;
417*4882a593Smuzhiyun         elements = 1;
418*4882a593Smuzhiyun         break;
419*4882a593Smuzhiyun     default:
420*4882a593Smuzhiyun         return 0;
421*4882a593Smuzhiyun     }
422*4882a593Smuzhiyun     return elements * esize * w * h;
423*4882a593Smuzhiyun }
424*4882a593Smuzhiyun 
425*4882a593Smuzhiyun GLint
__glTexImage3D_size(GLenum format,GLenum type,GLsizei w,GLsizei h,GLsizei d)426*4882a593Smuzhiyun __glTexImage3D_size(GLenum format, GLenum type, GLsizei w, GLsizei h, GLsizei d)
427*4882a593Smuzhiyun {
428*4882a593Smuzhiyun     GLint elements, esize;
429*4882a593Smuzhiyun 
430*4882a593Smuzhiyun     if (w < 0)
431*4882a593Smuzhiyun         return 0;
432*4882a593Smuzhiyun     if (h < 0)
433*4882a593Smuzhiyun         return 0;
434*4882a593Smuzhiyun     if (d < 0)
435*4882a593Smuzhiyun         return 0;
436*4882a593Smuzhiyun     switch (format) {
437*4882a593Smuzhiyun     case GL_COLOR_INDEX:
438*4882a593Smuzhiyun         elements = 1;
439*4882a593Smuzhiyun         break;
440*4882a593Smuzhiyun     case GL_RED:
441*4882a593Smuzhiyun     case GL_GREEN:
442*4882a593Smuzhiyun     case GL_BLUE:
443*4882a593Smuzhiyun     case GL_ALPHA:
444*4882a593Smuzhiyun     case GL_LUMINANCE:
445*4882a593Smuzhiyun         elements = 1;
446*4882a593Smuzhiyun         break;
447*4882a593Smuzhiyun     case GL_LUMINANCE_ALPHA:
448*4882a593Smuzhiyun         elements = 2;
449*4882a593Smuzhiyun         break;
450*4882a593Smuzhiyun     case GL_RGB:
451*4882a593Smuzhiyun         elements = 3;
452*4882a593Smuzhiyun         break;
453*4882a593Smuzhiyun     case GL_RGBA:
454*4882a593Smuzhiyun     case GL_ABGR_EXT:
455*4882a593Smuzhiyun         elements = 4;
456*4882a593Smuzhiyun         break;
457*4882a593Smuzhiyun     default:
458*4882a593Smuzhiyun         return 0;
459*4882a593Smuzhiyun     }
460*4882a593Smuzhiyun     switch (type) {
461*4882a593Smuzhiyun     case GL_BITMAP:
462*4882a593Smuzhiyun         if (format == GL_COLOR_INDEX) {
463*4882a593Smuzhiyun             return (d * (h * ((w + 7) / 8)));
464*4882a593Smuzhiyun         }
465*4882a593Smuzhiyun         else {
466*4882a593Smuzhiyun             return 0;
467*4882a593Smuzhiyun         }
468*4882a593Smuzhiyun     case GL_BYTE:
469*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE:
470*4882a593Smuzhiyun         esize = 1;
471*4882a593Smuzhiyun         break;
472*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE_3_3_2:
473*4882a593Smuzhiyun     case GL_UNSIGNED_BYTE_2_3_3_REV:
474*4882a593Smuzhiyun         esize = 1;
475*4882a593Smuzhiyun         elements = 1;
476*4882a593Smuzhiyun         break;
477*4882a593Smuzhiyun     case GL_SHORT:
478*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT:
479*4882a593Smuzhiyun         esize = 2;
480*4882a593Smuzhiyun         break;
481*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_6_5:
482*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_6_5_REV:
483*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_4_4_4_4:
484*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_4_4_4_4_REV:
485*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_5_5_5_1:
486*4882a593Smuzhiyun     case GL_UNSIGNED_SHORT_1_5_5_5_REV:
487*4882a593Smuzhiyun         esize = 2;
488*4882a593Smuzhiyun         elements = 1;
489*4882a593Smuzhiyun         break;
490*4882a593Smuzhiyun     case GL_INT:
491*4882a593Smuzhiyun     case GL_UNSIGNED_INT:
492*4882a593Smuzhiyun     case GL_FLOAT:
493*4882a593Smuzhiyun         esize = 4;
494*4882a593Smuzhiyun         break;
495*4882a593Smuzhiyun     case GL_UNSIGNED_INT_8_8_8_8:
496*4882a593Smuzhiyun     case GL_UNSIGNED_INT_8_8_8_8_REV:
497*4882a593Smuzhiyun     case GL_UNSIGNED_INT_10_10_10_2:
498*4882a593Smuzhiyun     case GL_UNSIGNED_INT_2_10_10_10_REV:
499*4882a593Smuzhiyun         esize = 4;
500*4882a593Smuzhiyun         elements = 1;
501*4882a593Smuzhiyun         break;
502*4882a593Smuzhiyun     default:
503*4882a593Smuzhiyun         return 0;
504*4882a593Smuzhiyun     }
505*4882a593Smuzhiyun     return elements * esize * w * h * d;
506*4882a593Smuzhiyun }
507*4882a593Smuzhiyun 
508*4882a593Smuzhiyun GLint
__glLightfv_size(GLenum pname)509*4882a593Smuzhiyun __glLightfv_size(GLenum pname)
510*4882a593Smuzhiyun {
511*4882a593Smuzhiyun     switch (pname) {
512*4882a593Smuzhiyun     case GL_SPOT_EXPONENT:
513*4882a593Smuzhiyun         return 1;
514*4882a593Smuzhiyun     case GL_SPOT_CUTOFF:
515*4882a593Smuzhiyun         return 1;
516*4882a593Smuzhiyun     case GL_AMBIENT:
517*4882a593Smuzhiyun         return 4;
518*4882a593Smuzhiyun     case GL_DIFFUSE:
519*4882a593Smuzhiyun         return 4;
520*4882a593Smuzhiyun     case GL_SPECULAR:
521*4882a593Smuzhiyun         return 4;
522*4882a593Smuzhiyun     case GL_POSITION:
523*4882a593Smuzhiyun         return 4;
524*4882a593Smuzhiyun     case GL_SPOT_DIRECTION:
525*4882a593Smuzhiyun         return 3;
526*4882a593Smuzhiyun     case GL_CONSTANT_ATTENUATION:
527*4882a593Smuzhiyun         return 1;
528*4882a593Smuzhiyun     case GL_LINEAR_ATTENUATION:
529*4882a593Smuzhiyun         return 1;
530*4882a593Smuzhiyun     case GL_QUADRATIC_ATTENUATION:
531*4882a593Smuzhiyun         return 1;
532*4882a593Smuzhiyun     default:
533*4882a593Smuzhiyun         return 0;
534*4882a593Smuzhiyun     }
535*4882a593Smuzhiyun }
536*4882a593Smuzhiyun 
537*4882a593Smuzhiyun GLint
__glLightiv_size(GLenum pname)538*4882a593Smuzhiyun __glLightiv_size(GLenum pname)
539*4882a593Smuzhiyun {
540*4882a593Smuzhiyun     return __glLightfv_size(pname);
541*4882a593Smuzhiyun }
542*4882a593Smuzhiyun 
543*4882a593Smuzhiyun GLint
__glLightModelfv_size(GLenum pname)544*4882a593Smuzhiyun __glLightModelfv_size(GLenum pname)
545*4882a593Smuzhiyun {
546*4882a593Smuzhiyun     switch (pname) {
547*4882a593Smuzhiyun     case GL_LIGHT_MODEL_AMBIENT:
548*4882a593Smuzhiyun         return 4;
549*4882a593Smuzhiyun     case GL_LIGHT_MODEL_LOCAL_VIEWER:
550*4882a593Smuzhiyun         return 1;
551*4882a593Smuzhiyun     case GL_LIGHT_MODEL_TWO_SIDE:
552*4882a593Smuzhiyun         return 1;
553*4882a593Smuzhiyun     case GL_LIGHT_MODEL_COLOR_CONTROL:
554*4882a593Smuzhiyun         return 1;
555*4882a593Smuzhiyun     default:
556*4882a593Smuzhiyun         return 0;
557*4882a593Smuzhiyun     }
558*4882a593Smuzhiyun }
559*4882a593Smuzhiyun 
560*4882a593Smuzhiyun GLint
__glLightModeliv_size(GLenum pname)561*4882a593Smuzhiyun __glLightModeliv_size(GLenum pname)
562*4882a593Smuzhiyun {
563*4882a593Smuzhiyun     return __glLightModelfv_size(pname);
564*4882a593Smuzhiyun }
565*4882a593Smuzhiyun 
566*4882a593Smuzhiyun GLint
__glMaterialfv_size(GLenum pname)567*4882a593Smuzhiyun __glMaterialfv_size(GLenum pname)
568*4882a593Smuzhiyun {
569*4882a593Smuzhiyun     switch (pname) {
570*4882a593Smuzhiyun     case GL_SHININESS:
571*4882a593Smuzhiyun         return 1;
572*4882a593Smuzhiyun     case GL_EMISSION:
573*4882a593Smuzhiyun         return 4;
574*4882a593Smuzhiyun     case GL_AMBIENT:
575*4882a593Smuzhiyun         return 4;
576*4882a593Smuzhiyun     case GL_DIFFUSE:
577*4882a593Smuzhiyun         return 4;
578*4882a593Smuzhiyun     case GL_SPECULAR:
579*4882a593Smuzhiyun         return 4;
580*4882a593Smuzhiyun     case GL_AMBIENT_AND_DIFFUSE:
581*4882a593Smuzhiyun         return 4;
582*4882a593Smuzhiyun     case GL_COLOR_INDEXES:
583*4882a593Smuzhiyun         return 3;
584*4882a593Smuzhiyun     default:
585*4882a593Smuzhiyun         return 0;
586*4882a593Smuzhiyun     }
587*4882a593Smuzhiyun }
588*4882a593Smuzhiyun 
589*4882a593Smuzhiyun GLint
__glMaterialiv_size(GLenum pname)590*4882a593Smuzhiyun __glMaterialiv_size(GLenum pname)
591*4882a593Smuzhiyun {
592*4882a593Smuzhiyun     return __glMaterialfv_size(pname);
593*4882a593Smuzhiyun }
594*4882a593Smuzhiyun 
595*4882a593Smuzhiyun GLint
__glColorTableParameterfv_size(GLenum pname)596*4882a593Smuzhiyun __glColorTableParameterfv_size(GLenum pname)
597*4882a593Smuzhiyun {
598*4882a593Smuzhiyun     switch (pname) {
599*4882a593Smuzhiyun     case GL_COLOR_TABLE_FORMAT:
600*4882a593Smuzhiyun     case GL_COLOR_TABLE_WIDTH:
601*4882a593Smuzhiyun     case GL_COLOR_TABLE_RED_SIZE:
602*4882a593Smuzhiyun     case GL_COLOR_TABLE_GREEN_SIZE:
603*4882a593Smuzhiyun     case GL_COLOR_TABLE_BLUE_SIZE:
604*4882a593Smuzhiyun     case GL_COLOR_TABLE_ALPHA_SIZE:
605*4882a593Smuzhiyun     case GL_COLOR_TABLE_LUMINANCE_SIZE:
606*4882a593Smuzhiyun     case GL_COLOR_TABLE_INTENSITY_SIZE:
607*4882a593Smuzhiyun         return 1;
608*4882a593Smuzhiyun     case GL_COLOR_TABLE_SCALE:
609*4882a593Smuzhiyun     case GL_COLOR_TABLE_BIAS:
610*4882a593Smuzhiyun         return 4;
611*4882a593Smuzhiyun     default:
612*4882a593Smuzhiyun         return -1;
613*4882a593Smuzhiyun     }
614*4882a593Smuzhiyun }
615*4882a593Smuzhiyun 
616*4882a593Smuzhiyun GLint
__glColorTableParameteriv_size(GLenum pname)617*4882a593Smuzhiyun __glColorTableParameteriv_size(GLenum pname)
618*4882a593Smuzhiyun {
619*4882a593Smuzhiyun     return __glColorTableParameterfv_size(pname);
620*4882a593Smuzhiyun }
621*4882a593Smuzhiyun 
622*4882a593Smuzhiyun GLint
__glConvolutionParameterfv_size(GLenum pname)623*4882a593Smuzhiyun __glConvolutionParameterfv_size(GLenum pname)
624*4882a593Smuzhiyun {
625*4882a593Smuzhiyun     switch (pname) {
626*4882a593Smuzhiyun     case GL_CONVOLUTION_BORDER_MODE:
627*4882a593Smuzhiyun         return 1;
628*4882a593Smuzhiyun     case GL_CONVOLUTION_BORDER_COLOR:
629*4882a593Smuzhiyun     case GL_CONVOLUTION_FILTER_SCALE:
630*4882a593Smuzhiyun     case GL_CONVOLUTION_FILTER_BIAS:
631*4882a593Smuzhiyun         return 4;
632*4882a593Smuzhiyun     default:                   /* error: bad enum value */
633*4882a593Smuzhiyun         return -1;
634*4882a593Smuzhiyun     }
635*4882a593Smuzhiyun }
636*4882a593Smuzhiyun 
637*4882a593Smuzhiyun GLint
__glConvolutionParameteriv_size(GLenum pname)638*4882a593Smuzhiyun __glConvolutionParameteriv_size(GLenum pname)
639*4882a593Smuzhiyun {
640*4882a593Smuzhiyun     return __glConvolutionParameterfv_size(pname);
641*4882a593Smuzhiyun }
642