| # -*- coding: utf-8 -*- |
| |
| #------------------------------------------------------------------------- |
| # drawElements Quality Program utilities |
| # -------------------------------------- |
| # |
| # Copyright 2015 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| #------------------------------------------------------------------------- |
| |
| import sys |
| import string |
| from genutil import * |
| |
| # Templates |
| |
| INVALID_TEXTURE_FUNC_TEMPLATE = """ |
| case ${{NAME}} |
| expect compile_fail |
| values {} |
| version 300 es |
| |
| both "" |
| #version 300 es |
| precision mediump float; |
| ${DECLARATIONS} |
| uniform mediump ${{SAMPLERTYPE}} s; |
| |
| void main() |
| { |
| ${SETUP} |
| ${POSITION_FRAG_COLOR} = vec4(${{LOOKUP}}); |
| ${OUTPUT} |
| } |
| "" |
| end |
| """[1:-1] |
| |
| # Classes |
| |
| def getValueExpr (argType): |
| return "%s(0)" % argType |
| |
| class InvalidTexFuncCase(ShaderCase): |
| def __init__(self, funcname, args): |
| self.name = string.join([s.lower() for s in [funcname] + args], "_") |
| self.funcname = funcname |
| self.args = args |
| |
| def __str__(self): |
| samplerType = self.args[0] |
| |
| lookup = self.funcname + "(s" |
| for arg in self.args[1:]: |
| lookup += ", %s" % getValueExpr(arg) |
| lookup += ")" |
| |
| params = { "NAME": self.name, "SAMPLERTYPE": samplerType, "LOOKUP": lookup } |
| return fillTemplate(INVALID_TEXTURE_FUNC_TEMPLATE, params) |
| |
| # Invalid lookup cases |
| # \note Does not include cases that don't make sense |
| |
| INVALID_TEX_FUNC_CASES = [ |
| # texture |
| InvalidTexFuncCase("texture", ["sampler3DShadow", "vec4"]), |
| InvalidTexFuncCase("texture", ["sampler2DArrayShadow", "vec4", "float"]), |
| |
| # textureProj |
| InvalidTexFuncCase("textureProj", ["samplerCube", "vec4"]), |
| InvalidTexFuncCase("textureProj", ["isamplerCube", "vec4"]), |
| InvalidTexFuncCase("textureProj", ["usamplerCube", "vec4"]), |
| InvalidTexFuncCase("textureProj", ["samplerCube", "vec4", "float"]), |
| InvalidTexFuncCase("textureProj", ["isamplerCube", "vec4", "float"]), |
| InvalidTexFuncCase("textureProj", ["usamplerCube", "vec4", "float"]), |
| InvalidTexFuncCase("textureProj", ["sampler2DArrayShadow", "vec4"]), |
| InvalidTexFuncCase("textureProj", ["sampler2DArrayShadow", "vec4", "float"]), |
| |
| # textureLod |
| InvalidTexFuncCase("textureLod", ["samplerCubeShadow", "vec4", "float"]), |
| InvalidTexFuncCase("textureLod", ["sampler2DArrayShadow", "vec4", "float"]), |
| |
| # textureOffset |
| InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec2"]), |
| InvalidTexFuncCase("textureOffset", ["isamplerCube", "vec3", "ivec2"]), |
| InvalidTexFuncCase("textureOffset", ["usamplerCube", "vec3", "ivec2"]), |
| InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec3"]), |
| InvalidTexFuncCase("textureOffset", ["isamplerCube", "vec3", "ivec3"]), |
| InvalidTexFuncCase("textureOffset", ["usamplerCube", "vec3", "ivec3"]), |
| InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec2", "float"]), |
| InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec3", "float"]), |
| InvalidTexFuncCase("textureOffset", ["sampler2DArray", "vec3", "ivec3"]), |
| InvalidTexFuncCase("textureOffset", ["sampler2DArray", "vec3", "ivec3", "float"]), |
| InvalidTexFuncCase("textureOffset", ["samplerCubeShadow", "vec4", "ivec2"]), |
| InvalidTexFuncCase("textureOffset", ["samplerCubeShadow", "vec4", "ivec3"]), |
| InvalidTexFuncCase("textureOffset", ["sampler2DArrayShadow", "vec4", "ivec2"]), |
| InvalidTexFuncCase("textureOffset", ["sampler2DArrayShadow", "vec4", "ivec2", "float"]), |
| |
| # texelFetch |
| InvalidTexFuncCase("texelFetch", ["samplerCube", "ivec3", "int"]), |
| InvalidTexFuncCase("texelFetch", ["isamplerCube", "ivec3", "int"]), |
| InvalidTexFuncCase("texelFetch", ["usamplerCube", "ivec3", "int"]), |
| InvalidTexFuncCase("texelFetch", ["sampler2DShadow", "ivec2", "int"]), |
| InvalidTexFuncCase("texelFetch", ["samplerCubeShadow", "ivec3", "int"]), |
| InvalidTexFuncCase("texelFetch", ["sampler2DArrayShadow", "ivec3", "int"]), |
| |
| # texelFetchOffset |
| InvalidTexFuncCase("texelFetch", ["samplerCube", "ivec3", "int", "ivec3"]), |
| InvalidTexFuncCase("texelFetch", ["sampler2DShadow", "ivec2", "int", "ivec2"]), |
| InvalidTexFuncCase("texelFetch", ["samplerCubeShadow", "ivec3", "int", "ivec3"]), |
| InvalidTexFuncCase("texelFetch", ["sampler2DArrayShadow", "ivec3", "int", "ivec3"]), |
| |
| # textureProjOffset |
| InvalidTexFuncCase("textureProjOffset", ["samplerCube", "vec4", "ivec2"]), |
| InvalidTexFuncCase("textureProjOffset", ["samplerCube", "vec4", "ivec3"]), |
| InvalidTexFuncCase("textureProjOffset", ["samplerCubeShadow", "vec4", "ivec3"]), |
| InvalidTexFuncCase("textureProjOffset", ["sampler2DArrayShadow", "vec4", "ivec2"]), |
| InvalidTexFuncCase("textureProjOffset", ["sampler2DArrayShadow", "vec4", "ivec3"]), |
| |
| # textureLodOffset |
| InvalidTexFuncCase("textureLodOffset", ["samplerCube", "vec3", "float", "ivec2"]), |
| InvalidTexFuncCase("textureLodOffset", ["samplerCube", "vec3", "float", "ivec3"]), |
| InvalidTexFuncCase("textureLodOffset", ["samplerCubeShadow", "vec3", "float", "ivec3"]), |
| InvalidTexFuncCase("textureLodOffset", ["sampler2DArrayShadow", "vec3", "float", "ivec2"]), |
| InvalidTexFuncCase("textureLodOffset", ["sampler2DArrayShadow", "vec3", "float", "ivec3"]), |
| |
| # textureProjLod |
| InvalidTexFuncCase("textureProjLod", ["samplerCube", "vec4", "float"]), |
| InvalidTexFuncCase("textureProjLod", ["sampler2DArray", "vec4", "float"]), |
| InvalidTexFuncCase("textureProjLod", ["sampler2DArrayShadow", "vec4", "float"]), |
| |
| # textureGrad |
| InvalidTexFuncCase("textureGrad", ["sampler2DArray", "vec3", "vec3", "vec3"]), |
| |
| # textureGradOffset |
| InvalidTexFuncCase("textureGradOffset", ["samplerCube", "vec3", "vec3", "vec3", "ivec2"]), |
| InvalidTexFuncCase("textureGradOffset", ["samplerCube", "vec3", "vec3", "vec3", "ivec3"]), |
| InvalidTexFuncCase("textureGradOffset", ["samplerCubeShadow", "vec4", "vec3", "vec3", "ivec2"]), |
| InvalidTexFuncCase("textureGradOffset", ["samplerCubeShadow", "vec4", "vec3", "vec3", "ivec3"]), |
| |
| # textureProjGrad |
| InvalidTexFuncCase("textureProjGrad", ["samplerCube", "vec4", "vec3", "vec3"]), |
| InvalidTexFuncCase("textureProjGrad", ["sampler2DArray", "vec4", "vec2", "vec2"]), |
| |
| # textureProjGradOffset |
| InvalidTexFuncCase("textureProjGradOffset", ["samplerCube", "vec4", "vec3", "vec3", "ivec2"]), |
| InvalidTexFuncCase("textureProjGradOffset", ["samplerCube", "vec4", "vec3", "vec3", "ivec3"]), |
| InvalidTexFuncCase("textureProjGradOffset", ["sampler2DArray", "vec4", "vec2", "vec2", "ivec2"]), |
| InvalidTexFuncCase("textureProjGradOffset", ["sampler2DArray", "vec4", "vec2", "vec2", "ivec3"]) |
| ] |
| |
| if __name__ == "__main__": |
| print("Generating shader case files.") |
| writeAllCases("invalid_texture_functions.test", INVALID_TEX_FUNC_CASES) |