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)