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 compile_fail 33e5c31af7Sopenharmony_ci values {} 34e5c31af7Sopenharmony_ci 35e5c31af7Sopenharmony_ci both "" 36e5c31af7Sopenharmony_ci precision mediump float; 37e5c31af7Sopenharmony_ci 38e5c31af7Sopenharmony_ci ${DECLARATIONS} 39e5c31af7Sopenharmony_ci 40e5c31af7Sopenharmony_ci void main() 41e5c31af7Sopenharmony_ci { 42e5c31af7Sopenharmony_ci ${SETUP} 43e5c31af7Sopenharmony_ci float ${{IDENTIFIER}} = 1.0; 44e5c31af7Sopenharmony_ci ${OUTPUT} 45e5c31af7Sopenharmony_ci } 46e5c31af7Sopenharmony_ci "" 47e5c31af7Sopenharmony_ciend 48e5c31af7Sopenharmony_ci"""[1:-1] 49e5c31af7Sopenharmony_ci 50e5c31af7Sopenharmony_ci# Classes 51e5c31af7Sopenharmony_ci 52e5c31af7Sopenharmony_ciclass IdentifierCase(ShaderCase): 53e5c31af7Sopenharmony_ci def __init__(self, name, identifier): 54e5c31af7Sopenharmony_ci self.name = name 55e5c31af7Sopenharmony_ci self.identifier = identifier 56e5c31af7Sopenharmony_ci 57e5c31af7Sopenharmony_ci def __str__(self): 58e5c31af7Sopenharmony_ci params = { "NAME" : self.name, 59e5c31af7Sopenharmony_ci "IDENTIFIER" : self.identifier } 60e5c31af7Sopenharmony_ci return fillTemplate(identifierCaseTemplate, params) 61e5c31af7Sopenharmony_ci 62e5c31af7Sopenharmony_ci 63e5c31af7Sopenharmony_ci# Declarations 64e5c31af7Sopenharmony_ci 65e5c31af7Sopenharmony_ciKEYWORDS = [ 66e5c31af7Sopenharmony_ci "attribute", "const", "uniform", "varying", "break", "continue", "do", "for", "while", 67e5c31af7Sopenharmony_ci "if", "else", "in", "out", "inout", "float", "int", "void", "bool", "true", "false", 68e5c31af7Sopenharmony_ci "lowp", "mediump", "highp", "precision", "invariant", "discard", "return", "mat2", "mat3", 69e5c31af7Sopenharmony_ci "mat4", "vec2", "vec3", "vec4", "ivec2", "ivec3", "ivec4", "bvec2", "bvec3", "bvec4", 70e5c31af7Sopenharmony_ci "sampler2D", "samplerCube", "struct" 71e5c31af7Sopenharmony_ci] 72e5c31af7Sopenharmony_ci 73e5c31af7Sopenharmony_ciRESERVED_KEYWORDS = [ 74e5c31af7Sopenharmony_ci "asm", "class", "union", "enum", "typedef", "template", "this", "packed", "goto", "switch", 75e5c31af7Sopenharmony_ci "default", "inline", "noinline", "volatile", "public", "static", "extern", "external", 76e5c31af7Sopenharmony_ci "interface", "flat", "long", "short", "double", "half", "fixed", "unsigned", "superp", 77e5c31af7Sopenharmony_ci "input", "output", "hvec2", "hvec3", "hvec4", "dvec2", "dvec3", "dvec4", "fvec2", "fvec3", 78e5c31af7Sopenharmony_ci "fvec4", "sampler1D", "sampler3D", "sampler1DShadow", "sampler2DShadow", "sampler2DRect", 79e5c31af7Sopenharmony_ci "sampler3DRect", "sampler2DRectShadow", "sizeof", "cast", "namespace", "using" 80e5c31af7Sopenharmony_ci] 81e5c31af7Sopenharmony_ci 82e5c31af7Sopenharmony_ciINVALID_IDENTIFIERS = [ 83e5c31af7Sopenharmony_ci ("two_underscores_begin", "__invalid"), 84e5c31af7Sopenharmony_ci ("two_underscores_middle", "in__valid"), 85e5c31af7Sopenharmony_ci ("two_underscores_end", "invalid__"), 86e5c31af7Sopenharmony_ci ("gl_begin", "gl_Invalid"), 87e5c31af7Sopenharmony_ci ("digit", "0123"), 88e5c31af7Sopenharmony_ci ("digit_begin", "0invalid") 89e5c31af7Sopenharmony_ci] 90e5c31af7Sopenharmony_ci 91e5c31af7Sopenharmony_ci# Keyword usage 92e5c31af7Sopenharmony_ci 93e5c31af7Sopenharmony_cikeywords = [] 94e5c31af7Sopenharmony_cireservedKeywords = [] 95e5c31af7Sopenharmony_ciinvalidIdentifiers = [] 96e5c31af7Sopenharmony_ci 97e5c31af7Sopenharmony_cifor keyword in KEYWORDS: 98e5c31af7Sopenharmony_ci keywords.append(IdentifierCase(keyword, keyword)) # Keywords 99e5c31af7Sopenharmony_ci 100e5c31af7Sopenharmony_cifor keyword in RESERVED_KEYWORDS: 101e5c31af7Sopenharmony_ci reservedKeywords.append(IdentifierCase(keyword, keyword)) # Reserved keywords 102e5c31af7Sopenharmony_ci 103e5c31af7Sopenharmony_cifor (name, identifier) in INVALID_IDENTIFIERS: 104e5c31af7Sopenharmony_ci invalidIdentifiers.append(IdentifierCase(name, identifier)) # Invalid identifiers 105e5c31af7Sopenharmony_ci 106e5c31af7Sopenharmony_cikeywordCases = [ 107e5c31af7Sopenharmony_ci CaseGroup("keywords", "Usage of keywords as identifiers.", keywords), 108e5c31af7Sopenharmony_ci CaseGroup("reserved_keywords", "Usage of reserved keywords as identifiers.", reservedKeywords), 109e5c31af7Sopenharmony_ci CaseGroup("invalid_identifiers", "Usage of invalid identifiers.", invalidIdentifiers) 110e5c31af7Sopenharmony_ci] 111e5c31af7Sopenharmony_ci 112e5c31af7Sopenharmony_ci# Main program 113e5c31af7Sopenharmony_ci 114e5c31af7Sopenharmony_ciif __name__ == "__main__": 115e5c31af7Sopenharmony_ci print("Generating shader case files.") 116e5c31af7Sopenharmony_ci writeAllCases("keywords.test", keywordCases) 117