xref: /aosp_15_r20/external/deqp/modules/gles3/scripts/gen-invalid-implicit-conversions.py (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker# -*- coding: utf-8 -*-
2*35238bceSAndroid Build Coastguard Worker
3*35238bceSAndroid Build Coastguard Worker#-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker# drawElements Quality Program utilities
5*35238bceSAndroid Build Coastguard Worker# --------------------------------------
6*35238bceSAndroid Build Coastguard Worker#
7*35238bceSAndroid Build Coastguard Worker# Copyright (c) 2016 The Khronos Group Inc.
8*35238bceSAndroid Build Coastguard Worker#
9*35238bceSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker# You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker#
13*35238bceSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker#
15*35238bceSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker# limitations under the License.
20*35238bceSAndroid Build Coastguard Worker#
21*35238bceSAndroid Build Coastguard Worker#-------------------------------------------------------------------------
22*35238bceSAndroid Build Coastguard Worker
23*35238bceSAndroid Build Coastguard Workerimport sys
24*35238bceSAndroid Build Coastguard Workerimport string
25*35238bceSAndroid Build Coastguard Workerfrom genutil import *
26*35238bceSAndroid Build Coastguard Worker
27*35238bceSAndroid Build Coastguard Worker# Templates
28*35238bceSAndroid Build Coastguard Worker
29*35238bceSAndroid Build Coastguard WorkerINVALID_IMPLICIT_CONVESION_TEMPLATE0 = """
30*35238bceSAndroid Build Coastguard Workercase ${{NAME}}
31*35238bceSAndroid Build Coastguard Worker    expect compile_fail
32*35238bceSAndroid Build Coastguard Worker    version 300 es
33*35238bceSAndroid Build Coastguard Worker
34*35238bceSAndroid Build Coastguard Worker    both ""
35*35238bceSAndroid Build Coastguard Worker        #version 300 es
36*35238bceSAndroid Build Coastguard Worker        precision mediump float;
37*35238bceSAndroid Build Coastguard Worker        precision mediump int;
38*35238bceSAndroid Build Coastguard Worker
39*35238bceSAndroid Build Coastguard Worker        ${DECLARATIONS}
40*35238bceSAndroid Build Coastguard Worker
41*35238bceSAndroid Build Coastguard Worker        void main()
42*35238bceSAndroid Build Coastguard Worker        {
43*35238bceSAndroid Build Coastguard Worker            ${{TYPE0}} c;
44*35238bceSAndroid Build Coastguard Worker            ${{TYPE0}} a;
45*35238bceSAndroid Build Coastguard Worker            ${{TYPE1}} b;
46*35238bceSAndroid Build Coastguard Worker            ${{TYPE0}} c = a ${{OPERATION}} b;
47*35238bceSAndroid Build Coastguard Worker        }
48*35238bceSAndroid Build Coastguard Worker    ""
49*35238bceSAndroid Build Coastguard Workerend
50*35238bceSAndroid Build Coastguard Worker"""[1:-1]
51*35238bceSAndroid Build Coastguard Worker
52*35238bceSAndroid Build Coastguard WorkerINVALID_IMPLICIT_CONVESION_TEMPLATE1 = """
53*35238bceSAndroid Build Coastguard Workercase ${{NAME}}
54*35238bceSAndroid Build Coastguard Worker    expect compile_fail
55*35238bceSAndroid Build Coastguard Worker    version 300 es
56*35238bceSAndroid Build Coastguard Worker
57*35238bceSAndroid Build Coastguard Worker    both ""
58*35238bceSAndroid Build Coastguard Worker        #version 300 es
59*35238bceSAndroid Build Coastguard Worker        precision mediump float;
60*35238bceSAndroid Build Coastguard Worker        precision mediump int;
61*35238bceSAndroid Build Coastguard Worker
62*35238bceSAndroid Build Coastguard Worker         ${DECLARATIONS}
63*35238bceSAndroid Build Coastguard Worker
64*35238bceSAndroid Build Coastguard Worker        void main()
65*35238bceSAndroid Build Coastguard Worker        {
66*35238bceSAndroid Build Coastguard Worker            ${{TYPE1}} c;
67*35238bceSAndroid Build Coastguard Worker            ${{TYPE0}} a;
68*35238bceSAndroid Build Coastguard Worker            ${{TYPE1}} b;
69*35238bceSAndroid Build Coastguard Worker            ${{TYPE1}} c = a ${{OPERATION}} b;
70*35238bceSAndroid Build Coastguard Worker        }
71*35238bceSAndroid Build Coastguard Worker    ""
72*35238bceSAndroid Build Coastguard Workerend
73*35238bceSAndroid Build Coastguard Worker"""[1:-1]
74*35238bceSAndroid Build Coastguard Worker
75*35238bceSAndroid Build Coastguard WorkerarithOperations = {'+': 'add', '*':'mul', '/': 'div', '-':'sub'}
76*35238bceSAndroid Build Coastguard Worker
77*35238bceSAndroid Build Coastguard Workerclass InvalidImplicitConversionCase(ShaderCase):
78*35238bceSAndroid Build Coastguard Worker    def __init__(self, operation, type0, type1):
79*35238bceSAndroid Build Coastguard Worker        self.name = arithOperations[operation] + '_' + type0 + '_' + type1
80*35238bceSAndroid Build Coastguard Worker        self.operation = operation
81*35238bceSAndroid Build Coastguard Worker        self.type0 = type0
82*35238bceSAndroid Build Coastguard Worker        self.type1 = type1
83*35238bceSAndroid Build Coastguard Worker
84*35238bceSAndroid Build Coastguard Worker    def __str__(self):
85*35238bceSAndroid Build Coastguard Worker
86*35238bceSAndroid Build Coastguard Worker        params0 = { "NAME": self.name + '_' + self.type0, "TYPE0": self.type0, "TYPE1": self.type1, "OPERATION": self.operation }
87*35238bceSAndroid Build Coastguard Worker        params1 = { "NAME": self.name + '_' + self.type1, "TYPE0": self.type0, "TYPE1": self.type1, "OPERATION": self.operation }
88*35238bceSAndroid Build Coastguard Worker        return fillTemplate(INVALID_IMPLICIT_CONVESION_TEMPLATE0, params0) + '\n' + fillTemplate(INVALID_IMPLICIT_CONVESION_TEMPLATE1, params1)
89*35238bceSAndroid Build Coastguard Worker
90*35238bceSAndroid Build Coastguard Workerdef createCase(operation, type0, type1):
91*35238bceSAndroid Build Coastguard Worker    cases = []
92*35238bceSAndroid Build Coastguard Worker    for t0 in type0:
93*35238bceSAndroid Build Coastguard Worker        for t1 in type1:
94*35238bceSAndroid Build Coastguard Worker            case = InvalidImplicitConversionCase(operation, t0, t1)
95*35238bceSAndroid Build Coastguard Worker            cases.append(case)
96*35238bceSAndroid Build Coastguard Worker    return cases
97*35238bceSAndroid Build Coastguard Worker
98*35238bceSAndroid Build Coastguard Workerfloats = ['float', 'vec2', 'vec3', 'vec4']
99*35238bceSAndroid Build Coastguard Workersintegers = ['int', 'ivec2', 'ivec3', 'ivec4']
100*35238bceSAndroid Build Coastguard Workeruintegers = ['uint', 'uvec2', 'uvec3', 'uvec4']
101*35238bceSAndroid Build Coastguard Workercases = []
102*35238bceSAndroid Build Coastguard Workerfor op in arithOperations:
103*35238bceSAndroid Build Coastguard Worker    caseFpInt = createCase(op, floats, sintegers)
104*35238bceSAndroid Build Coastguard Worker    cases = cases + caseFpInt
105*35238bceSAndroid Build Coastguard Worker    caseFpUint = createCase(op, floats, uintegers)
106*35238bceSAndroid Build Coastguard Worker    cases = cases + caseFpUint
107*35238bceSAndroid Build Coastguard Worker    caseIntUint = createCase(op, sintegers, uintegers)
108*35238bceSAndroid Build Coastguard Worker    cases = cases + caseIntUint
109*35238bceSAndroid Build Coastguard Worker
110*35238bceSAndroid Build Coastguard WorkerinvalidImplicitConversionCases = [
111*35238bceSAndroid Build Coastguard Worker        CaseGroup("invalid_implicit_conversions", "Invalid Implicit Conversions", cases),
112*35238bceSAndroid Build Coastguard Worker]
113*35238bceSAndroid Build Coastguard Worker
114*35238bceSAndroid Build Coastguard Workerif __name__ == "__main__":
115*35238bceSAndroid Build Coastguard Worker    print("Generating shader case files.")
116*35238bceSAndroid Build Coastguard Worker    writeAllCases("invalid_implicit_conversions.test", invalidImplicitConversionCases)
117