• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 #include "GLEScmValidate.h"
17 #include <GLcommon/GLutils.h>
18 #include <GLES/gl.h>
19 #include <GLES/glext.h>
20 #include <GLcommon/GLEScontext.h>
21 #include "GLEScmValidate.h"
22 
23 
lightEnum(GLenum e,unsigned int maxLights)24 bool GLEScmValidate::lightEnum(GLenum e,unsigned int maxLights) {
25     return  e >=GL_LIGHT0 && e <= (GL_LIGHT0+maxLights);
26 }
27 
clipPlaneEnum(GLenum e,unsigned int maxClipPlanes)28 bool GLEScmValidate::clipPlaneEnum(GLenum e,unsigned int maxClipPlanes) {
29     return  e >=GL_CLIP_PLANE0 && e <= (GL_CLIP_PLANE0+maxClipPlanes);
30 }
31 
alphaFunc(GLenum f)32 bool GLEScmValidate::alphaFunc(GLenum f) {
33     switch(f) {
34     case GL_NEVER:
35     case GL_LESS:
36     case GL_EQUAL:
37     case GL_LEQUAL:
38     case GL_GREATER:
39     case GL_NOTEQUAL:
40     case GL_GEQUAL:
41     case GL_ALWAYS:
42         return true;
43     }
44     return false;
45 }
46 
blendSrc(GLenum s)47 bool GLEScmValidate::blendSrc(GLenum s) {
48    switch(s) {
49     case GL_ZERO:
50     case GL_ONE:
51     case GL_DST_COLOR:
52     case GL_ONE_MINUS_DST_COLOR:
53     case GL_SRC_ALPHA:
54     case GL_ONE_MINUS_SRC_ALPHA:
55     case GL_DST_ALPHA:
56     case GL_ONE_MINUS_DST_ALPHA:
57     case GL_SRC_ALPHA_SATURATE:
58         return true;
59   }
60   return false;
61 }
62 
vertexPointerParams(GLint size,GLsizei stride)63 bool GLEScmValidate::vertexPointerParams(GLint size,GLsizei stride) {
64     return ((size >=2) && (size <= 4)) && (stride >=0) ;
65 }
66 
colorPointerParams(GLint size,GLsizei stride)67 bool GLEScmValidate::colorPointerParams(GLint size,GLsizei stride) {
68     return ((size >=3) && (size <= 4)) && (stride >=0) ;
69 }
70 
texCoordPointerParams(GLint size,GLsizei stride)71 bool GLEScmValidate::texCoordPointerParams(GLint size,GLsizei stride) {
72     return ((size >=2) && (size <= 4)) && (stride >=0) ;
73 }
74 
supportedArrays(GLenum arr)75 bool GLEScmValidate::supportedArrays(GLenum arr) {
76     switch(arr) {
77     case GL_COLOR_ARRAY:
78     case GL_NORMAL_ARRAY:
79     case GL_POINT_SIZE_ARRAY_OES:
80     case GL_TEXTURE_COORD_ARRAY:
81     case GL_VERTEX_ARRAY:
82         return true;
83     }
84     return false;
85 }
86 
hintTargetMode(GLenum target,GLenum mode)87 bool GLEScmValidate::hintTargetMode(GLenum target,GLenum mode) {
88    switch(target) {
89    case GL_FOG_HINT:
90    case GL_GENERATE_MIPMAP_HINT:
91    case GL_LINE_SMOOTH_HINT:
92    case GL_PERSPECTIVE_CORRECTION_HINT:
93    case GL_POINT_SMOOTH_HINT:
94        break;
95    default: return false;
96    }
97    switch(mode) {
98    case GL_FASTEST:
99    case GL_NICEST:
100    case GL_DONT_CARE:
101        break;
102    default: return false;
103    }
104    return true;
105 }
106 
texParams(GLenum target,GLenum pname)107 bool GLEScmValidate::texParams(GLenum target,GLenum pname) {
108     switch(pname) {
109     case GL_TEXTURE_MIN_FILTER:
110     case GL_TEXTURE_MAG_FILTER:
111     case GL_TEXTURE_WRAP_S:
112     case GL_TEXTURE_WRAP_T:
113     case GL_TEXTURE_CROP_RECT_OES:
114     case GL_GENERATE_MIPMAP:
115         break;
116     default:
117         return false;
118     }
119     return (target == GL_TEXTURE_2D)||(target == GL_TEXTURE_CUBE_MAP_OES);
120 }
121 
texEnv(GLenum target,GLenum pname)122 bool GLEScmValidate::texEnv(GLenum target,GLenum pname) {
123     switch(pname) {
124     case GL_TEXTURE_ENV_MODE:
125     case GL_TEXTURE_ENV_COLOR:
126     case GL_COMBINE_RGB:
127     case GL_COMBINE_ALPHA:
128     case GL_SRC0_RGB:
129     case GL_SRC1_RGB:
130     case GL_SRC2_RGB:
131     case GL_SRC0_ALPHA:
132     case GL_SRC1_ALPHA:
133     case GL_SRC2_ALPHA:
134     case GL_OPERAND0_RGB:
135     case GL_OPERAND1_RGB:
136     case GL_OPERAND2_RGB:
137     case GL_OPERAND0_ALPHA:
138     case GL_OPERAND1_ALPHA:
139     case GL_OPERAND2_ALPHA:
140     case GL_RGB_SCALE:
141     case GL_ALPHA_SCALE:
142     case GL_COORD_REPLACE_OES:
143         break;
144     default:
145         return false;
146     }
147     return (target == GL_TEXTURE_ENV || target == GL_POINT_SPRITE_OES);
148 }
149 
capability(GLenum cap,int maxLights,int maxClipPlanes)150 bool GLEScmValidate::capability(GLenum cap,int maxLights,int maxClipPlanes) {
151     switch(cap) {
152     case GL_ALPHA_TEST:
153     case GL_BLEND:
154     case GL_COLOR_ARRAY:
155     case GL_COLOR_LOGIC_OP:
156     case GL_COLOR_MATERIAL:
157     case GL_CULL_FACE:
158     case GL_DEPTH_TEST:
159     case GL_DITHER:
160     case GL_FOG:
161     case GL_LIGHTING:
162     case GL_LINE_SMOOTH:
163     case GL_MULTISAMPLE:
164     case GL_NORMAL_ARRAY:
165     case GL_NORMALIZE:
166     case GL_POINT_SIZE_ARRAY_OES:
167     case GL_POINT_SMOOTH:
168     case GL_POINT_SPRITE_OES:
169     case GL_POLYGON_OFFSET_FILL:
170     case GL_RESCALE_NORMAL:
171     case GL_SAMPLE_ALPHA_TO_COVERAGE:
172     case GL_SAMPLE_ALPHA_TO_ONE:
173     case GL_SAMPLE_COVERAGE:
174     case GL_SCISSOR_TEST:
175     case GL_STENCIL_TEST:
176     case GL_TEXTURE_2D:
177     case GL_TEXTURE_COORD_ARRAY:
178     case GL_VERTEX_ARRAY:
179         return true;
180     }
181     return GLEScmValidate::lightEnum(cap,maxLights) || GLEScmValidate::clipPlaneEnum(cap,maxClipPlanes);
182 }
183 
184 
texCompImgFrmt(GLenum format)185 bool GLEScmValidate::texCompImgFrmt(GLenum format) {
186     switch(format) {
187     case GL_PALETTE4_RGB8_OES:
188     case GL_PALETTE4_RGBA8_OES:
189     case GL_PALETTE4_R5_G6_B5_OES:
190     case GL_PALETTE4_RGBA4_OES:
191     case GL_PALETTE4_RGB5_A1_OES:
192     case GL_PALETTE8_RGB8_OES:
193     case GL_PALETTE8_RGBA8_OES:
194     case GL_PALETTE8_R5_G6_B5_OES:
195     case GL_PALETTE8_RGBA4_OES:
196     case GL_PALETTE8_RGB5_A1_OES:
197         return true;
198     }
199     return false;
200 }
201 
blendDst(GLenum d)202 bool GLEScmValidate::blendDst(GLenum d) {
203    switch(d) {
204     case GL_ZERO:
205     case GL_ONE:
206     case GL_SRC_COLOR:
207     case GL_ONE_MINUS_SRC_COLOR:
208     case GL_SRC_ALPHA:
209     case GL_ONE_MINUS_SRC_ALPHA:
210     case GL_DST_ALPHA:
211     case GL_ONE_MINUS_DST_ALPHA:
212         return true;
213    }
214    return false;
215 }
216 
renderbufferInternalFrmt(GLEScontext * ctx,GLenum internalformat)217 bool GLEScmValidate::renderbufferInternalFrmt(GLEScontext* ctx, GLenum internalformat)
218 {
219     switch (internalformat) {
220     case GL_DEPTH_COMPONENT16_OES:
221     case GL_RGBA4_OES:
222     case GL_RGB5_A1_OES:
223     case GL_RGB565_OES:
224     case GL_STENCIL_INDEX1_OES:
225     case GL_STENCIL_INDEX4_OES:
226     case GL_STENCIL_INDEX8_OES:
227     case GL_RGB8_OES:
228     case GL_RGBA8_OES:
229     case GL_DEPTH_COMPONENT24_OES:
230     case GL_DEPTH_COMPONENT32_OES:
231         return true;
232     }
233     if (ctx->getCaps()->GL_EXT_PACKED_DEPTH_STENCIL && internalformat==GL_DEPTH24_STENCIL8_OES)
234         return true;
235 
236     return false;
237 }
238 
stencilOp(GLenum param)239 bool GLEScmValidate::stencilOp(GLenum param) {
240     switch (param) {
241     case GL_KEEP:
242     case GL_ZERO:
243     case GL_REPLACE:
244     case GL_INCR:
245     case GL_DECR:
246     case GL_INVERT:
247     case GL_INCR_WRAP_OES:
248     case GL_DECR_WRAP_OES:
249       return true;
250     }
251     return false;
252 }
253 
texGen(GLenum coord,GLenum pname)254 bool GLEScmValidate::texGen(GLenum coord, GLenum pname) {
255     return (coord == GL_TEXTURE_GEN_STR_OES && pname == GL_TEXTURE_GEN_MODE_OES);
256 }
257 
colorPointerType(GLenum type)258 bool GLEScmValidate::colorPointerType(GLenum type){
259     switch(type){
260     case GL_UNSIGNED_BYTE:
261     case GL_FIXED:
262     case GL_FLOAT:
263         return true;
264     }
265     return false;
266 }
267 
normalPointerType(GLenum type)268 bool GLEScmValidate::normalPointerType(GLenum type){
269 
270     switch(type){
271     case GL_BYTE:
272     case GL_SHORT:
273     case GL_FLOAT:
274     case GL_FIXED:
275         return true;
276     }
277     return false;
278 }
279 
pointPointerType(GLenum type)280 bool GLEScmValidate::pointPointerType(GLenum type){
281     return type == GL_FIXED || type == GL_FLOAT;
282 }
283 
texCoordPointerType(GLenum type)284 bool GLEScmValidate::texCoordPointerType(GLenum type){
285     switch(type){
286     case GL_BYTE:
287     case GL_SHORT:
288     case GL_FLOAT:
289     case GL_FIXED:
290         return true;
291     }
292     return false;
293 }
294 
vertexPointerType(GLenum type)295 bool GLEScmValidate::vertexPointerType(GLenum type){
296     switch(type){
297     case GL_BYTE:
298     case GL_SHORT:
299     case GL_FLOAT:
300     case GL_FIXED:
301         return true;
302     }
303     return false;
304 }
305 
306