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 os 24e5c31af7Sopenharmony_cifrom egl.common import * 25e5c31af7Sopenharmony_cifrom egl.enums import enumValue 26e5c31af7Sopenharmony_cifrom egl.library import getExtOnlyIface 27e5c31af7Sopenharmony_cifrom khr_util.format import indentLines 28e5c31af7Sopenharmony_cifrom itertools import chain 29e5c31af7Sopenharmony_ci 30e5c31af7Sopenharmony_citry: 31e5c31af7Sopenharmony_ci from itertools import imap 32e5c31af7Sopenharmony_ciexcept ImportError: 33e5c31af7Sopenharmony_ci imap=map 34e5c31af7Sopenharmony_ci 35e5c31af7Sopenharmony_cidef getMangledName (funcName): 36e5c31af7Sopenharmony_ci assert funcName[:3] == "egl" 37e5c31af7Sopenharmony_ci return "eglw" + funcName[3:] 38e5c31af7Sopenharmony_ci 39e5c31af7Sopenharmony_cidef commandAliasDefinition (command): 40e5c31af7Sopenharmony_ci return "#define\t%s\t%s" % (command.name, getMangledName(command.name)) 41e5c31af7Sopenharmony_ci 42e5c31af7Sopenharmony_cidef commandWrapperDeclaration (command): 43e5c31af7Sopenharmony_ci return "%s\t%s\t(%s);" % ( 44e5c31af7Sopenharmony_ci command.type, 45e5c31af7Sopenharmony_ci getMangledName(command.name), 46e5c31af7Sopenharmony_ci ", ".join([param.declaration for param in command.params])) 47e5c31af7Sopenharmony_ci 48e5c31af7Sopenharmony_ciNATIVE_TYPES = [ 49e5c31af7Sopenharmony_ci "EGLNativeWindowType", 50e5c31af7Sopenharmony_ci "EGLNativeDisplayType", 51e5c31af7Sopenharmony_ci "EGLNativePixmapType", 52e5c31af7Sopenharmony_ci] 53e5c31af7Sopenharmony_ci 54e5c31af7Sopenharmony_cidef commandWrapperDefinition (command): 55e5c31af7Sopenharmony_ci template = """ 56e5c31af7Sopenharmony_ci{returnType} {mangledName} ({paramDecls}) 57e5c31af7Sopenharmony_ci{{ 58e5c31af7Sopenharmony_ci const eglw::Library* egl = eglw::getCurrentThreadLibrary(); 59e5c31af7Sopenharmony_ci if (!egl) 60e5c31af7Sopenharmony_ci return{defaultReturn}; 61e5c31af7Sopenharmony_ci {maybeReturn}egl->{memberName}({arguments}); 62e5c31af7Sopenharmony_ci}}""" 63e5c31af7Sopenharmony_ci 64e5c31af7Sopenharmony_ci arguments = [] 65e5c31af7Sopenharmony_ci 66e5c31af7Sopenharmony_ci for param in command.params: 67e5c31af7Sopenharmony_ci if param.type in NATIVE_TYPES: 68e5c31af7Sopenharmony_ci arguments.append("(void*)" + param.name) 69e5c31af7Sopenharmony_ci else: 70e5c31af7Sopenharmony_ci arguments.append(param.name) 71e5c31af7Sopenharmony_ci 72e5c31af7Sopenharmony_ci return template.format( 73e5c31af7Sopenharmony_ci returnType = command.type, 74e5c31af7Sopenharmony_ci mangledName = "eglw" + command.name[3:], 75e5c31af7Sopenharmony_ci paramDecls = commandParams(command), 76e5c31af7Sopenharmony_ci defaultReturn = " " + getDefaultReturn(command) if command.type != 'void' else "", 77e5c31af7Sopenharmony_ci maybeReturn = "return " if command.type != 'void' else "", 78e5c31af7Sopenharmony_ci memberName = getFunctionMemberName(command.name), 79e5c31af7Sopenharmony_ci arguments = ", ".join(arguments)) 80e5c31af7Sopenharmony_ci 81e5c31af7Sopenharmony_cidef getDefaultReturn (command): 82e5c31af7Sopenharmony_ci if command.name == "glGetError": 83e5c31af7Sopenharmony_ci return "GL_INVALID_OPERATION" 84e5c31af7Sopenharmony_ci else: 85e5c31af7Sopenharmony_ci assert command.type != 'void' 86e5c31af7Sopenharmony_ci return "(%s)0" % command.type 87e5c31af7Sopenharmony_ci 88e5c31af7Sopenharmony_cicommandParams = khr_util.format.commandParams 89e5c31af7Sopenharmony_ci 90e5c31af7Sopenharmony_cidef enumDefinitionC (enum): 91e5c31af7Sopenharmony_ci return "#define %s\t%s" % (enum.name, enumValue(enum)) 92e5c31af7Sopenharmony_ci 93e5c31af7Sopenharmony_cidef gen (registry): 94e5c31af7Sopenharmony_ci noExtIface = getInterface(registry, 'egl', VERSION) 95e5c31af7Sopenharmony_ci extOnlyIface = getExtOnlyIface(registry, 'egl', EXTENSIONS) 96e5c31af7Sopenharmony_ci defaultIface = getDefaultInterface() 97e5c31af7Sopenharmony_ci defines = imap(commandAliasDefinition, defaultIface.commands) 98e5c31af7Sopenharmony_ci prototypes = imap(commandWrapperDeclaration, defaultIface.commands) 99e5c31af7Sopenharmony_ci src = indentLines(chain(defines, prototypes)) 100e5c31af7Sopenharmony_ci 101e5c31af7Sopenharmony_ci writeInlFile(os.path.join(EGL_WRAPPER_DIR, "eglwApi.inl"), src) 102e5c31af7Sopenharmony_ci writeInlFile(os.path.join(EGL_WRAPPER_DIR, "eglwEnumsC.inl"), indentLines(map(enumDefinitionC, defaultIface.enums))) 103e5c31af7Sopenharmony_ci genCommandList(noExtIface, commandWrapperDefinition, EGL_WRAPPER_DIR, "eglwImpl.inl") 104e5c31af7Sopenharmony_ci genCommandList(extOnlyIface, commandWrapperDefinition, EGL_WRAPPER_DIR, "eglwImplExt.inl") 105e5c31af7Sopenharmony_ci 106