blob: d5fb2e3568a75a07ce61fddede32959ada45b246 [file] [log] [blame]
# -*- 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)