Home | History | Annotate | Download | only in scripts
      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 
     23 import sys
     24 from genutil import *
     25 
     26 # Templates
     27 
     28 reservedOperatorCaseTemplate = """
     29 case 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 	""
     47 end
     48 """[1:-1]
     49 
     50 # Classes
     51 
     52 class 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 
     68 class Operator():
     69 	def __init__(self, operator, name):
     70 		self.operator 	= operator
     71 		self.name 		= name
     72 
     73 # Declarations
     74 
     75 RESERVED_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 
     93 reservedOperatorCases = []
     94 
     95 for operator in RESERVED_OPERATORS:
     96 	reservedOperatorCases.append(ReservedOperatorCase(operator)) 		# Reserved operators
     97 
     98 # Main program
     99 
    100 if __name__ == "__main__":
    101 	print "Generating shader case files."
    102 	writeAllCases("reserved_operators.test", 	reservedOperatorCases)