xref: /aosp_15_r20/external/deqp/modules/gles3/scripts/gen-invalid-texture-funcs.py (revision 35238bce31c2a825756842865a792f8cf7f89930)
1# -*- coding: utf-8 -*-
2
3#-------------------------------------------------------------------------
4# drawElements Quality Program utilities
5# --------------------------------------
6#
7# Copyright 2015 The Android Open Source Project
8#
9# Licensed under the Apache License, Version 2.0 (the "License");
10# you may not use this file except in compliance with the License.
11# You may obtain a copy of the License at
12#
13#      http://www.apache.org/licenses/LICENSE-2.0
14#
15# Unless required by applicable law or agreed to in writing, software
16# distributed under the License is distributed on an "AS IS" BASIS,
17# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18# See the License for the specific language governing permissions and
19# limitations under the License.
20#
21#-------------------------------------------------------------------------
22
23import sys
24import string
25from genutil import *
26
27# Templates
28
29INVALID_TEXTURE_FUNC_TEMPLATE = """
30case ${{NAME}}
31    expect compile_fail
32    values {}
33    version 300 es
34
35    both ""
36        #version 300 es
37        precision mediump float;
38        ${DECLARATIONS}
39        uniform mediump ${{SAMPLERTYPE}} s;
40
41        void main()
42        {
43            ${SETUP}
44            ${POSITION_FRAG_COLOR} = vec4(${{LOOKUP}});
45            ${OUTPUT}
46        }
47    ""
48end
49"""[1:-1]
50
51# Classes
52
53def getValueExpr (argType):
54    return "%s(0)" % argType
55
56class InvalidTexFuncCase(ShaderCase):
57    def __init__(self, funcname, args):
58        self.name = string.join([s.lower() for s in [funcname] + args], "_")
59        self.funcname = funcname
60        self.args = args
61
62    def __str__(self):
63        samplerType = self.args[0]
64
65        lookup = self.funcname + "(s"
66        for arg in self.args[1:]:
67            lookup += ", %s" % getValueExpr(arg)
68        lookup += ")"
69
70        params = { "NAME": self.name, "SAMPLERTYPE": samplerType, "LOOKUP": lookup }
71        return fillTemplate(INVALID_TEXTURE_FUNC_TEMPLATE, params)
72
73# Invalid lookup cases
74# \note Does not include cases that don't make sense
75
76INVALID_TEX_FUNC_CASES = [
77    # texture
78    InvalidTexFuncCase("texture", ["sampler3DShadow", "vec4"]),
79    InvalidTexFuncCase("texture", ["sampler2DArrayShadow", "vec4", "float"]),
80
81    # textureProj
82    InvalidTexFuncCase("textureProj", ["samplerCube", "vec4"]),
83    InvalidTexFuncCase("textureProj", ["isamplerCube", "vec4"]),
84    InvalidTexFuncCase("textureProj", ["usamplerCube", "vec4"]),
85    InvalidTexFuncCase("textureProj", ["samplerCube", "vec4", "float"]),
86    InvalidTexFuncCase("textureProj", ["isamplerCube", "vec4", "float"]),
87    InvalidTexFuncCase("textureProj", ["usamplerCube", "vec4", "float"]),
88    InvalidTexFuncCase("textureProj", ["sampler2DArrayShadow", "vec4"]),
89    InvalidTexFuncCase("textureProj", ["sampler2DArrayShadow", "vec4", "float"]),
90
91    # textureLod
92    InvalidTexFuncCase("textureLod", ["samplerCubeShadow", "vec4", "float"]),
93    InvalidTexFuncCase("textureLod", ["sampler2DArrayShadow", "vec4", "float"]),
94
95    # textureOffset
96    InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec2"]),
97    InvalidTexFuncCase("textureOffset", ["isamplerCube", "vec3", "ivec2"]),
98    InvalidTexFuncCase("textureOffset", ["usamplerCube", "vec3", "ivec2"]),
99    InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec3"]),
100    InvalidTexFuncCase("textureOffset", ["isamplerCube", "vec3", "ivec3"]),
101    InvalidTexFuncCase("textureOffset", ["usamplerCube", "vec3", "ivec3"]),
102    InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec2", "float"]),
103    InvalidTexFuncCase("textureOffset", ["samplerCube", "vec3", "ivec3", "float"]),
104    InvalidTexFuncCase("textureOffset", ["sampler2DArray", "vec3", "ivec3"]),
105    InvalidTexFuncCase("textureOffset", ["sampler2DArray", "vec3", "ivec3", "float"]),
106    InvalidTexFuncCase("textureOffset", ["samplerCubeShadow", "vec4", "ivec2"]),
107    InvalidTexFuncCase("textureOffset", ["samplerCubeShadow", "vec4", "ivec3"]),
108    InvalidTexFuncCase("textureOffset", ["sampler2DArrayShadow", "vec4", "ivec2"]),
109    InvalidTexFuncCase("textureOffset", ["sampler2DArrayShadow", "vec4", "ivec2", "float"]),
110
111    # texelFetch
112    InvalidTexFuncCase("texelFetch", ["samplerCube", "ivec3", "int"]),
113    InvalidTexFuncCase("texelFetch", ["isamplerCube", "ivec3", "int"]),
114    InvalidTexFuncCase("texelFetch", ["usamplerCube", "ivec3", "int"]),
115    InvalidTexFuncCase("texelFetch", ["sampler2DShadow", "ivec2", "int"]),
116    InvalidTexFuncCase("texelFetch", ["samplerCubeShadow", "ivec3", "int"]),
117    InvalidTexFuncCase("texelFetch", ["sampler2DArrayShadow", "ivec3", "int"]),
118
119    # texelFetchOffset
120    InvalidTexFuncCase("texelFetch", ["samplerCube", "ivec3", "int", "ivec3"]),
121    InvalidTexFuncCase("texelFetch", ["sampler2DShadow", "ivec2", "int", "ivec2"]),
122    InvalidTexFuncCase("texelFetch", ["samplerCubeShadow", "ivec3", "int", "ivec3"]),
123    InvalidTexFuncCase("texelFetch", ["sampler2DArrayShadow", "ivec3", "int", "ivec3"]),
124
125    # textureProjOffset
126    InvalidTexFuncCase("textureProjOffset", ["samplerCube", "vec4", "ivec2"]),
127    InvalidTexFuncCase("textureProjOffset", ["samplerCube", "vec4", "ivec3"]),
128    InvalidTexFuncCase("textureProjOffset", ["samplerCubeShadow", "vec4", "ivec3"]),
129    InvalidTexFuncCase("textureProjOffset", ["sampler2DArrayShadow", "vec4", "ivec2"]),
130    InvalidTexFuncCase("textureProjOffset", ["sampler2DArrayShadow", "vec4", "ivec3"]),
131
132    # textureLodOffset
133    InvalidTexFuncCase("textureLodOffset", ["samplerCube", "vec3", "float", "ivec2"]),
134    InvalidTexFuncCase("textureLodOffset", ["samplerCube", "vec3", "float", "ivec3"]),
135    InvalidTexFuncCase("textureLodOffset", ["samplerCubeShadow", "vec3", "float", "ivec3"]),
136    InvalidTexFuncCase("textureLodOffset", ["sampler2DArrayShadow", "vec3", "float", "ivec2"]),
137    InvalidTexFuncCase("textureLodOffset", ["sampler2DArrayShadow", "vec3", "float", "ivec3"]),
138
139    # textureProjLod
140    InvalidTexFuncCase("textureProjLod", ["samplerCube", "vec4", "float"]),
141    InvalidTexFuncCase("textureProjLod", ["sampler2DArray", "vec4", "float"]),
142    InvalidTexFuncCase("textureProjLod", ["sampler2DArrayShadow", "vec4", "float"]),
143
144    # textureGrad
145    InvalidTexFuncCase("textureGrad", ["sampler2DArray", "vec3", "vec3", "vec3"]),
146
147    # textureGradOffset
148    InvalidTexFuncCase("textureGradOffset", ["samplerCube", "vec3", "vec3", "vec3", "ivec2"]),
149    InvalidTexFuncCase("textureGradOffset", ["samplerCube", "vec3", "vec3", "vec3", "ivec3"]),
150    InvalidTexFuncCase("textureGradOffset", ["samplerCubeShadow", "vec4", "vec3", "vec3", "ivec2"]),
151    InvalidTexFuncCase("textureGradOffset", ["samplerCubeShadow", "vec4", "vec3", "vec3", "ivec3"]),
152
153    # textureProjGrad
154    InvalidTexFuncCase("textureProjGrad", ["samplerCube", "vec4", "vec3", "vec3"]),
155    InvalidTexFuncCase("textureProjGrad", ["sampler2DArray", "vec4", "vec2", "vec2"]),
156
157    # textureProjGradOffset
158    InvalidTexFuncCase("textureProjGradOffset", ["samplerCube", "vec4", "vec3", "vec3", "ivec2"]),
159    InvalidTexFuncCase("textureProjGradOffset", ["samplerCube", "vec4", "vec3", "vec3", "ivec3"]),
160    InvalidTexFuncCase("textureProjGradOffset", ["sampler2DArray", "vec4", "vec2", "vec2", "ivec2"]),
161    InvalidTexFuncCase("textureProjGradOffset", ["sampler2DArray", "vec4", "vec2", "vec2", "ivec3"])
162]
163
164if __name__ == "__main__":
165    print("Generating shader case files.")
166    writeAllCases("invalid_texture_functions.test", INVALID_TEX_FUNC_CASES)
167