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