Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Unified Diff: ui/gl/generate_bindings.py

Issue 1203513004: Respect the disabled extension list during binding initialization. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: EGL_KHR_fence_sync must be unconditionally enabled; ANGLE GetPlatformExtensions reqires client exte… Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/gl/generate_bindings.py
diff --git a/ui/gl/generate_bindings.py b/ui/gl/generate_bindings.py
index d40be26a9178519fd7a366dd7a2c38f20dd61210..cf6f25c48f20cd9bfc078a65eaa6e97464ad9b39 100755
--- a/ui/gl/generate_bindings.py
+++ b/ui/gl/generate_bindings.py
@@ -26,6 +26,7 @@ UNCONDITIONALLY_BOUND_EXTENSIONS = set([
'WGL_EXT_extensions_string',
'GL_CHROMIUM_gles_depth_binding_hack', # crbug.com/448206
'GL_CHROMIUM_glgetstringi_hack', # crbug.com/470396
+ 'GL_CHROMIUM_EGL_KHR_fence_sync_bind_always_504758_hack', # crbug.com/504758
Ken Russell (switch to Gerrit) 2015/06/26 17:06:49 That's a mouthful. Is it really worth embedding th
no sievers 2015/06/26 17:51:29 Yea sorry that was my overly explicit suggestion,
])
"""Function binding conditions can be specified manually by supplying a versions
@@ -1202,7 +1203,10 @@ EGL_FUNCTIONS = [
'EGLint config_size, EGLint* num_config', },
{ 'return_type': 'EGLint',
'versions': [{ 'name': 'eglClientWaitSyncKHR',
- 'extensions': ['EGL_KHR_fence_sync'] }],
+ 'extensions': [
+ 'EGL_KHR_fence_sync',
+ 'GL_CHROMIUM_EGL_KHR_fence_sync_bind_always_504758_hack'
+ ] }],
'arguments': 'EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, '
'EGLTimeKHR timeout' },
{ 'return_type': 'EGLBoolean',
@@ -1234,7 +1238,10 @@ EGL_FUNCTIONS = [
'const EGLint* attrib_list', },
{ 'return_type': 'EGLSyncKHR',
'versions': [{ 'name': 'eglCreateSyncKHR',
- 'extensions': ['EGL_KHR_fence_sync'] }],
+ 'extensions': [
+ 'EGL_KHR_fence_sync',
+ 'GL_CHROMIUM_EGL_KHR_fence_sync_bind_always_504758_hack'
+ ] }],
'arguments': 'EGLDisplay dpy, EGLenum type, const EGLint* attrib_list' },
{ 'return_type': 'EGLSurface',
'names': ['eglCreateWindowSurface'],
@@ -1252,7 +1259,10 @@ EGL_FUNCTIONS = [
'arguments': 'EGLDisplay dpy, EGLSurface surface', },
{ 'return_type': 'EGLBoolean',
'versions': [{ 'name': 'eglDestroySyncKHR',
- 'extensions': ['EGL_KHR_fence_sync'] }],
+ 'extensions': [
+ 'EGL_KHR_fence_sync',
+ 'GL_CHROMIUM_EGL_KHR_fence_sync_bind_always_504758_hack'
+ ] }],
'arguments': 'EGLDisplay dpy, EGLSyncKHR sync' },
{ 'return_type': 'EGLBoolean',
'names': ['eglGetConfigAttrib'],
@@ -1288,7 +1298,10 @@ EGL_FUNCTIONS = [
'arguments': 'const char* procname', },
{ 'return_type': 'EGLBoolean',
'versions': [{ 'name': 'eglGetSyncAttribKHR',
- 'extensions': ['EGL_KHR_fence_sync'] }],
+ 'extensions': [
+ 'EGL_KHR_fence_sync',
+ 'GL_CHROMIUM_EGL_KHR_fence_sync_bind_always_504758_hack'
+ ] }],
'arguments': 'EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, '
'EGLint* value' },
{ 'return_type': 'EGLBoolean',
@@ -1905,29 +1918,12 @@ namespace gfx {
return True
return False
- if set_name == 'egl':
- file.write("""std::string client_extensions(GetClientExtensions());
- client_extensions += " ";
- ALLOW_UNUSED_LOCAL(client_extensions);
-
-""")
- for extension in sorted(used_client_extensions):
- # Extra space at the end of the extension name is intentional,
- # it is used as a separator
- file.write(
- ' ext.b_%s = client_extensions.find("%s ") != std::string::npos;\n' %
- (extension, extension))
- for func in functions:
- if not 'static_binding' in func and IsClientExtensionFunc(func):
- file.write('\n')
- file.write(' debug_fn.%sFn = 0;\n' % func['known_as'])
- WriteConditionalFuncBinding(file, func)
+ file.write("}\n\n");
if set_name == 'gl':
- # Write the deferred bindings for GL that need a current context and depend
- # on GL_VERSION and GL_EXTENSIONS.
- file.write('}\n\n')
- file.write("""void DriverGL::InitializeDynamicBindings(GLContext* context) {
+ file.write("""\
+void DriverGL::InitializeDynamicBindings(
+ GLContext* context) {
DCHECK(context && context->IsCurrent(NULL));
const GLVersionInfo* ver = context->GetVersionInfo();
ALLOW_UNUSED_LOCAL(ver);
@@ -1935,24 +1931,53 @@ namespace gfx {
ALLOW_UNUSED_LOCAL(extensions);
""")
+ elif set_name == 'egl':
+ file.write("""\
+void DriverEGL::InitializeExtensionBindings() {
+ std::string client_extensions(GetClientExtensions());
+ client_extensions += " ";
+ ALLOW_UNUSED_LOCAL(client_extensions);
+
+""")
else:
- file.write("""std::string extensions(GetPlatformExtensions());
+ file.write("""\
+void Driver%s::InitializeExtensionBindings() {
+ std::string extensions(GetPlatformExtensions());
extensions += " ";
ALLOW_UNUSED_LOCAL(extensions);
-""")
+""" % (set_name.upper(),))
- for extension in sorted(used_extensions):
- # Extra space at the end of the extension name is intentional, it is used
- # as a separator
- file.write(' ext.b_%s = extensions.find("%s ") != std::string::npos;\n' %
- (extension, extension))
+ def OutputExtensionBindings(extension_var, extensions, extension_funcs):
+ # Extra space at the end of the extension name is intentional,
+ # it is used as a separator
+ for extension in extensions:
+ file.write(' ext.b_%s = %s.find("%s ") != std::string::npos;\n' %
+ (extension, extension_var, extension))
- for func in functions:
- if not 'static_binding' in func and not IsClientExtensionFunc(func):
- file.write('\n')
- file.write(' debug_fn.%sFn = 0;\n' % func['known_as'])
- WriteConditionalFuncBinding(file, func)
+ for func in extension_funcs:
+ if not 'static_binding' in func:
+ file.write('\n')
+ file.write(' debug_fn.%sFn = 0;\n' % func['known_as'])
+ WriteConditionalFuncBinding(file, func)
+
+ OutputExtensionBindings(
+ 'client_extensions',
+ sorted(used_client_extensions),
+ [ f for f in functions if IsClientExtensionFunc(f) ])
+
+ if set_name == 'egl':
+ file.write("""\
+ std::string extensions(GetPlatformExtensions());
+ extensions += " ";
+ ALLOW_UNUSED_LOCAL(extensions);
+
+""")
+
+ OutputExtensionBindings(
+ 'extensions',
+ sorted(used_extensions),
+ [ f for f in functions if not IsClientExtensionFunc(f) ])
# Some new function pointers have been added, so update them in debug bindings
file.write('\n')

Powered by Google App Engine
This is Rietveld 408576698