# -*- coding: utf-8 -*- #------------------------------------------------------------------------- # drawElements Quality Program utilities # -------------------------------------- # # Copyright 2015 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # #------------------------------------------------------------------------- from egl.common import * from khr_util.format import indentLines, commandParams, commandArgs import khr_util.registry from itertools import chain try: from itertools import imap except ImportError: imap=map def virtualMemberDecl (command): return "virtual %s\t%s\t(%s) const\t= 0;" % ( command.type, getFunctionMemberName(command.name), commandParams(command)) def concreteMemberDecl (command): return "%s\t%s\t(%s) const;" % ( command.type, getFunctionMemberName(command.name), commandParams(command)) def memberImpl (command): template = """ {returnType} FuncPtrLibrary::{memberName} ({paramDecls}) const {{ {maybeReturn}m_egl.{memberName}({arguments}); }}""" return template.format( returnType = command.type, mangledName = getFunctionMemberName(command.name), paramDecls = commandParams(command), maybeReturn = "return " if command.type != 'void' else "", memberName = getFunctionMemberName(command.name), arguments = commandArgs(command)) def initFunctionEntry (command): return "dst->%s\t= (%sFunc)\tloader->get(\"%s\");" % ( getFunctionMemberName(command.name), command.name, command.name) def getExtOnlyIface (registry, api, extensions): spec = khr_util.registry.InterfaceSpec() for extension in registry.extensions: if not khr_util.registry.getExtensionName(extension) in extensions: continue if not khr_util.registry.extensionSupports(extension, api): continue spec.addExtension(extension, api) return khr_util.registry.createInterface(registry, spec, api) def commandLibraryEntry (command): return "\t{ \"%s\",\t(deFunctionPtr)%s }," % (command.name, command.name) def genStaticLibrary (registry): genCommandLists(registry, commandLibraryEntry, check = lambda api, version: api == 'egl' and version in set(["1.4", "1.5"]), directory = EGL_WRAPPER_DIR, filePattern = "eglwStaticLibrary%s.inl", align = True) def gen (registry): defaultIface = getDefaultInterface() noExtIface = getInterface(registry, 'egl', VERSION) extOnlyIface = getExtOnlyIface(registry, 'egl', EXTENSIONS) genCommandList(defaultIface, virtualMemberDecl, EGL_WRAPPER_DIR, "eglwLibrary.inl", True) genCommandList(defaultIface, concreteMemberDecl, EGL_WRAPPER_DIR, "eglwFuncPtrLibraryDecl.inl", True) genCommandList(defaultIface, memberImpl, EGL_WRAPPER_DIR, "eglwFuncPtrLibraryImpl.inl") genCommandList(noExtIface, initFunctionEntry, EGL_WRAPPER_DIR, "eglwInitCore.inl", True) genCommandList(extOnlyIface, initFunctionEntry, EGL_WRAPPER_DIR, "eglwInitExtensions.inl", True) genStaticLibrary(registry)