# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------
# drawElements Quality Program utilities
# --------------------------------------
#
# Copyright 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#-------------------------------------------------------------------------
import sys
from genutil import *
# Templates
reservedOperatorCaseTemplate = """
case operator_${{NAME}}
expect compile_fail
values {}
both ""
precision mediump float;
precision mediump int;
${DECLARATIONS}
void main()
{
${SETUP}
int value = 100;
${{OP}}
${OUTPUT}
}
""
end
"""[1:-1]
# Classes
class ReservedOperatorCase(ShaderCase):
def __init__(self, op):
self.name = op.name
if op.operator == "~":
self.operation = 'value = ~value;'
else:
self.operation = 'value ' + op.operator + ' 1;'
def __str__(self):
params = {
"NAME": self.name,
"OP" : self.operation
}
return fillTemplate(reservedOperatorCaseTemplate, params)
class Operator():
def __init__(self, operator, name):
self.operator = operator
self.name = name
# Declarations
RESERVED_OPERATORS = [
Operator("%", "modulo"),
Operator("~", "bitwise_not"),
Operator("<<", "bitwise_shift_left"),
Operator(">>", "bitwise_shift_right"),
Operator("&", "bitwise_and"),
Operator("^", "bitwise_xor"),
Operator("|", "bitwise_or"),
Operator("%=", "assign_modulo"),
Operator("<<=", "assign_shift_left"),
Operator(">>=", "assign_shift_right"),
Operator("&=", "assign_and"),
Operator("^=", "assign_xor"),
Operator("|=", "assign_or")
]
# Reserved operator usage cases
reservedOperatorCases = []
for operator in RESERVED_OPERATORS:
reservedOperatorCases.append(ReservedOperatorCase(operator)) # Reserved operators
# Main program
if __name__ == "__main__":
print "Generating shader case files."
writeAllCases("reserved_operators.test", reservedOperatorCases)