• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 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	eglExtensions	= getExtensionList(eglRegistry, 'egl')
116
117	glRegistry		= getGLRegistry()
118	gles1Extensions	= getExtensionList(glRegistry, 'gles1')
119	gles2Extensions	= getExtensionList(glRegistry, 'gles2')
120	gles10CoreIface	= getInterface(glRegistry, 'gles1', '1.0')
121	gles20CoreIface	= getInterface(glRegistry, 'gles2', '2.0')
122	gles30CoreIface	= getInterfaceExactVersion(glRegistry, 'gles2', '3.0')
123#	gles31CoreIface	= getInterfaceExactVersion(glRegistry, 'gles2', '3.1')
124
125	allExtensions	= eglExtensions + uniqueExtensions(gles1Extensions + gles2Extensions)
126
127	writeInlFile(os.path.normpath(os.path.join(SCRIPTS_DIR, "..", "..", "modules", "egl", "teglGetProcAddressTests.inl")),
128				 chain(makeFunctionList		("EGL14",	eglCoreIface),
129					   makeFunctionList		("GLES10",	gles10CoreIface),
130					   makeFunctionList		("GLES20",	gles20CoreIface),
131					   makeFunctionList		("GLES30",	gles30CoreIface),
132#					   makeFunctionList		("GLES31",	gles31CoreIface),
133					   makeExtensionList	(allExtensions)))
134