1e5c31af7Sopenharmony_ci# -*- coding: utf-8 -*-
2e5c31af7Sopenharmony_ci
3e5c31af7Sopenharmony_ci#-------------------------------------------------------------------------
4e5c31af7Sopenharmony_ci# drawElements Quality Program utilities
5e5c31af7Sopenharmony_ci# --------------------------------------
6e5c31af7Sopenharmony_ci#
7e5c31af7Sopenharmony_ci# Copyright 2015 The Android Open Source Project
8e5c31af7Sopenharmony_ci#
9e5c31af7Sopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
10e5c31af7Sopenharmony_ci# you may not use this file except in compliance with the License.
11e5c31af7Sopenharmony_ci# You may obtain a copy of the License at
12e5c31af7Sopenharmony_ci#
13e5c31af7Sopenharmony_ci#      http://www.apache.org/licenses/LICENSE-2.0
14e5c31af7Sopenharmony_ci#
15e5c31af7Sopenharmony_ci# Unless required by applicable law or agreed to in writing, software
16e5c31af7Sopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
17e5c31af7Sopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18e5c31af7Sopenharmony_ci# See the License for the specific language governing permissions and
19e5c31af7Sopenharmony_ci# limitations under the License.
20e5c31af7Sopenharmony_ci#
21e5c31af7Sopenharmony_ci#-------------------------------------------------------------------------
22e5c31af7Sopenharmony_ci
23e5c31af7Sopenharmony_ciimport sys
24e5c31af7Sopenharmony_cifrom genutil import *
25e5c31af7Sopenharmony_ci
26e5c31af7Sopenharmony_ci# Templates
27e5c31af7Sopenharmony_ci
28e5c31af7Sopenharmony_cireservedOperatorCaseTemplate = """
29e5c31af7Sopenharmony_cicase operator_${{NAME}}
30e5c31af7Sopenharmony_ci	expect compile_fail
31e5c31af7Sopenharmony_ci	values {}
32e5c31af7Sopenharmony_ci
33e5c31af7Sopenharmony_ci	both ""
34e5c31af7Sopenharmony_ci		precision mediump float;
35e5c31af7Sopenharmony_ci		precision mediump int;
36e5c31af7Sopenharmony_ci
37e5c31af7Sopenharmony_ci		${DECLARATIONS}
38e5c31af7Sopenharmony_ci
39e5c31af7Sopenharmony_ci		void main()
40e5c31af7Sopenharmony_ci		{
41e5c31af7Sopenharmony_ci			${SETUP}
42e5c31af7Sopenharmony_ci			int value = 100;
43e5c31af7Sopenharmony_ci			${{OP}}
44e5c31af7Sopenharmony_ci			${OUTPUT}
45e5c31af7Sopenharmony_ci		}
46e5c31af7Sopenharmony_ci	""
47e5c31af7Sopenharmony_ciend
48e5c31af7Sopenharmony_ci"""[1:-1]
49e5c31af7Sopenharmony_ci
50e5c31af7Sopenharmony_ci# Classes
51e5c31af7Sopenharmony_ci
52e5c31af7Sopenharmony_ciclass ReservedOperatorCase(ShaderCase):
53e5c31af7Sopenharmony_ci	def __init__(self, op):
54e5c31af7Sopenharmony_ci		self.name		= op.name
55e5c31af7Sopenharmony_ci		if op.operator == "~":
56e5c31af7Sopenharmony_ci			self.operation = 'value = ~value;'
57e5c31af7Sopenharmony_ci		else:
58e5c31af7Sopenharmony_ci			self.operation	= 'value ' + op.operator + ' 1;'
59e5c31af7Sopenharmony_ci
60e5c31af7Sopenharmony_ci	def __str__(self):
61e5c31af7Sopenharmony_ci		params = {
62e5c31af7Sopenharmony_ci			"NAME": self.name,
63e5c31af7Sopenharmony_ci			"OP"  : self.operation
64e5c31af7Sopenharmony_ci		}
65e5c31af7Sopenharmony_ci		return fillTemplate(reservedOperatorCaseTemplate, params)
66e5c31af7Sopenharmony_ci
67e5c31af7Sopenharmony_ci
68e5c31af7Sopenharmony_ciclass Operator():
69e5c31af7Sopenharmony_ci	def __init__(self, operator, name):
70e5c31af7Sopenharmony_ci		self.operator	= operator
71e5c31af7Sopenharmony_ci		self.name		= name
72e5c31af7Sopenharmony_ci
73e5c31af7Sopenharmony_ci# Declarations
74e5c31af7Sopenharmony_ci
75e5c31af7Sopenharmony_ciRESERVED_OPERATORS = [
76e5c31af7Sopenharmony_ci	Operator("%",	"modulo"),
77e5c31af7Sopenharmony_ci	Operator("~",	"bitwise_not"),
78e5c31af7Sopenharmony_ci	Operator("<<",	"bitwise_shift_left"),
79e5c31af7Sopenharmony_ci	Operator(">>",	"bitwise_shift_right"),
80e5c31af7Sopenharmony_ci	Operator("&",	"bitwise_and"),
81e5c31af7Sopenharmony_ci	Operator("^",	"bitwise_xor"),
82e5c31af7Sopenharmony_ci	Operator("|",	"bitwise_or"),
83e5c31af7Sopenharmony_ci	Operator("%=",	"assign_modulo"),
84e5c31af7Sopenharmony_ci	Operator("<<=",	"assign_shift_left"),
85e5c31af7Sopenharmony_ci	Operator(">>=", "assign_shift_right"),
86e5c31af7Sopenharmony_ci	Operator("&=",	"assign_and"),
87e5c31af7Sopenharmony_ci	Operator("^=",	"assign_xor"),
88e5c31af7Sopenharmony_ci	Operator("|=",	"assign_or")
89e5c31af7Sopenharmony_ci]
90e5c31af7Sopenharmony_ci
91e5c31af7Sopenharmony_ci# Reserved operator usage cases
92e5c31af7Sopenharmony_ci
93e5c31af7Sopenharmony_cireservedOperatorCases = []
94e5c31af7Sopenharmony_ci
95e5c31af7Sopenharmony_cifor operator in RESERVED_OPERATORS:
96e5c31af7Sopenharmony_ci	reservedOperatorCases.append(ReservedOperatorCase(operator))		# Reserved operators
97e5c31af7Sopenharmony_ci
98e5c31af7Sopenharmony_ci# Main program
99e5c31af7Sopenharmony_ci
100e5c31af7Sopenharmony_ciif __name__ == "__main__":
101e5c31af7Sopenharmony_ci	print("Generating shader case files.")
102e5c31af7Sopenharmony_ci	writeAllCases("reserved_operators.test",	reservedOperatorCases)
103