1*35238bceSAndroid Build Coastguard Worker# -*- coding: utf-8 -*- 2*35238bceSAndroid Build Coastguard Worker 3*35238bceSAndroid Build Coastguard Worker#------------------------------------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker# drawElements Quality Program utilities 5*35238bceSAndroid Build Coastguard Worker# -------------------------------------- 6*35238bceSAndroid Build Coastguard Worker# 7*35238bceSAndroid Build Coastguard Worker# Copyright (c) 2016 The Khronos Group Inc. 8*35238bceSAndroid Build Coastguard Worker# 9*35238bceSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 10*35238bceSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 11*35238bceSAndroid Build Coastguard Worker# You may obtain a copy of the License at 12*35238bceSAndroid Build Coastguard Worker# 13*35238bceSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 14*35238bceSAndroid Build Coastguard Worker# 15*35238bceSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 16*35238bceSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 17*35238bceSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18*35238bceSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 19*35238bceSAndroid Build Coastguard Worker# limitations under the License. 20*35238bceSAndroid Build Coastguard Worker# 21*35238bceSAndroid Build Coastguard Worker#------------------------------------------------------------------------- 22*35238bceSAndroid Build Coastguard Worker 23*35238bceSAndroid Build Coastguard Workerimport sys 24*35238bceSAndroid Build Coastguard Workerimport string 25*35238bceSAndroid Build Coastguard Workerfrom genutil import * 26*35238bceSAndroid Build Coastguard Worker 27*35238bceSAndroid Build Coastguard Worker# Templates 28*35238bceSAndroid Build Coastguard Worker 29*35238bceSAndroid Build Coastguard WorkerINVALID_IMPLICIT_CONVESION_TEMPLATE0 = """ 30*35238bceSAndroid Build Coastguard Workercase ${{NAME}} 31*35238bceSAndroid Build Coastguard Worker expect compile_fail 32*35238bceSAndroid Build Coastguard Worker 33*35238bceSAndroid Build Coastguard Worker both "" 34*35238bceSAndroid Build Coastguard Worker precision mediump float; 35*35238bceSAndroid Build Coastguard Worker precision mediump int; 36*35238bceSAndroid Build Coastguard Worker 37*35238bceSAndroid Build Coastguard Worker ${DECLARATIONS} 38*35238bceSAndroid Build Coastguard Worker 39*35238bceSAndroid Build Coastguard Worker void main() 40*35238bceSAndroid Build Coastguard Worker { 41*35238bceSAndroid Build Coastguard Worker ${{TYPE0}} c; 42*35238bceSAndroid Build Coastguard Worker ${{TYPE0}} a; 43*35238bceSAndroid Build Coastguard Worker ${{TYPE1}} b; 44*35238bceSAndroid Build Coastguard Worker ${{TYPE0}} c = a ${{OPERATION}} b; 45*35238bceSAndroid Build Coastguard Worker } 46*35238bceSAndroid Build Coastguard Worker "" 47*35238bceSAndroid Build Coastguard Workerend 48*35238bceSAndroid Build Coastguard Worker"""[1:-1] 49*35238bceSAndroid Build Coastguard Worker 50*35238bceSAndroid Build Coastguard WorkerINVALID_IMPLICIT_CONVESION_TEMPLATE1 = """ 51*35238bceSAndroid Build Coastguard Workercase ${{NAME}} 52*35238bceSAndroid Build Coastguard Worker expect compile_fail 53*35238bceSAndroid Build Coastguard Worker 54*35238bceSAndroid Build Coastguard Worker both "" 55*35238bceSAndroid Build Coastguard Worker precision mediump float; 56*35238bceSAndroid Build Coastguard Worker precision mediump int; 57*35238bceSAndroid Build Coastguard Worker 58*35238bceSAndroid Build Coastguard Worker ${DECLARATIONS} 59*35238bceSAndroid Build Coastguard Worker 60*35238bceSAndroid Build Coastguard Worker void main() 61*35238bceSAndroid Build Coastguard Worker { 62*35238bceSAndroid Build Coastguard Worker ${{TYPE1}} c; 63*35238bceSAndroid Build Coastguard Worker ${{TYPE0}} a; 64*35238bceSAndroid Build Coastguard Worker ${{TYPE1}} b; 65*35238bceSAndroid Build Coastguard Worker ${{TYPE1}} c = a ${{OPERATION}} b; 66*35238bceSAndroid Build Coastguard Worker } 67*35238bceSAndroid Build Coastguard Worker "" 68*35238bceSAndroid Build Coastguard Workerend 69*35238bceSAndroid Build Coastguard Worker"""[1:-1] 70*35238bceSAndroid Build Coastguard Worker 71*35238bceSAndroid Build Coastguard WorkerarithOperations = {'+': 'add', '*':'mul', '/': 'div', '-':'sub'} 72*35238bceSAndroid Build Coastguard Worker 73*35238bceSAndroid Build Coastguard Workerclass InvalidImplicitConversionCase(ShaderCase): 74*35238bceSAndroid Build Coastguard Worker def __init__(self, operation, type0, type1): 75*35238bceSAndroid Build Coastguard Worker self.name = arithOperations[operation] + '_' + type0 + '_' + type1 76*35238bceSAndroid Build Coastguard Worker self.operation = operation 77*35238bceSAndroid Build Coastguard Worker self.type0 = type0 78*35238bceSAndroid Build Coastguard Worker self.type1 = type1 79*35238bceSAndroid Build Coastguard Worker 80*35238bceSAndroid Build Coastguard Worker def __str__(self): 81*35238bceSAndroid Build Coastguard Worker params0 = { "NAME": self.name + '_' + self.type0, "TYPE0": self.type0, "TYPE1": self.type1, "OPERATION": self.operation } 82*35238bceSAndroid Build Coastguard Worker params1 = { "NAME": self.name + '_' + self.type1, "TYPE0": self.type0, "TYPE1": self.type1, "OPERATION": self.operation } 83*35238bceSAndroid Build Coastguard Worker return fillTemplate(INVALID_IMPLICIT_CONVESION_TEMPLATE0, params0) + '\n' + fillTemplate(INVALID_IMPLICIT_CONVESION_TEMPLATE1, params1) 84*35238bceSAndroid Build Coastguard Worker 85*35238bceSAndroid Build Coastguard Workerdef createCase(operation, type0, type1): 86*35238bceSAndroid Build Coastguard Worker cases = [] 87*35238bceSAndroid Build Coastguard Worker for t0 in type0: 88*35238bceSAndroid Build Coastguard Worker for t1 in type1: 89*35238bceSAndroid Build Coastguard Worker case = InvalidImplicitConversionCase(operation, t0, t1) 90*35238bceSAndroid Build Coastguard Worker cases.append(case) 91*35238bceSAndroid Build Coastguard Worker return cases 92*35238bceSAndroid Build Coastguard Worker 93*35238bceSAndroid Build Coastguard Workerfloats = ['float', 'vec2', 'vec3', 'vec4'] 94*35238bceSAndroid Build Coastguard Workersintegers = ['int', 'ivec2', 'ivec3', 'ivec4'] 95*35238bceSAndroid Build Coastguard Workercases = [] 96*35238bceSAndroid Build Coastguard Workerfor op in arithOperations: 97*35238bceSAndroid Build Coastguard Worker caseFpInt = createCase(op, floats, sintegers) 98*35238bceSAndroid Build Coastguard Worker cases = cases + caseFpInt 99*35238bceSAndroid Build Coastguard Worker 100*35238bceSAndroid Build Coastguard WorkerinvalidImplicitConversionCases = [ 101*35238bceSAndroid Build Coastguard Worker CaseGroup("invalid_implicit_conversions", "Invalid Implicit Conversions", cases), 102*35238bceSAndroid Build Coastguard Worker] 103*35238bceSAndroid Build Coastguard Worker 104*35238bceSAndroid Build Coastguard Workerif __name__ == "__main__": 105*35238bceSAndroid Build Coastguard Worker print("Generating shader case files.") 106*35238bceSAndroid Build Coastguard Worker writeAllCases("invalid_implicit_conversions.test", invalidImplicitConversionCases) 107