1# -*- coding: utf-8 -*- 2 3#------------------------------------------------------------------------- 4# drawElements Quality Program utilities 5# -------------------------------------- 6# 7# Copyright 2015 The Android Open Source Project 8# 9# Licensed under the Apache License, Version 2.0 (the "License"); 10# you may not use this file except in compliance with the License. 11# You may obtain a copy of the License at 12# 13# http://www.apache.org/licenses/LICENSE-2.0 14# 15# Unless required by applicable law or agreed to in writing, software 16# distributed under the License is distributed on an "AS IS" BASIS, 17# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18# See the License for the specific language governing permissions and 19# limitations under the License. 20# 21#------------------------------------------------------------------------- 22 23import sys 24import string 25from genutil import * 26 27# Templates 28 29INVALID_TEXTURE_FUNC_TEMPLATE = """ 30case ${{NAME}} 31 expect compile_fail 32 values {} 33 version 300 es 34 35 both "" 36 #version 300 es 37 precision mediump float; 38 ${DECLARATIONS} 39 uniform mediump ${{SAMPLERTYPE}} s; 40 41 void main() 42 { 43 ${SETUP} 44 ${POSITION_FRAG_COLOR} = vec4(${{LOOKUP}}); 45 ${OUTPUT} 46 } 47 "" 48end 49"""[1:-1] 50 51# Classes 52 53def getValueExpr (argType): 54 return "%s(0)" % argType 55 56class InvalidTexFuncCase(ShaderCase): 57 def __init__(self, funcname, args): 58 self.name = string.join([s.lower() for s in [funcname] + args], "_") 59 self.funcname = funcname 60 self.args = args 61 62 def __str__(self): 63 samplerType = self.args[0] 64 65 lookup = self.funcname + "(s" 66 for arg in self.args[1:]: 67 lookup += ", %s" % getValueExpr(arg) 68 lookup += ")" 69 70 params = { "NAME": self.name, "SAMPLERTYPE": samplerType, "LOOKUP": lookup } 71 return fillTemplate(INVALID_TEXTURE_FUNC_TEMPLATE, params) 72 73# Invalid lookup cases 74# \note Does not include cases that don't make sense 75 76INVALID_TEX_FUNC_CASES = [ 77 # texture 78 InvalidTexFuncCase("texture", ["sampler3DShadow", "vec4"]), 79 InvalidTexFuncCase("texture", ["sampler2DArrayShadow", "vec4", "float"]), 80 81 # textureProj 82 InvalidTexFuncCase("textureProj", ["samplerCube", "vec4"]), 83 InvalidTexFuncCase("textureProj", ["isamplerCube", "vec4"]), 84 InvalidTexFuncCase("textureProj", ["usamplerCube", "vec4"]), 85 InvalidTexFuncCase("textureProj", ["samplerCube", "vec4", "float"]), 86 InvalidTexFuncCase("textureProj", ["isamplerCube", "vec4", "float"]), 87 InvalidTexFuncCase("textureProj", ["usamplerCube", "vec4", "float"]), 88 InvalidTexFuncCase("textureProj", ["sampler2DArrayShadow", "vec4"]), 89 InvalidTexFuncCase("textureProj", ["sampler2DArrayShadow", "vec4", "float"]), 90 91 # textureLod 92 InvalidTexFuncCase("textureLod", ["samplerCubeShadow", "vec4", "float"]), 93 InvalidTexFuncCase("textureLod", ["sampler2DArrayShadow", "vec4", "float"]), 94 95 # textureOffset 96 InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec2"]), 97 InvalidTexFuncCase("textureOffset", ["isamplerCube", "vec3", "ivec2"]), 98 InvalidTexFuncCase("textureOffset", ["usamplerCube", "vec3", "ivec2"]), 99 InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec3"]), 100 InvalidTexFuncCase("textureOffset", ["isamplerCube", "vec3", "ivec3"]), 101 InvalidTexFuncCase("textureOffset", ["usamplerCube", "vec3", "ivec3"]), 102 InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec2", "float"]), 103 InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec3", "float"]), 104 InvalidTexFuncCase("textureOffset", ["sampler2DArray", "vec3", "ivec3"]), 105 InvalidTexFuncCase("textureOffset", ["sampler2DArray", "vec3", "ivec3", "float"]), 106 InvalidTexFuncCase("textureOffset", ["samplerCubeShadow", "vec4", "ivec2"]), 107 InvalidTexFuncCase("textureOffset", ["samplerCubeShadow", "vec4", "ivec3"]), 108 InvalidTexFuncCase("textureOffset", ["sampler2DArrayShadow", "vec4", "ivec2"]), 109 InvalidTexFuncCase("textureOffset", ["sampler2DArrayShadow", "vec4", "ivec2", "float"]), 110 111 # texelFetch 112 InvalidTexFuncCase("texelFetch", ["samplerCube", "ivec3", "int"]), 113 InvalidTexFuncCase("texelFetch", ["isamplerCube", "ivec3", "int"]), 114 InvalidTexFuncCase("texelFetch", ["usamplerCube", "ivec3", "int"]), 115 InvalidTexFuncCase("texelFetch", ["sampler2DShadow", "ivec2", "int"]), 116 InvalidTexFuncCase("texelFetch", ["samplerCubeShadow", "ivec3", "int"]), 117 InvalidTexFuncCase("texelFetch", ["sampler2DArrayShadow", "ivec3", "int"]), 118 119 # texelFetchOffset 120 InvalidTexFuncCase("texelFetch", ["samplerCube", "ivec3", "int", "ivec3"]), 121 InvalidTexFuncCase("texelFetch", ["sampler2DShadow", "ivec2", "int", "ivec2"]), 122 InvalidTexFuncCase("texelFetch", ["samplerCubeShadow", "ivec3", "int", "ivec3"]), 123 InvalidTexFuncCase("texelFetch", ["sampler2DArrayShadow", "ivec3", "int", "ivec3"]), 124 125 # textureProjOffset 126 InvalidTexFuncCase("textureProjOffset", ["samplerCube", "vec4", "ivec2"]), 127 InvalidTexFuncCase("textureProjOffset", ["samplerCube", "vec4", "ivec3"]), 128 InvalidTexFuncCase("textureProjOffset", ["samplerCubeShadow", "vec4", "ivec3"]), 129 InvalidTexFuncCase("textureProjOffset", ["sampler2DArrayShadow", "vec4", "ivec2"]), 130 InvalidTexFuncCase("textureProjOffset", ["sampler2DArrayShadow", "vec4", "ivec3"]), 131 132 # textureLodOffset 133 InvalidTexFuncCase("textureLodOffset", ["samplerCube", "vec3", "float", "ivec2"]), 134 InvalidTexFuncCase("textureLodOffset", ["samplerCube", "vec3", "float", "ivec3"]), 135 InvalidTexFuncCase("textureLodOffset", ["samplerCubeShadow", "vec3", "float", "ivec3"]), 136 InvalidTexFuncCase("textureLodOffset", ["sampler2DArrayShadow", "vec3", "float", "ivec2"]), 137 InvalidTexFuncCase("textureLodOffset", ["sampler2DArrayShadow", "vec3", "float", "ivec3"]), 138 139 # textureProjLod 140 InvalidTexFuncCase("textureProjLod", ["samplerCube", "vec4", "float"]), 141 InvalidTexFuncCase("textureProjLod", ["sampler2DArray", "vec4", "float"]), 142 InvalidTexFuncCase("textureProjLod", ["sampler2DArrayShadow", "vec4", "float"]), 143 144 # textureGrad 145 InvalidTexFuncCase("textureGrad", ["sampler2DArray", "vec3", "vec3", "vec3"]), 146 147 # textureGradOffset 148 InvalidTexFuncCase("textureGradOffset", ["samplerCube", "vec3", "vec3", "vec3", "ivec2"]), 149 InvalidTexFuncCase("textureGradOffset", ["samplerCube", "vec3", "vec3", "vec3", "ivec3"]), 150 InvalidTexFuncCase("textureGradOffset", ["samplerCubeShadow", "vec4", "vec3", "vec3", "ivec2"]), 151 InvalidTexFuncCase("textureGradOffset", ["samplerCubeShadow", "vec4", "vec3", "vec3", "ivec3"]), 152 153 # textureProjGrad 154 InvalidTexFuncCase("textureProjGrad", ["samplerCube", "vec4", "vec3", "vec3"]), 155 InvalidTexFuncCase("textureProjGrad", ["sampler2DArray", "vec4", "vec2", "vec2"]), 156 157 # textureProjGradOffset 158 InvalidTexFuncCase("textureProjGradOffset", ["samplerCube", "vec4", "vec3", "vec3", "ivec2"]), 159 InvalidTexFuncCase("textureProjGradOffset", ["samplerCube", "vec4", "vec3", "vec3", "ivec3"]), 160 InvalidTexFuncCase("textureProjGradOffset", ["sampler2DArray", "vec4", "vec2", "vec2", "ivec2"]), 161 InvalidTexFuncCase("textureProjGradOffset", ["sampler2DArray", "vec4", "vec2", "vec2", "ivec3"]) 162] 163 164if __name__ == "__main__": 165 print "Generating shader case files." 166 writeAllCases("invalid_texture_functions.test", INVALID_TEX_FUNC_CASES) 167