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