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 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 "egl.xml", 42 31042, 43 "f5a731f46958a7cb6a5a96c811086fbaede9cc078541a26de009228eb089ae2c") 44 45 VERSION = '1.5' 46 47 EXTENSIONS = [ 48 # \todo [2014-12-05 pyry] Use 1.5 core functions/enums instead 49 "EGL_KHR_create_context", 50 "EGL_KHR_lock_surface", 51 "EGL_KHR_image_base", 52 "EGL_KHR_fence_sync", 53 "EGL_KHR_reusable_sync", 54 "EGL_KHR_wait_sync", 55 "EGL_KHR_gl_texture_2D_image", 56 "EGL_KHR_gl_texture_cubemap_image", 57 "EGL_KHR_gl_renderbuffer_image", 58 "EGL_KHR_gl_texture_3D_image", 59 "EGL_EXT_create_context_robustness", 60 "EGL_EXT_platform_base", 61 "EGL_EXT_platform_x11", 62 "EGL_ANDROID_image_native_buffer", 63 "EGL_EXT_yuv_surface", 64 "EGL_EXT_buffer_age", 65 "EGL_KHR_partial_update", 66 "EGL_KHR_swap_buffers_with_damage" 67 ] 68 PROTECTS = [ 69 "KHRONOS_SUPPORT_INT64" 70 ] 71 72 def getEGLRegistry (): 73 return khr_util.registry_cache.getRegistry(EGL_SOURCE) 74 75 def getInterface (registry, api, version=None, profile=None, **kwargs): 76 spec = khr_util.registry.spec(registry, api, version, profile, **kwargs) 77 return khr_util.registry.createInterface(registry, spec, api) 78 79 def getDefaultInterface (): 80 return getInterface(getEGLRegistry(), 'egl', VERSION, extensionNames = EXTENSIONS, protects = PROTECTS) 81 82 def getFunctionTypeName (funcName): 83 return "%sFunc" % funcName 84 85 def getFunctionMemberName (funcName): 86 assert funcName[:3] == "egl" 87 return "%c%s" % (funcName[3].lower(), funcName[4:]) 88 89 def genCommandList (iface, renderCommand, directory, filename, align=False): 90 lines = map(renderCommand, iface.commands) 91 if align: 92 lines = khr_util.format.indentLines(lines) 93 writeInlFile(os.path.join(directory, filename), lines) 94 95 def getVersionToken (version): 96 return version.replace(".", "") 97 98 def genCommandLists (registry, renderCommand, check, directory, filePattern, align=False): 99 for eFeature in registry.features: 100 api = eFeature.get('api') 101 version = eFeature.get('number') 102 profile = check(api, version) 103 if profile is True: 104 profile = None 105 elif profile is False: 106 continue 107 iface = getInterface(registry, api, version=version, profile=profile) 108 filename = filePattern % getVersionToken(version) 109 genCommandList(iface, renderCommand, directory, filename, align) 110 111 INL_HEADER = khr_util.format.genInlHeader("Khronos EGL API description (egl.xml)", EGL_SOURCE.getRevision()) 112 113 def writeInlFile (filename, source): 114 khr_util.format.writeInlFile(filename, INL_HEADER, source) 115