xref: /aosp_15_r20/external/deqp/modules/gles2/scripts/gen-reserved_operators.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
24from genutil import *
25
26# Templates
27
28reservedOperatorCaseTemplate = """
29case operator_${{NAME}}
30    expect compile_fail
31    values {}
32
33    both ""
34        precision mediump float;
35        precision mediump int;
36
37        ${DECLARATIONS}
38
39        void main()
40        {
41            ${SETUP}
42            int value = 100;
43            ${{OP}}
44            ${OUTPUT}
45        }
46    ""
47end
48"""[1:-1]
49
50# Classes
51
52class ReservedOperatorCase(ShaderCase):
53    def __init__(self, op):
54        self.name = op.name
55        if op.operator == "~":
56            self.operation = 'value = ~value;'
57        else:
58            self.operation = 'value ' + op.operator + ' 1;'
59
60    def __str__(self):
61        params = {
62            "NAME": self.name,
63            "OP"  : self.operation
64        }
65        return fillTemplate(reservedOperatorCaseTemplate, params)
66
67
68class Operator():
69    def __init__(self, operator, name):
70        self.operator = operator
71        self.name = name
72
73# Declarations
74
75RESERVED_OPERATORS = [
76    Operator("%", "modulo"),
77    Operator("~", "bitwise_not"),
78    Operator("<<", "bitwise_shift_left"),
79    Operator(">>", "bitwise_shift_right"),
80    Operator("&", "bitwise_and"),
81    Operator("^", "bitwise_xor"),
82    Operator("|", "bitwise_or"),
83    Operator("%=", "assign_modulo"),
84    Operator("<<=", "assign_shift_left"),
85    Operator(">>=", "assign_shift_right"),
86    Operator("&=", "assign_and"),
87    Operator("^=", "assign_xor"),
88    Operator("|=", "assign_or")
89]
90
91# Reserved operator usage cases
92
93reservedOperatorCases = []
94
95for operator in RESERVED_OPERATORS:
96    reservedOperatorCases.append(ReservedOperatorCase(operator))        # Reserved operators
97
98# Main program
99
100if __name__ == "__main__":
101    print("Generating shader case files.")
102    writeAllCases("reserved_operators.test", reservedOperatorCases)
103