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