xref: /aosp_15_r20/external/deqp/scripts/egl/gtf_wrapper.py (revision 35238bce31c2a825756842865a792f8cf7f89930)
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