• 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 "GLESv2Validate.h"
17 
blendEquationMode(GLenum mode)18 bool GLESv2Validate::blendEquationMode(GLenum mode){
19     return mode == GL_FUNC_ADD             ||
20            mode == GL_FUNC_SUBTRACT        ||
21            mode == GL_FUNC_REVERSE_SUBTRACT;
22 }
23 
blendSrc(GLenum s)24 bool GLESv2Validate::blendSrc(GLenum s) {
25    switch(s) {
26    case GL_ZERO:
27    case GL_ONE:
28    case GL_SRC_COLOR:
29    case GL_ONE_MINUS_SRC_COLOR:
30    case GL_DST_COLOR:
31    case GL_ONE_MINUS_DST_COLOR:
32    case GL_SRC_ALPHA:
33    case GL_ONE_MINUS_SRC_ALPHA:
34    case GL_DST_ALPHA:
35    case GL_ONE_MINUS_DST_ALPHA:
36    case GL_CONSTANT_COLOR:
37    case GL_ONE_MINUS_CONSTANT_COLOR:
38    case GL_CONSTANT_ALPHA:
39    case GL_ONE_MINUS_CONSTANT_ALPHA:
40    case GL_SRC_ALPHA_SATURATE:
41         return true;
42   }
43   return false;
44 }
45 
46 
blendDst(GLenum d)47 bool GLESv2Validate::blendDst(GLenum d) {
48    switch(d) {
49    case GL_ZERO:
50    case GL_ONE:
51    case GL_SRC_COLOR:
52    case GL_ONE_MINUS_SRC_COLOR:
53    case GL_DST_COLOR:
54    case GL_ONE_MINUS_DST_COLOR:
55    case GL_SRC_ALPHA:
56    case GL_ONE_MINUS_SRC_ALPHA:
57    case GL_DST_ALPHA:
58    case GL_ONE_MINUS_DST_ALPHA:
59    case GL_CONSTANT_COLOR:
60    case GL_ONE_MINUS_CONSTANT_COLOR:
61    case GL_CONSTANT_ALPHA:
62    case GL_ONE_MINUS_CONSTANT_ALPHA:
63         return true;
64    }
65    return false;
66 }
67 
textureParams(GLenum param)68 bool GLESv2Validate::textureParams(GLenum param){
69     switch(param) {
70     case GL_TEXTURE_MIN_FILTER:
71     case GL_TEXTURE_MAG_FILTER:
72     case GL_TEXTURE_WRAP_S:
73     case GL_TEXTURE_WRAP_T:
74         return true;
75     default:
76         return false;
77     }
78 }
79 
hintTargetMode(GLenum target,GLenum mode)80 bool GLESv2Validate::hintTargetMode(GLenum target,GLenum mode){
81 
82    switch(mode) {
83    case GL_FASTEST:
84    case GL_NICEST:
85    case GL_DONT_CARE:
86        break;
87    default: return false;
88    }
89    return target == GL_GENERATE_MIPMAP_HINT || target == GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES;
90 }
91 
capability(GLenum cap)92 bool GLESv2Validate::capability(GLenum cap){
93     switch(cap){
94     case GL_BLEND:
95     case GL_CULL_FACE:
96     case GL_DEPTH_TEST:
97     case GL_DITHER:
98     case GL_POLYGON_OFFSET_FILL:
99     case GL_SAMPLE_ALPHA_TO_COVERAGE:
100     case GL_SAMPLE_COVERAGE:
101     case GL_SCISSOR_TEST:
102     case GL_STENCIL_TEST:
103         return true;
104     }
105     return false;
106 }
107 
pixelStoreParam(GLenum param)108 bool GLESv2Validate::pixelStoreParam(GLenum param){
109     return param == GL_PACK_ALIGNMENT || param == GL_UNPACK_ALIGNMENT;
110 }
111 
readPixelFrmt(GLenum format)112 bool GLESv2Validate::readPixelFrmt(GLenum format){
113     switch(format) {
114     case GL_ALPHA:
115     case GL_RGB:
116     case GL_RGBA:
117         return true;
118     }
119     return false;
120 }
121 
122 
shaderType(GLenum type)123 bool GLESv2Validate::shaderType(GLenum type){
124     return type == GL_VERTEX_SHADER || type == GL_FRAGMENT_SHADER;
125 }
126 
precisionType(GLenum type)127 bool GLESv2Validate::precisionType(GLenum type){
128     switch(type){
129     case GL_LOW_FLOAT:
130     case GL_MEDIUM_FLOAT:
131     case GL_HIGH_FLOAT:
132     case GL_LOW_INT:
133     case GL_MEDIUM_INT:
134     case GL_HIGH_INT:
135         return true;
136     }
137     return false;
138 }
139 
arrayIndex(GLEScontext * ctx,GLuint index)140 bool GLESv2Validate::arrayIndex(GLEScontext * ctx,GLuint index) {
141     return index < (GLuint)ctx->getCaps()->maxVertexAttribs;
142 }
143 
pixelType(GLEScontext * ctx,GLenum type)144 bool GLESv2Validate::pixelType(GLEScontext * ctx,GLenum type) {
145     if(type == GL_UNSIGNED_SHORT || type == GL_UNSIGNED_INT)
146         return true;
147 
148     return GLESvalidate::pixelType(ctx, type);
149 }
150 
pixelFrmt(GLEScontext * ctx,GLenum format)151 bool GLESv2Validate::pixelFrmt(GLEScontext* ctx,GLenum format) {
152     if(format == GL_DEPTH_COMPONENT)
153         return true;
154 
155     return GLESvalidate::pixelFrmt(ctx, format);
156 }
157 
attribName(const GLchar * name)158 bool GLESv2Validate::attribName(const GLchar* name){
159     const GLchar* found = strstr(name,"gl_");
160     return (!found) ||
161            (found != name) ; // attrib name does not start with gl_
162 }
163 
attribIndex(int index)164 bool GLESv2Validate::attribIndex(int index){
165     return index >=0 && index < GL_MAX_VERTEX_ATTRIBS;
166 }
167 
programParam(GLenum pname)168 bool GLESv2Validate::programParam(GLenum pname){
169     switch(pname){
170         case GL_DELETE_STATUS:
171         case GL_LINK_STATUS:
172         case GL_VALIDATE_STATUS:
173         case GL_INFO_LOG_LENGTH:
174         case GL_ATTACHED_SHADERS:
175         case GL_ACTIVE_ATTRIBUTES:
176         case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH:
177         case GL_ACTIVE_UNIFORMS:
178         case GL_ACTIVE_UNIFORM_MAX_LENGTH:
179             return true;
180     }
181     return false;
182 }
183