Home | History | Annotate | Download | only in GLES_V2
      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