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