1*35238bceSAndroid Build Coastguard Worker# -*- coding: utf-8 -*- 2*35238bceSAndroid Build Coastguard Worker 3*35238bceSAndroid Build Coastguard Worker#------------------------------------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker# drawElements Quality Program utilities 5*35238bceSAndroid Build Coastguard Worker# -------------------------------------- 6*35238bceSAndroid Build Coastguard Worker# 7*35238bceSAndroid Build Coastguard Worker# Copyright 2015 The Android Open Source Project 8*35238bceSAndroid Build Coastguard Worker# 9*35238bceSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 10*35238bceSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 11*35238bceSAndroid Build Coastguard Worker# You may obtain a copy of the License at 12*35238bceSAndroid Build Coastguard Worker# 13*35238bceSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 14*35238bceSAndroid Build Coastguard Worker# 15*35238bceSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 16*35238bceSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 17*35238bceSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18*35238bceSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 19*35238bceSAndroid Build Coastguard Worker# limitations under the License. 20*35238bceSAndroid Build Coastguard Worker# 21*35238bceSAndroid Build Coastguard Worker#------------------------------------------------------------------------- 22*35238bceSAndroid Build Coastguard Worker 23*35238bceSAndroid Build Coastguard Workerimport os 24*35238bceSAndroid Build Coastguard Workerimport string 25*35238bceSAndroid Build Coastguard Worker 26*35238bceSAndroid Build Coastguard Workerfrom egl.common import * 27*35238bceSAndroid Build Coastguard Workerfrom opengl.src_util import getGLRegistry 28*35238bceSAndroid Build Coastguard Workerfrom itertools import chain 29*35238bceSAndroid Build Coastguard Worker 30*35238bceSAndroid Build Coastguard Workerimport khr_util.registry 31*35238bceSAndroid Build Coastguard Workerfrom khr_util.format import indentLines 32*35238bceSAndroid Build Coastguard Worker 33*35238bceSAndroid Build Coastguard Workerdef toCamelCase (extName): 34*35238bceSAndroid Build Coastguard Worker return "".join([x.title() for x in extName.split("_")]) 35*35238bceSAndroid Build Coastguard Worker 36*35238bceSAndroid Build Coastguard Workerdef makeStringList (name, strings): 37*35238bceSAndroid Build Coastguard Worker yield "" 38*35238bceSAndroid Build Coastguard Worker yield "static const char* s_%s[] =" % name 39*35238bceSAndroid Build Coastguard Worker yield "{" 40*35238bceSAndroid Build Coastguard Worker 41*35238bceSAndroid Build Coastguard Worker for entry in strings: 42*35238bceSAndroid Build Coastguard Worker yield "\t\"%s\"," % (entry) 43*35238bceSAndroid Build Coastguard Worker 44*35238bceSAndroid Build Coastguard Worker yield "};" 45*35238bceSAndroid Build Coastguard Worker 46*35238bceSAndroid Build Coastguard Workerdef makeFunctionList (name, iface): 47*35238bceSAndroid Build Coastguard Worker return makeStringList(name, [command.name for command in iface.commands]) 48*35238bceSAndroid Build Coastguard Worker 49*35238bceSAndroid Build Coastguard Workerdef makeExtensionList (extensions): 50*35238bceSAndroid Build Coastguard Worker for name, iface in extensions: 51*35238bceSAndroid Build Coastguard Worker for line in makeFunctionList(name, iface): 52*35238bceSAndroid Build Coastguard Worker yield line 53*35238bceSAndroid Build Coastguard Worker 54*35238bceSAndroid Build Coastguard Worker yield "" 55*35238bceSAndroid Build Coastguard Worker yield "static const struct" 56*35238bceSAndroid Build Coastguard Worker yield "{" 57*35238bceSAndroid Build Coastguard Worker yield "\tconst char*\t\t\tname;" 58*35238bceSAndroid Build Coastguard Worker yield "\tconst int\t\t\tnumFunctions;" 59*35238bceSAndroid Build Coastguard Worker yield "\tconst char* const*\tfunctions;" 60*35238bceSAndroid Build Coastguard Worker yield "} s_extensions[] =" 61*35238bceSAndroid Build Coastguard Worker yield "{" 62*35238bceSAndroid Build Coastguard Worker 63*35238bceSAndroid Build Coastguard Worker entries = [] 64*35238bceSAndroid Build Coastguard Worker for name, iface in extensions: 65*35238bceSAndroid Build Coastguard Worker entries.append("\t{ \"%s\",\tDE_LENGTH_OF_ARRAY(s_%s),\ts_%s\t}," % (name, name, name)) 66*35238bceSAndroid Build Coastguard Worker 67*35238bceSAndroid Build Coastguard Worker for line in indentLines(entries): 68*35238bceSAndroid Build Coastguard Worker yield line 69*35238bceSAndroid Build Coastguard Worker 70*35238bceSAndroid Build Coastguard Worker yield "};" 71*35238bceSAndroid Build Coastguard Worker 72*35238bceSAndroid Build Coastguard Workerdef getExtensionList (registry, api): 73*35238bceSAndroid Build Coastguard Worker exts = [] 74*35238bceSAndroid Build Coastguard Worker 75*35238bceSAndroid Build Coastguard Worker for extension in registry.extensions: 76*35238bceSAndroid Build Coastguard Worker if not khr_util.registry.extensionSupports(extension, api): 77*35238bceSAndroid Build Coastguard Worker continue 78*35238bceSAndroid Build Coastguard Worker 79*35238bceSAndroid Build Coastguard Worker spec = khr_util.registry.InterfaceSpec() 80*35238bceSAndroid Build Coastguard Worker spec.addExtension(extension, api) 81*35238bceSAndroid Build Coastguard Worker iface = khr_util.registry.createInterface(registry, spec, api) 82*35238bceSAndroid Build Coastguard Worker 83*35238bceSAndroid Build Coastguard Worker if len(iface.commands) == 0: 84*35238bceSAndroid Build Coastguard Worker continue 85*35238bceSAndroid Build Coastguard Worker 86*35238bceSAndroid Build Coastguard Worker exts.append((khr_util.registry.getExtensionName(extension), 87*35238bceSAndroid Build Coastguard Worker iface)) 88*35238bceSAndroid Build Coastguard Worker 89*35238bceSAndroid Build Coastguard Worker return exts 90*35238bceSAndroid Build Coastguard Worker 91*35238bceSAndroid Build Coastguard Workerdef uniqueExtensions (extensions): 92*35238bceSAndroid Build Coastguard Worker res = [] 93*35238bceSAndroid Build Coastguard Worker seen = set() 94*35238bceSAndroid Build Coastguard Worker 95*35238bceSAndroid Build Coastguard Worker for name, iface in extensions: 96*35238bceSAndroid Build Coastguard Worker if not name in seen: 97*35238bceSAndroid Build Coastguard Worker res.append((name, iface)) 98*35238bceSAndroid Build Coastguard Worker seen.add(name) 99*35238bceSAndroid Build Coastguard Worker 100*35238bceSAndroid Build Coastguard Worker return res 101*35238bceSAndroid Build Coastguard Worker 102*35238bceSAndroid Build Coastguard Workerdef getInterfaceExactVersion (registry, api, version): 103*35238bceSAndroid Build Coastguard Worker spec = khr_util.registry.InterfaceSpec() 104*35238bceSAndroid Build Coastguard Worker 105*35238bceSAndroid Build Coastguard Worker def check (v): return v == version 106*35238bceSAndroid Build Coastguard Worker 107*35238bceSAndroid Build Coastguard Worker for feature in registry.getFeatures(api, check): 108*35238bceSAndroid Build Coastguard Worker spec.addFeature(feature, api) 109*35238bceSAndroid Build Coastguard Worker 110*35238bceSAndroid Build Coastguard Worker return khr_util.registry.createInterface(registry, spec, api) 111*35238bceSAndroid Build Coastguard Worker 112*35238bceSAndroid Build Coastguard Workerdef gen (): 113*35238bceSAndroid Build Coastguard Worker eglRegistry = getEGLRegistry() 114*35238bceSAndroid Build Coastguard Worker eglCoreIface = getInterface(eglRegistry, 'egl', '1.4') 115*35238bceSAndroid Build Coastguard Worker egl15Iface = getInterfaceExactVersion(eglRegistry, 'egl', '1.5') 116*35238bceSAndroid Build Coastguard Worker eglExtensions = getExtensionList(eglRegistry, 'egl') 117*35238bceSAndroid Build Coastguard Worker 118*35238bceSAndroid Build Coastguard Worker glRegistry = getGLRegistry() 119*35238bceSAndroid Build Coastguard Worker gles1Extensions = getExtensionList(glRegistry, 'gles1') 120*35238bceSAndroid Build Coastguard Worker gles2Extensions = getExtensionList(glRegistry, 'gles2') 121*35238bceSAndroid Build Coastguard Worker gles10CoreIface = getInterface(glRegistry, 'gles1', '1.0') 122*35238bceSAndroid Build Coastguard Worker gles20CoreIface = getInterface(glRegistry, 'gles2', '2.0') 123*35238bceSAndroid Build Coastguard Worker gles30CoreIface = getInterfaceExactVersion(glRegistry, 'gles2', '3.0') 124*35238bceSAndroid Build Coastguard Worker# gles31CoreIface = getInterfaceExactVersion(glRegistry, 'gles2', '3.1') 125*35238bceSAndroid Build Coastguard Worker 126*35238bceSAndroid Build Coastguard Worker allExtensions = eglExtensions + uniqueExtensions(gles1Extensions + gles2Extensions) 127*35238bceSAndroid Build Coastguard Worker 128*35238bceSAndroid Build Coastguard Worker writeInlFile(os.path.normpath(os.path.join(SCRIPTS_DIR, "..", "..", "modules", "egl", "teglGetProcAddressTests.inl")), 129*35238bceSAndroid Build Coastguard Worker chain(makeFunctionList ("EGL14", eglCoreIface), 130*35238bceSAndroid Build Coastguard Worker makeFunctionList ("EGL15", egl15Iface), 131*35238bceSAndroid Build Coastguard Worker makeFunctionList ("GLES10", gles10CoreIface), 132*35238bceSAndroid Build Coastguard Worker makeFunctionList ("GLES20", gles20CoreIface), 133*35238bceSAndroid Build Coastguard Worker makeFunctionList ("GLES30", gles30CoreIface), 134*35238bceSAndroid Build Coastguard Worker# makeFunctionList ("GLES31", gles31CoreIface), 135*35238bceSAndroid Build Coastguard Worker makeExtensionList (allExtensions))) 136