| 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) |