Merge vk-gl-cts/vulkan-cts-1.1.3 into vk-gl-cts/vulkan-cts-1.1.4
[platform/upstream/VK-GL-CTS.git] / scripts / egl / common.py
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
23 import os
24 import re
25 import sys
26
27 def registerPaths():
28         sys.path.append(os.path.dirname(os.path.dirname(__file__)))
29
30 registerPaths()
31
32 import khr_util.format
33 import khr_util.registry
34 import khr_util.registry_cache
35
36 SCRIPTS_DIR                     = os.path.dirname(__file__)
37 EGL_DIR                         = os.path.normpath(os.path.join(SCRIPTS_DIR, "..", "..", "framework", "egl"))
38 EGL_WRAPPER_DIR         = os.path.normpath(os.path.join(EGL_DIR, "wrapper"))
39
40 EGL_SOURCE                      = khr_util.registry_cache.RegistrySource(
41                                                 "https://raw.githubusercontent.com/KhronosGroup/EGL-Registry",
42                                                 "api/egl.xml",
43                                                 "3338ed0db494d6a4db7f76627b38f0b1892db096",
44                                                 "863db99411edfd83ba1d875fb0e13e021e155689d3eae5199a9b1ec969f368e9")
45
46 VERSION                         = '1.5'
47
48 EXTENSIONS                      = [
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_display_p3",
76         "EGL_EXT_gl_colorspace_display_p3_linear",
77         "EGL_EXT_gl_colorspace_display_p3_passthrough",
78         "EGL_EXT_gl_colorspace_scrgb",
79         "EGL_EXT_gl_colorspace_scrgb_linear",
80         "EGL_EXT_surface_SMPTE2086_metadata",
81         "EGL_EXT_surface_CTA861_3_metadata",
82         "EGL_EXT_gl_colorspace_bt2020_linear",
83         "EGL_EXT_gl_colorspace_bt2020_pq"
84 ]
85 PROTECTS                        = [
86         "KHRONOS_SUPPORT_INT64"
87 ]
88
89 def getEGLRegistry ():
90         return khr_util.registry_cache.getRegistry(EGL_SOURCE)
91
92 def 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
96 def getDefaultInterface ():
97         return getInterface(getEGLRegistry(), 'egl', VERSION, extensionNames = EXTENSIONS, protects = PROTECTS)
98
99 def getFunctionTypeName (funcName):
100         return "%sFunc" % funcName
101
102 def getFunctionMemberName (funcName):
103         assert funcName[:3] == "egl"
104         return "%c%s" % (funcName[3].lower(), funcName[4:])
105
106 def 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
112 def getVersionToken (version):
113         return version.replace(".", "")
114
115 def 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
128 INL_HEADER = khr_util.format.genInlHeader("Khronos EGL API description (egl.xml)", EGL_SOURCE.getRevision())
129
130 def writeInlFile (filename, source):
131         khr_util.format.writeInlFile(filename, INL_HEADER, source)