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