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