• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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						"13a26984991216cbf9a44fbf390f95dc05b5493a",
44						"1c59e6b6b89d2b9047a8f5c680a6bb240b8048700ce91cefa0e870798da4f3db")
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_lock_surface",
52	"EGL_KHR_image_base",
53	"EGL_KHR_fence_sync",
54	"EGL_KHR_reusable_sync",
55	"EGL_KHR_wait_sync",
56	"EGL_KHR_gl_texture_2D_image",
57	"EGL_KHR_gl_texture_cubemap_image",
58	"EGL_KHR_gl_renderbuffer_image",
59	"EGL_KHR_gl_texture_3D_image",
60	"EGL_EXT_create_context_robustness",
61	"EGL_EXT_platform_base",
62	"EGL_EXT_platform_x11",
63	"EGL_KHR_platform_wayland",
64	"EGL_ANDROID_image_native_buffer",
65	"EGL_EXT_yuv_surface",
66	"EGL_EXT_buffer_age",
67	"EGL_KHR_partial_update",
68	"EGL_KHR_swap_buffers_with_damage",
69	"EGL_KHR_mutable_render_buffer",
70	"EGL_EXT_pixel_format_float",
71	"EGL_KHR_gl_colorspace",
72	"EGL_EXT_gl_colorspace_bt2020_linear",
73	"EGL_EXT_gl_colorspace_bt2020_pq",
74	"EGL_EXT_gl_colorspace_display_p3",
75	"EGL_EXT_gl_colorspace_display_p3_linear",
76	"EGL_EXT_gl_colorspace_scrgb",
77	"EGL_EXT_gl_colorspace_scrgb_linear"
78]
79PROTECTS			= [
80	"KHRONOS_SUPPORT_INT64"
81]
82
83def getEGLRegistry ():
84	return khr_util.registry_cache.getRegistry(EGL_SOURCE)
85
86def getInterface (registry, api, version=None, profile=None, **kwargs):
87	spec = khr_util.registry.spec(registry, api, version, profile, **kwargs)
88	return khr_util.registry.createInterface(registry, spec, api)
89
90def getDefaultInterface ():
91	return getInterface(getEGLRegistry(), 'egl', VERSION, extensionNames = EXTENSIONS, protects = PROTECTS)
92
93def getFunctionTypeName (funcName):
94	return "%sFunc" % funcName
95
96def getFunctionMemberName (funcName):
97	assert funcName[:3] == "egl"
98	return "%c%s" % (funcName[3].lower(), funcName[4:])
99
100def genCommandList (iface, renderCommand, directory, filename, align=False):
101	lines = map(renderCommand, iface.commands)
102	if align:
103		lines = khr_util.format.indentLines(lines)
104	writeInlFile(os.path.join(directory, filename), lines)
105
106def getVersionToken (version):
107	return version.replace(".", "")
108
109def genCommandLists (registry, renderCommand, check, directory, filePattern, align=False):
110	for eFeature in registry.features:
111		api			= eFeature.get('api')
112		version		= eFeature.get('number')
113		profile		= check(api, version)
114		if profile is True:
115			profile = None
116		elif profile is False:
117			continue
118		iface		= getInterface(registry, api, version=version, profile=profile)
119		filename	= filePattern % getVersionToken(version)
120		genCommandList(iface, renderCommand, directory, filename, align)
121
122INL_HEADER = khr_util.format.genInlHeader("Khronos EGL API description (egl.xml)", EGL_SOURCE.getRevision())
123
124def writeInlFile (filename, source):
125	khr_util.format.writeInlFile(filename, INL_HEADER, source)
126