11abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos# -*- coding: utf-8 -*- 21abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos 33c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry#------------------------------------------------------------------------- 43c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# drawElements Quality Program utilities 53c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# -------------------------------------- 63c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 73c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# Copyright 2015 The Android Open Source Project 83c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 93c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# Licensed under the Apache License, Version 2.0 (the "License"); 103c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# you may not use this file except in compliance with the License. 113c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# You may obtain a copy of the License at 123c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 133c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# http://www.apache.org/licenses/LICENSE-2.0 143c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 153c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# Unless required by applicable law or agreed to in writing, software 163c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# distributed under the License is distributed on an "AS IS" BASIS, 173c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 183c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# See the License for the specific language governing permissions and 193c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# limitations under the License. 203c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 213c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry#------------------------------------------------------------------------- 223c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry 231abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosimport os 241abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosfrom src_util import * 251abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosfrom itertools import imap, chain 261abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos 271abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosdef getMangledName (funcName): 281abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos assert funcName[:2] == "gl" 291abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos return "glw" + funcName[2:] 301abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos 311abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosdef commandAliasDefinition (command): 321abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos return "#define\t%s\t%s" % (command.name, getMangledName(command.name)) 331abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos 341abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosdef commandWrapperDeclaration (command): 351abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos return "%s\t%s\t(%s);" % ( 361abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos command.type, 371abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos getMangledName(command.name), 381abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos ", ".join([param.declaration for param in command.params])) 391abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos 401abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosdef genWrapperHeader (iface): 411abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos defines = imap(commandAliasDefinition, iface.commands) 421abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos prototypes = imap(commandWrapperDeclaration, iface.commands) 431abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos src = indentLines(chain(defines, prototypes)) 441abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos writeInlFile(os.path.join(OPENGL_INC_DIR, "glwApi.inl"), src) 451abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos 461abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosdef getDefaultReturn (command): 471abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos if command.name == "glGetError": 481abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos return "GL_INVALID_OPERATION" 491abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos else: 501abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos assert command.type != 'void' 511abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos return "(%s)0" % command.type 521abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos 531abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosdef commandWrapperDefinition (command): 541abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos template = """ 551abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos{returnType} {mangledName} ({paramDecls}) 561abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos{{ 571abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos const glw::Functions* gl = glw::getCurrentThreadFunctions(); 581abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos if (!gl) 591abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos return{defaultReturn}; 601abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos {maybeReturn}gl->{memberName}({arguments}); 611abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos}}""" 621abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos return template.format( 631abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos returnType = command.type, 641abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos mangledName = getMangledName(command.name), 651abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos paramDecls = commandParams(command), 661abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos defaultReturn = " " + getDefaultReturn(command) if command.type != 'void' else "", 671abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos maybeReturn = "return " if command.type != 'void' else "", 681abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos memberName = getFunctionMemberName(command.name), 691abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos arguments = commandArgs(command)) 701abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos 711abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosdef genWrapperImplementation (iface): 721abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos genCommandList(iface, commandWrapperDefinition, OPENGL_INC_DIR, "glwImpl.inl") 731abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos 741abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosdef genWrapper (iface): 751abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos genWrapperHeader(iface) 761abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos genWrapperImplementation(iface) 771abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos 781abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulosif __name__ == "__main__": 791abab607ca1c1b410881390f9ec47e6be04c207dPyry Haulos genWrapper(getHybridInterface()) 80