xref: /aosp_15_r20/external/deqp/scripts/egl/proc_address_tests.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 Workerimport string
25*35238bceSAndroid Build Coastguard Worker
26*35238bceSAndroid Build Coastguard Workerfrom egl.common import *
27*35238bceSAndroid Build Coastguard Workerfrom opengl.src_util import getGLRegistry
28*35238bceSAndroid Build Coastguard Workerfrom itertools import chain
29*35238bceSAndroid Build Coastguard Worker
30*35238bceSAndroid Build Coastguard Workerimport khr_util.registry
31*35238bceSAndroid Build Coastguard Workerfrom khr_util.format import indentLines
32*35238bceSAndroid Build Coastguard Worker
33*35238bceSAndroid Build Coastguard Workerdef toCamelCase (extName):
34*35238bceSAndroid Build Coastguard Worker    return "".join([x.title() for x in extName.split("_")])
35*35238bceSAndroid Build Coastguard Worker
36*35238bceSAndroid Build Coastguard Workerdef makeStringList (name, strings):
37*35238bceSAndroid Build Coastguard Worker    yield ""
38*35238bceSAndroid Build Coastguard Worker    yield "static const char* s_%s[] =" % name
39*35238bceSAndroid Build Coastguard Worker    yield "{"
40*35238bceSAndroid Build Coastguard Worker
41*35238bceSAndroid Build Coastguard Worker    for entry in strings:
42*35238bceSAndroid Build Coastguard Worker        yield "\t\"%s\"," % (entry)
43*35238bceSAndroid Build Coastguard Worker
44*35238bceSAndroid Build Coastguard Worker    yield "};"
45*35238bceSAndroid Build Coastguard Worker
46*35238bceSAndroid Build Coastguard Workerdef makeFunctionList (name, iface):
47*35238bceSAndroid Build Coastguard Worker    return makeStringList(name, [command.name for command in iface.commands])
48*35238bceSAndroid Build Coastguard Worker
49*35238bceSAndroid Build Coastguard Workerdef makeExtensionList (extensions):
50*35238bceSAndroid Build Coastguard Worker    for name, iface in extensions:
51*35238bceSAndroid Build Coastguard Worker        for line in makeFunctionList(name, iface):
52*35238bceSAndroid Build Coastguard Worker            yield line
53*35238bceSAndroid Build Coastguard Worker
54*35238bceSAndroid Build Coastguard Worker    yield ""
55*35238bceSAndroid Build Coastguard Worker    yield "static const struct"
56*35238bceSAndroid Build Coastguard Worker    yield "{"
57*35238bceSAndroid Build Coastguard Worker    yield "\tconst char*\t\t\tname;"
58*35238bceSAndroid Build Coastguard Worker    yield "\tconst int\t\t\tnumFunctions;"
59*35238bceSAndroid Build Coastguard Worker    yield "\tconst char* const*\tfunctions;"
60*35238bceSAndroid Build Coastguard Worker    yield "} s_extensions[] ="
61*35238bceSAndroid Build Coastguard Worker    yield "{"
62*35238bceSAndroid Build Coastguard Worker
63*35238bceSAndroid Build Coastguard Worker    entries = []
64*35238bceSAndroid Build Coastguard Worker    for name, iface in extensions:
65*35238bceSAndroid Build Coastguard Worker        entries.append("\t{ \"%s\",\tDE_LENGTH_OF_ARRAY(s_%s),\ts_%s\t}," % (name, name, name))
66*35238bceSAndroid Build Coastguard Worker
67*35238bceSAndroid Build Coastguard Worker    for line in indentLines(entries):
68*35238bceSAndroid Build Coastguard Worker        yield line
69*35238bceSAndroid Build Coastguard Worker
70*35238bceSAndroid Build Coastguard Worker    yield "};"
71*35238bceSAndroid Build Coastguard Worker
72*35238bceSAndroid Build Coastguard Workerdef getExtensionList (registry, api):
73*35238bceSAndroid Build Coastguard Worker    exts = []
74*35238bceSAndroid Build Coastguard Worker
75*35238bceSAndroid Build Coastguard Worker    for extension in registry.extensions:
76*35238bceSAndroid Build Coastguard Worker        if not khr_util.registry.extensionSupports(extension, api):
77*35238bceSAndroid Build Coastguard Worker            continue
78*35238bceSAndroid Build Coastguard Worker
79*35238bceSAndroid Build Coastguard Worker        spec = khr_util.registry.InterfaceSpec()
80*35238bceSAndroid Build Coastguard Worker        spec.addExtension(extension, api)
81*35238bceSAndroid Build Coastguard Worker        iface = khr_util.registry.createInterface(registry, spec, api)
82*35238bceSAndroid Build Coastguard Worker
83*35238bceSAndroid Build Coastguard Worker        if len(iface.commands) == 0:
84*35238bceSAndroid Build Coastguard Worker            continue
85*35238bceSAndroid Build Coastguard Worker
86*35238bceSAndroid Build Coastguard Worker        exts.append((khr_util.registry.getExtensionName(extension),
87*35238bceSAndroid Build Coastguard Worker                     iface))
88*35238bceSAndroid Build Coastguard Worker
89*35238bceSAndroid Build Coastguard Worker    return exts
90*35238bceSAndroid Build Coastguard Worker
91*35238bceSAndroid Build Coastguard Workerdef uniqueExtensions (extensions):
92*35238bceSAndroid Build Coastguard Worker    res = []
93*35238bceSAndroid Build Coastguard Worker    seen = set()
94*35238bceSAndroid Build Coastguard Worker
95*35238bceSAndroid Build Coastguard Worker    for name, iface in extensions:
96*35238bceSAndroid Build Coastguard Worker        if not name in seen:
97*35238bceSAndroid Build Coastguard Worker            res.append((name, iface))
98*35238bceSAndroid Build Coastguard Worker            seen.add(name)
99*35238bceSAndroid Build Coastguard Worker
100*35238bceSAndroid Build Coastguard Worker    return res
101*35238bceSAndroid Build Coastguard Worker
102*35238bceSAndroid Build Coastguard Workerdef getInterfaceExactVersion (registry, api, version):
103*35238bceSAndroid Build Coastguard Worker    spec = khr_util.registry.InterfaceSpec()
104*35238bceSAndroid Build Coastguard Worker
105*35238bceSAndroid Build Coastguard Worker    def check (v): return v == version
106*35238bceSAndroid Build Coastguard Worker
107*35238bceSAndroid Build Coastguard Worker    for feature in registry.getFeatures(api, check):
108*35238bceSAndroid Build Coastguard Worker        spec.addFeature(feature, api)
109*35238bceSAndroid Build Coastguard Worker
110*35238bceSAndroid Build Coastguard Worker    return khr_util.registry.createInterface(registry, spec, api)
111*35238bceSAndroid Build Coastguard Worker
112*35238bceSAndroid Build Coastguard Workerdef gen ():
113*35238bceSAndroid Build Coastguard Worker    eglRegistry = getEGLRegistry()
114*35238bceSAndroid Build Coastguard Worker    eglCoreIface = getInterface(eglRegistry, 'egl', '1.4')
115*35238bceSAndroid Build Coastguard Worker    egl15Iface = getInterfaceExactVersion(eglRegistry, 'egl', '1.5')
116*35238bceSAndroid Build Coastguard Worker    eglExtensions = getExtensionList(eglRegistry, 'egl')
117*35238bceSAndroid Build Coastguard Worker
118*35238bceSAndroid Build Coastguard Worker    glRegistry = getGLRegistry()
119*35238bceSAndroid Build Coastguard Worker    gles1Extensions = getExtensionList(glRegistry, 'gles1')
120*35238bceSAndroid Build Coastguard Worker    gles2Extensions = getExtensionList(glRegistry, 'gles2')
121*35238bceSAndroid Build Coastguard Worker    gles10CoreIface = getInterface(glRegistry, 'gles1', '1.0')
122*35238bceSAndroid Build Coastguard Worker    gles20CoreIface = getInterface(glRegistry, 'gles2', '2.0')
123*35238bceSAndroid Build Coastguard Worker    gles30CoreIface = getInterfaceExactVersion(glRegistry, 'gles2', '3.0')
124*35238bceSAndroid Build Coastguard Worker#    gles31CoreIface = getInterfaceExactVersion(glRegistry, 'gles2', '3.1')
125*35238bceSAndroid Build Coastguard Worker
126*35238bceSAndroid Build Coastguard Worker    allExtensions = eglExtensions + uniqueExtensions(gles1Extensions + gles2Extensions)
127*35238bceSAndroid Build Coastguard Worker
128*35238bceSAndroid Build Coastguard Worker    writeInlFile(os.path.normpath(os.path.join(SCRIPTS_DIR, "..", "..", "modules", "egl", "teglGetProcAddressTests.inl")),
129*35238bceSAndroid Build Coastguard Worker                 chain(makeFunctionList        ("EGL14", eglCoreIface),
130*35238bceSAndroid Build Coastguard Worker                       makeFunctionList        ("EGL15", egl15Iface),
131*35238bceSAndroid Build Coastguard Worker                       makeFunctionList        ("GLES10", gles10CoreIface),
132*35238bceSAndroid Build Coastguard Worker                       makeFunctionList        ("GLES20", gles20CoreIface),
133*35238bceSAndroid Build Coastguard Worker                       makeFunctionList        ("GLES30", gles30CoreIface),
134*35238bceSAndroid Build Coastguard Worker#                       makeFunctionList        ("GLES31", gles31CoreIface),
135*35238bceSAndroid Build Coastguard Worker                       makeExtensionList    (allExtensions)))
136