• 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