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