xref: /aosp_15_r20/external/deqp/scripts/egl/common.py (revision 35238bce31c2a825756842865a792f8cf7f89930)
1# -*- coding: utf-8 -*-
2
3#-------------------------------------------------------------------------
4# drawElements Quality Program utilities
5# --------------------------------------
6#
7# Copyright 2015-2017 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 re
25import sys
26
27def registerPaths():
28    sys.path.append(os.path.dirname(os.path.dirname(__file__)))
29
30registerPaths()
31
32import khr_util.format
33import khr_util.registry
34import khr_util.registry_cache
35
36SCRIPTS_DIR = os.path.dirname(__file__)
37EGL_DIR = os.path.normpath(os.path.join(SCRIPTS_DIR, "..", "..", "framework", "egl"))
38EGL_WRAPPER_DIR = os.path.normpath(os.path.join(EGL_DIR, "wrapper"))
39
40EGL_SOURCE = khr_util.registry_cache.RegistrySource(
41                        "https://raw.githubusercontent.com/KhronosGroup/EGL-Registry",
42                        "api/egl.xml",
43                        "6550e9b12e0b4f11182bda30ae2a8dd56d0b02c8",
44                        "cb965fcee1335723beb11e2e174a5cf69d2f896e459cc25be8074356eb59871c")
45
46VERSION = '1.5'
47
48EXTENSIONS = [
49    # \todo [2014-12-05 pyry] Use 1.5 core functions/enums instead
50    "EGL_KHR_create_context",
51    "EGL_KHR_create_context_no_error",
52    "EGL_KHR_lock_surface",
53    "EGL_KHR_image_base",
54    "EGL_KHR_fence_sync",
55    "EGL_KHR_reusable_sync",
56    "EGL_KHR_wait_sync",
57    "EGL_KHR_gl_texture_2D_image",
58    "EGL_KHR_gl_texture_cubemap_image",
59    "EGL_KHR_gl_renderbuffer_image",
60    "EGL_KHR_gl_texture_3D_image",
61    "EGL_EXT_create_context_robustness",
62    "EGL_EXT_platform_base",
63    "EGL_EXT_platform_x11",
64    "EGL_KHR_platform_wayland",
65    "EGL_ANDROID_image_native_buffer",
66    "EGL_EXT_yuv_surface",
67    "EGL_EXT_buffer_age",
68    "EGL_KHR_partial_update",
69    "EGL_KHR_swap_buffers_with_damage",
70    "EGL_KHR_mutable_render_buffer",
71    "EGL_EXT_pixel_format_float",
72    "EGL_KHR_gl_colorspace",
73    "EGL_EXT_gl_colorspace_bt2020_linear",
74    "EGL_EXT_gl_colorspace_bt2020_pq",
75    "EGL_EXT_gl_colorspace_bt2020_hlg",
76    "EGL_EXT_gl_colorspace_display_p3",
77    "EGL_EXT_gl_colorspace_display_p3_linear",
78    "EGL_EXT_gl_colorspace_display_p3_passthrough",
79    "EGL_EXT_gl_colorspace_scrgb",
80    "EGL_EXT_gl_colorspace_scrgb_linear",
81    "EGL_EXT_surface_SMPTE2086_metadata",
82    "EGL_EXT_surface_CTA861_3_metadata",
83    "EGL_ANDROID_recordable"
84]
85PROTECTS = [
86    "KHRONOS_SUPPORT_INT64"
87]
88
89def getEGLRegistry ():
90    return khr_util.registry_cache.getRegistry(EGL_SOURCE)
91
92def getInterface (registry, api, version=None, profile=None, **kwargs):
93    spec = khr_util.registry.spec(registry, api, version, profile, **kwargs)
94    return khr_util.registry.createInterface(registry, spec, api)
95
96def getDefaultInterface ():
97    return getInterface(getEGLRegistry(), 'egl', VERSION, extensionNames = EXTENSIONS, protects = PROTECTS)
98
99def getFunctionTypeName (funcName):
100    return "%sFunc" % funcName
101
102def getFunctionMemberName (funcName):
103    assert funcName[:3] == "egl"
104    return "%c%s" % (funcName[3].lower(), funcName[4:])
105
106def genCommandList (iface, renderCommand, directory, filename, align=False):
107    lines = map(renderCommand, iface.commands)
108    if align:
109        lines = khr_util.format.indentLines(lines)
110    writeInlFile(os.path.join(directory, filename), lines)
111
112def getVersionToken (version):
113    return version.replace(".", "")
114
115def genCommandLists (registry, renderCommand, check, directory, filePattern, align=False):
116    for eFeature in registry.features:
117        api = eFeature.get('api')
118        version = eFeature.get('number')
119        profile = check(api, version)
120        if profile is True:
121            profile = None
122        elif profile is False:
123            continue
124        iface = getInterface(registry, api, version=version, profile=profile)
125        filename = filePattern % getVersionToken(version)
126        genCommandList(iface, renderCommand, directory, filename, align)
127
128INL_HEADER = khr_util.format.genInlHeader("Khronos EGL API description (egl.xml)", EGL_SOURCE.getRevision())
129
130def writeInlFile (filename, source):
131    khr_util.format.writeInlFile(filename, INL_HEADER, source)
132