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 version 300 es 33*35238bceSAndroid Build Coastguard Worker 34*35238bceSAndroid Build Coastguard Worker both "" 35*35238bceSAndroid Build Coastguard Worker #version 300 es 36*35238bceSAndroid Build Coastguard Worker precision mediump float; 37*35238bceSAndroid Build Coastguard Worker precision mediump int; 38*35238bceSAndroid Build Coastguard Worker 39*35238bceSAndroid Build Coastguard Worker ${DECLARATIONS} 40*35238bceSAndroid Build Coastguard Worker 41*35238bceSAndroid Build Coastguard Worker void main() 42*35238bceSAndroid Build Coastguard Worker { 43*35238bceSAndroid Build Coastguard Worker ${{TYPE0}} c; 44*35238bceSAndroid Build Coastguard Worker ${{TYPE0}} a; 45*35238bceSAndroid Build Coastguard Worker ${{TYPE1}} b; 46*35238bceSAndroid Build Coastguard Worker ${{TYPE0}} c = a ${{OPERATION}} b; 47*35238bceSAndroid Build Coastguard Worker } 48*35238bceSAndroid Build Coastguard Worker "" 49*35238bceSAndroid Build Coastguard Workerend 50*35238bceSAndroid Build Coastguard Worker"""[1:-1] 51*35238bceSAndroid Build Coastguard Worker 52*35238bceSAndroid Build Coastguard WorkerINVALID_IMPLICIT_CONVESION_TEMPLATE1 = """ 53*35238bceSAndroid Build Coastguard Workercase ${{NAME}} 54*35238bceSAndroid Build Coastguard Worker expect compile_fail 55*35238bceSAndroid Build Coastguard Worker version 300 es 56*35238bceSAndroid Build Coastguard Worker 57*35238bceSAndroid Build Coastguard Worker both "" 58*35238bceSAndroid Build Coastguard Worker #version 300 es 59*35238bceSAndroid Build Coastguard Worker precision mediump float; 60*35238bceSAndroid Build Coastguard Worker precision mediump int; 61*35238bceSAndroid Build Coastguard Worker 62*35238bceSAndroid Build Coastguard Worker ${DECLARATIONS} 63*35238bceSAndroid Build Coastguard Worker 64*35238bceSAndroid Build Coastguard Worker void main() 65*35238bceSAndroid Build Coastguard Worker { 66*35238bceSAndroid Build Coastguard Worker ${{TYPE1}} c; 67*35238bceSAndroid Build Coastguard Worker ${{TYPE0}} a; 68*35238bceSAndroid Build Coastguard Worker ${{TYPE1}} b; 69*35238bceSAndroid Build Coastguard Worker ${{TYPE1}} c = a ${{OPERATION}} b; 70*35238bceSAndroid Build Coastguard Worker } 71*35238bceSAndroid Build Coastguard Worker "" 72*35238bceSAndroid Build Coastguard Workerend 73*35238bceSAndroid Build Coastguard Worker"""[1:-1] 74*35238bceSAndroid Build Coastguard Worker 75*35238bceSAndroid Build Coastguard WorkerarithOperations = {'+': 'add', '*':'mul', '/': 'div', '-':'sub'} 76*35238bceSAndroid Build Coastguard Worker 77*35238bceSAndroid Build Coastguard Workerclass InvalidImplicitConversionCase(ShaderCase): 78*35238bceSAndroid Build Coastguard Worker def __init__(self, operation, type0, type1): 79*35238bceSAndroid Build Coastguard Worker self.name = arithOperations[operation] + '_' + type0 + '_' + type1 80*35238bceSAndroid Build Coastguard Worker self.operation = operation 81*35238bceSAndroid Build Coastguard Worker self.type0 = type0 82*35238bceSAndroid Build Coastguard Worker self.type1 = type1 83*35238bceSAndroid Build Coastguard Worker 84*35238bceSAndroid Build Coastguard Worker def __str__(self): 85*35238bceSAndroid Build Coastguard Worker 86*35238bceSAndroid Build Coastguard Worker params0 = { "NAME": self.name + '_' + self.type0, "TYPE0": self.type0, "TYPE1": self.type1, "OPERATION": self.operation } 87*35238bceSAndroid Build Coastguard Worker params1 = { "NAME": self.name + '_' + self.type1, "TYPE0": self.type0, "TYPE1": self.type1, "OPERATION": self.operation } 88*35238bceSAndroid Build Coastguard Worker return fillTemplate(INVALID_IMPLICIT_CONVESION_TEMPLATE0, params0) + '\n' + fillTemplate(INVALID_IMPLICIT_CONVESION_TEMPLATE1, params1) 89*35238bceSAndroid Build Coastguard Worker 90*35238bceSAndroid Build Coastguard Workerdef createCase(operation, type0, type1): 91*35238bceSAndroid Build Coastguard Worker cases = [] 92*35238bceSAndroid Build Coastguard Worker for t0 in type0: 93*35238bceSAndroid Build Coastguard Worker for t1 in type1: 94*35238bceSAndroid Build Coastguard Worker case = InvalidImplicitConversionCase(operation, t0, t1) 95*35238bceSAndroid Build Coastguard Worker cases.append(case) 96*35238bceSAndroid Build Coastguard Worker return cases 97*35238bceSAndroid Build Coastguard Worker 98*35238bceSAndroid Build Coastguard Workerfloats = ['float', 'vec2', 'vec3', 'vec4'] 99*35238bceSAndroid Build Coastguard Workersintegers = ['int', 'ivec2', 'ivec3', 'ivec4'] 100*35238bceSAndroid Build Coastguard Workeruintegers = ['uint', 'uvec2', 'uvec3', 'uvec4'] 101*35238bceSAndroid Build Coastguard Workercases = [] 102*35238bceSAndroid Build Coastguard Workerfor op in arithOperations: 103*35238bceSAndroid Build Coastguard Worker caseFpInt = createCase(op, floats, sintegers) 104*35238bceSAndroid Build Coastguard Worker cases = cases + caseFpInt 105*35238bceSAndroid Build Coastguard Worker caseFpUint = createCase(op, floats, uintegers) 106*35238bceSAndroid Build Coastguard Worker cases = cases + caseFpUint 107*35238bceSAndroid Build Coastguard Worker caseIntUint = createCase(op, sintegers, uintegers) 108*35238bceSAndroid Build Coastguard Worker cases = cases + caseIntUint 109*35238bceSAndroid Build Coastguard Worker 110*35238bceSAndroid Build Coastguard WorkerinvalidImplicitConversionCases = [ 111*35238bceSAndroid Build Coastguard Worker CaseGroup("invalid_implicit_conversions", "Invalid Implicit Conversions", cases), 112*35238bceSAndroid Build Coastguard Worker] 113*35238bceSAndroid Build Coastguard Worker 114*35238bceSAndroid Build Coastguard Workerif __name__ == "__main__": 115*35238bceSAndroid Build Coastguard Worker print("Generating shader case files.") 116*35238bceSAndroid Build Coastguard Worker writeAllCases("invalid_implicit_conversions.test", invalidImplicitConversionCases) 117