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 2015 The Android Open Source Project 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 Workerfrom genutil import * 25*35238bceSAndroid Build Coastguard Worker 26*35238bceSAndroid Build Coastguard Worker# \todo [arttu 2012-12-20] Current set tests variable names only, add function names, structure names, and field selectors. 27*35238bceSAndroid Build Coastguard Worker 28*35238bceSAndroid Build Coastguard Worker# Templates 29*35238bceSAndroid Build Coastguard Worker 30*35238bceSAndroid Build Coastguard WorkeridentifierCaseTemplate = """ 31*35238bceSAndroid Build Coastguard Workercase ${{NAME}} 32*35238bceSAndroid Build Coastguard Worker ${{EXPECT}} 33*35238bceSAndroid Build Coastguard Worker values {} 34*35238bceSAndroid Build Coastguard Worker version 300 es 35*35238bceSAndroid Build Coastguard Worker 36*35238bceSAndroid Build Coastguard Worker both "" 37*35238bceSAndroid Build Coastguard Worker #version 300 es 38*35238bceSAndroid Build Coastguard Worker precision mediump float; 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 ${SETUP} 44*35238bceSAndroid Build Coastguard Worker float ${{IDENTIFIER}} = 1.0; 45*35238bceSAndroid Build Coastguard Worker ${OUTPUT} 46*35238bceSAndroid Build Coastguard Worker } 47*35238bceSAndroid Build Coastguard Worker "" 48*35238bceSAndroid Build Coastguard Workerend 49*35238bceSAndroid Build Coastguard Worker"""[1:-1] 50*35238bceSAndroid Build Coastguard Worker 51*35238bceSAndroid Build Coastguard Worker# Classes 52*35238bceSAndroid Build Coastguard Worker 53*35238bceSAndroid Build Coastguard Workerclass IdentifierCase(ShaderCase): 54*35238bceSAndroid Build Coastguard Worker def __init__(self, name, identifier, expectToCompile = True): 55*35238bceSAndroid Build Coastguard Worker self.name = name 56*35238bceSAndroid Build Coastguard Worker self.identifier = identifier 57*35238bceSAndroid Build Coastguard Worker self.expect = '' if expectToCompile else 'expect compile_fail' 58*35238bceSAndroid Build Coastguard Worker 59*35238bceSAndroid Build Coastguard Worker def __str__(self): 60*35238bceSAndroid Build Coastguard Worker params = { "NAME" : self.name, 61*35238bceSAndroid Build Coastguard Worker "IDENTIFIER" : self.identifier, 62*35238bceSAndroid Build Coastguard Worker "EXPECT" : self.expect } 63*35238bceSAndroid Build Coastguard Worker return fillTemplate(identifierCaseTemplate, params) 64*35238bceSAndroid Build Coastguard Worker 65*35238bceSAndroid Build Coastguard Worker# Declarations 66*35238bceSAndroid Build Coastguard Worker 67*35238bceSAndroid Build Coastguard WorkerKEYWORDS = [ 68*35238bceSAndroid Build Coastguard Worker "const", "uniform", "layout", "centroid", "flat", "smooth", "break", "continue", "do", 69*35238bceSAndroid Build Coastguard Worker "for", "while", "switch", "case", "default","if", "else", "in", "out", "inout", "float", 70*35238bceSAndroid Build Coastguard Worker "int", "void", "bool", "true", "false", "invariant", "discard", "return", "mat2", "mat3", 71*35238bceSAndroid Build Coastguard Worker "mat4", "mat2x2", "mat2x3", "mat2x4", "mat3x2", "mat3x3", "mat3x4", "mat4x2", "mat4x3", "mat4x4", 72*35238bceSAndroid Build Coastguard Worker "vec2", "vec3", "vec4", "ivec2", "ivec3", "ivec4", "bvec2", "bvec3", "bvec4", "uint", "uvec2", 73*35238bceSAndroid Build Coastguard Worker "uvec3", "uvec4", "lowp", "mediump", "highp", "precision", "sampler2D", "sampler3D", "samplerCube", 74*35238bceSAndroid Build Coastguard Worker "sampler2DShadow", "samplerCubeShadow", "sampler2DArray", "sampler2DArrayShadow", "isampler2D", 75*35238bceSAndroid Build Coastguard Worker "isampler3D", "isamplerCube", "isampler2DArray", "usampler2D", "usampler3D", "usamplerCube", 76*35238bceSAndroid Build Coastguard Worker "usampler2DArray", "struct" 77*35238bceSAndroid Build Coastguard Worker] 78*35238bceSAndroid Build Coastguard Worker 79*35238bceSAndroid Build Coastguard WorkerRESERVED_KEYWORDS = [ 80*35238bceSAndroid Build Coastguard Worker "attribute", "varying", "coherent", "restrict", "readonly", "writeonly", 81*35238bceSAndroid Build Coastguard Worker "resource", "atomic_uint", "noperspective", "patch", "sample", "subroutine", "common", 82*35238bceSAndroid Build Coastguard Worker "partition", "active", "asm", "class", "union", "enum", "typedef", "template", "this", 83*35238bceSAndroid Build Coastguard Worker "goto", "inline", "noinline", "volatile", "public", "static", "extern", "external", "interface", 84*35238bceSAndroid Build Coastguard Worker "long", "short", "double", "half", "fixed", "unsigned", "superp", "input", "output", 85*35238bceSAndroid Build Coastguard Worker "hvec2", "hvec3", "hvec4", "dvec2", "dvec3", "dvec4", "fvec2", "fvec3", "fvec4", "sampler3DRect", 86*35238bceSAndroid Build Coastguard Worker "filter", "image1D", "image2D", "image3D", "imageCube", "iimage1D", "iimage2D", "iimage3D", 87*35238bceSAndroid Build Coastguard Worker "iimageCube", "uimage1D", "uimage2D", "uimage3D", "uimageCube", "image1DArray", "image2DArray", 88*35238bceSAndroid Build Coastguard Worker "iimage1DArray", "iimage2DArray", "uimage1DArray", "uimage2DArray", 89*35238bceSAndroid Build Coastguard Worker "imageBuffer", "iimageBuffer", "uimageBuffer", 90*35238bceSAndroid Build Coastguard Worker "sampler1D", "sampler1DShadow", "sampler1DArray", "sampler1DArrayShadow", "isampler1D", 91*35238bceSAndroid Build Coastguard Worker "isampler1DArray", "usampler1D", "usampler1DArray", "sampler2DRect", "sampler2DRectShadow", 92*35238bceSAndroid Build Coastguard Worker "isampler2DRect", "usampler2DRect", "samplerBuffer", "isamplerBuffer", "usamplerBuffer", 93*35238bceSAndroid Build Coastguard Worker "sampler2DMS", "isampler2DMS", "usampler2DMS", "sampler2DMSArray", "isampler2DMSArray", 94*35238bceSAndroid Build Coastguard Worker "usampler2DMSArray", "sizeof", "cast", "namespace", "using" 95*35238bceSAndroid Build Coastguard Worker] 96*35238bceSAndroid Build Coastguard Worker 97*35238bceSAndroid Build Coastguard WorkerALLOWED_KEYWORDS = [ 98*35238bceSAndroid Build Coastguard Worker "image1DShadow", "image2DShadow", "image1DArrayShadow", "image2DArrayShadow" 99*35238bceSAndroid Build Coastguard Worker] 100*35238bceSAndroid Build Coastguard Worker 101*35238bceSAndroid Build Coastguard WorkerINVALID_IDENTIFIERS = [ 102*35238bceSAndroid Build Coastguard Worker ("gl_begin", "gl_Invalid"), 103*35238bceSAndroid Build Coastguard Worker ("digit", "0123"), 104*35238bceSAndroid Build Coastguard Worker ("digit_begin", "0invalid"), 105*35238bceSAndroid Build Coastguard Worker ("max_length", "abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdX"), 106*35238bceSAndroid Build Coastguard Worker] 107*35238bceSAndroid Build Coastguard Worker 108*35238bceSAndroid Build Coastguard Worker# Keyword usage 109*35238bceSAndroid Build Coastguard Worker 110*35238bceSAndroid Build Coastguard Workerkeywords = [] 111*35238bceSAndroid Build Coastguard WorkerreservedKeywords = [] 112*35238bceSAndroid Build Coastguard WorkerallowedKeywords = [] 113*35238bceSAndroid Build Coastguard WorkerinvalidIdentifiers = [] 114*35238bceSAndroid Build Coastguard Worker 115*35238bceSAndroid Build Coastguard Workerfor keyword in KEYWORDS: 116*35238bceSAndroid Build Coastguard Worker keywords.append(IdentifierCase(keyword, keyword, False)) # Keywords 117*35238bceSAndroid Build Coastguard Worker 118*35238bceSAndroid Build Coastguard Workerfor keyword in RESERVED_KEYWORDS: 119*35238bceSAndroid Build Coastguard Worker reservedKeywords.append(IdentifierCase(keyword, keyword, False)) # Reserved keywords 120*35238bceSAndroid Build Coastguard Worker 121*35238bceSAndroid Build Coastguard Workerfor keyword in ALLOWED_KEYWORDS: 122*35238bceSAndroid Build Coastguard Worker allowedKeywords.append(IdentifierCase(keyword, keyword, True)) # Allowed keywords 123*35238bceSAndroid Build Coastguard Worker 124*35238bceSAndroid Build Coastguard Workerfor (name, identifier) in INVALID_IDENTIFIERS: 125*35238bceSAndroid Build Coastguard Worker invalidIdentifiers.append(IdentifierCase(name, identifier, False)) # Invalid identifiers 126*35238bceSAndroid Build Coastguard Worker 127*35238bceSAndroid Build Coastguard WorkerkeywordCases = [ 128*35238bceSAndroid Build Coastguard Worker CaseGroup("keywords", "Usage of keywords as identifiers.", keywords), 129*35238bceSAndroid Build Coastguard Worker CaseGroup("reserved_keywords", "Usage of reserved keywords as identifiers.", reservedKeywords), 130*35238bceSAndroid Build Coastguard Worker CaseGroup("allowed_keywords", "Usage of allowed keywords as identifiers.", allowedKeywords), 131*35238bceSAndroid Build Coastguard Worker CaseGroup("invalid_identifiers", "Usage of invalid identifiers.", invalidIdentifiers) 132*35238bceSAndroid Build Coastguard Worker] 133*35238bceSAndroid Build Coastguard Worker 134*35238bceSAndroid Build Coastguard Worker# Main program 135*35238bceSAndroid Build Coastguard Worker 136*35238bceSAndroid Build Coastguard Workerif __name__ == "__main__": 137*35238bceSAndroid Build Coastguard Worker print("Generating shader case files.") 138*35238bceSAndroid Build Coastguard Worker writeAllCases("keywords.test", keywordCases) 139