xref: /aosp_15_r20/external/deqp/scripts/egl/proc_address_tests.py (revision 35238bce31c2a825756842865a792f8cf7f89930)
1# -*- coding: utf-8 -*-
2
3#-------------------------------------------------------------------------
4# drawElements Quality Program utilities
5# --------------------------------------
6#
7# Copyright 2015 The Android Open Source Project
8#
9# Licensed under the Apache License, Version 2.0 (the "License");
10# you may not use this file except in compliance with the License.
11# You may obtain a copy of the License at
12#
13#      http://www.apache.org/licenses/LICENSE-2.0
14#
15# Unless required by applicable law or agreed to in writing, software
16# distributed under the License is distributed on an "AS IS" BASIS,
17# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18# See the License for the specific language governing permissions and
19# limitations under the License.
20#
21#-------------------------------------------------------------------------
22
23import os
24import string
25
26from egl.common import *
27from opengl.src_util import getGLRegistry
28from itertools import chain
29
30import khr_util.registry
31from khr_util.format import indentLines
32
33def toCamelCase (extName):
34    return "".join([x.title() for x in extName.split("_")])
35
36def makeStringList (name, strings):
37    yield ""
38    yield "static const char* s_%s[] =" % name
39    yield "{"
40
41    for entry in strings:
42        yield "\t\"%s\"," % (entry)
43
44    yield "};"
45
46def makeFunctionList (name, iface):
47    return makeStringList(name, [command.name for command in iface.commands])
48
49def makeExtensionList (extensions):
50    for name, iface in extensions:
51        for line in makeFunctionList(name, iface):
52            yield line
53
54    yield ""
55    yield "static const struct"
56    yield "{"
57    yield "\tconst char*\t\t\tname;"
58    yield "\tconst int\t\t\tnumFunctions;"
59    yield "\tconst char* const*\tfunctions;"
60    yield "} s_extensions[] ="
61    yield "{"
62
63    entries = []
64    for name, iface in extensions:
65        entries.append("\t{ \"%s\",\tDE_LENGTH_OF_ARRAY(s_%s),\ts_%s\t}," % (name, name, name))
66
67    for line in indentLines(entries):
68        yield line
69
70    yield "};"
71
72def getExtensionList (registry, api):
73    exts = []
74
75    for extension in registry.extensions:
76        if not khr_util.registry.extensionSupports(extension, api):
77            continue
78
79        spec = khr_util.registry.InterfaceSpec()
80        spec.addExtension(extension, api)
81        iface = khr_util.registry.createInterface(registry, spec, api)
82
83        if len(iface.commands) == 0:
84            continue
85
86        exts.append((khr_util.registry.getExtensionName(extension),
87                     iface))
88
89    return exts
90
91def uniqueExtensions (extensions):
92    res = []
93    seen = set()
94
95    for name, iface in extensions:
96        if not name in seen:
97            res.append((name, iface))
98            seen.add(name)
99
100    return res
101
102def getInterfaceExactVersion (registry, api, version):
103    spec = khr_util.registry.InterfaceSpec()
104
105    def check (v): return v == version
106
107    for feature in registry.getFeatures(api, check):
108        spec.addFeature(feature, api)
109
110    return khr_util.registry.createInterface(registry, spec, api)
111
112def gen ():
113    eglRegistry = getEGLRegistry()
114    eglCoreIface = getInterface(eglRegistry, 'egl', '1.4')
115    egl15Iface = getInterfaceExactVersion(eglRegistry, 'egl', '1.5')
116    eglExtensions = getExtensionList(eglRegistry, 'egl')
117
118    glRegistry = getGLRegistry()
119    gles1Extensions = getExtensionList(glRegistry, 'gles1')
120    gles2Extensions = getExtensionList(glRegistry, 'gles2')
121    gles10CoreIface = getInterface(glRegistry, 'gles1', '1.0')
122    gles20CoreIface = getInterface(glRegistry, 'gles2', '2.0')
123    gles30CoreIface = getInterfaceExactVersion(glRegistry, 'gles2', '3.0')
124#    gles31CoreIface = getInterfaceExactVersion(glRegistry, 'gles2', '3.1')
125
126    allExtensions = eglExtensions + uniqueExtensions(gles1Extensions + gles2Extensions)
127
128    writeInlFile(os.path.normpath(os.path.join(SCRIPTS_DIR, "..", "..", "modules", "egl", "teglGetProcAddressTests.inl")),
129                 chain(makeFunctionList        ("EGL14", eglCoreIface),
130                       makeFunctionList        ("EGL15", egl15Iface),
131                       makeFunctionList        ("GLES10", gles10CoreIface),
132                       makeFunctionList        ("GLES20", gles20CoreIface),
133                       makeFunctionList        ("GLES30", gles30CoreIface),
134#                       makeFunctionList        ("GLES31", gles31CoreIface),
135                       makeExtensionList    (allExtensions)))
136