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)