diff options
author | Aaron Plattner | 2016-06-06 15:40:33 -0700 |
---|---|---|
committer | Aaron Plattner | 2016-06-06 15:43:38 -0700 |
commit | 527fba43a5628b8e2697ff253b162622e321b201 (patch) | |
tree | 38308204f797794fc0b30eb229b70550f340929b /0006-gl-renderer-Refactor-gl_renderer_output_window_creat.patch | |
parent | 57673850b273dcf3db6c85abe9bc1d45d090eaf4 (diff) | |
download | aur-527fba43a5628b8e2697ff253b162622e321b201.tar.gz |
Update to Weston 1.11.0
Fetched patches from the nvidia_r364 branch of
git://people.freedesktop.org/~jjones/weston and then rebased on top of the
1.11.0 tag.
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Diffstat (limited to '0006-gl-renderer-Refactor-gl_renderer_output_window_creat.patch')
-rw-r--r-- | 0006-gl-renderer-Refactor-gl_renderer_output_window_creat.patch | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/0006-gl-renderer-Refactor-gl_renderer_output_window_creat.patch b/0006-gl-renderer-Refactor-gl_renderer_output_window_creat.patch new file mode 100644 index 000000000000..1f009b7f7547 --- /dev/null +++ b/0006-gl-renderer-Refactor-gl_renderer_output_window_creat.patch @@ -0,0 +1,173 @@ +From 2309d0381a9353651f7d080190c43702c76d2075 Mon Sep 17 00:00:00 2001 +From: "Miguel A. Vico" <mvicomoya@nvidia.com> +Date: Fri, 26 Feb 2016 15:44:59 +0100 +Subject: [PATCH 06/11] gl-renderer: Refactor + gl_renderer_output_window_create() +X-NVConfidentiality: public + +In preparation for follow-on changes to support frame presentation +through EGLDevice+EGLOutput, this change refactors +gl_renderer_output_window_create() to separate out window surface +creation code from output common creation code. + +Bonus: Fix EGLSurface leakage upon gl_renderer_setup() failure. + +Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com> +Reviewed-by: Andy Ritger <aritger@nvidia.com> +Reviewed-by: James Jones <jajones@nvidia.com> +--- + src/gl-renderer.c | 96 ++++++++++++++++++++++++++++++++++++------------------- + 1 file changed, 64 insertions(+), 32 deletions(-) + +diff --git a/src/gl-renderer.c b/src/gl-renderer.c +index 1d76488c2165..c208f36a5165 100644 +--- a/src/gl-renderer.c ++++ b/src/gl-renderer.c +@@ -1,6 +1,7 @@ + /* + * Copyright © 2012 Intel Corporation + * Copyright © 2015 Collabora, Ltd. ++ * Copyright © 2016 NVIDIA Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the +@@ -2546,24 +2547,21 @@ gl_renderer_output_set_border(struct weston_output *output, + static int + gl_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface); + +-static int +-gl_renderer_output_window_create(struct weston_output *output, ++static EGLSurface ++gl_renderer_create_window_surface(struct gl_renderer *gr, + EGLNativeWindowType window_for_legacy, + void *window_for_platform, + const EGLint *config_attribs, + const EGLint *visual_id, + int n_ids) + { +- struct weston_compositor *ec = output->compositor; +- struct gl_renderer *gr = get_renderer(ec); +- struct gl_output_state *go; ++ EGLSurface egl_surface = EGL_NO_SURFACE; + EGLConfig egl_config; +- int i; + + if (egl_choose_config(gr, config_attribs, visual_id, + n_ids, &egl_config) == -1) { + weston_log("failed to choose EGL config for output\n"); +- return -1; ++ return EGL_NO_SURFACE; + } + + if (egl_config != gr->egl_config && +@@ -2571,48 +2569,82 @@ gl_renderer_output_window_create(struct weston_output *output, + weston_log("attempted to use a different EGL config for an " + "output but EGL_MESA_configless_context is not " + "supported\n"); +- return -1; ++ return EGL_NO_SURFACE; + } + +- go = zalloc(sizeof *go); +- if (go == NULL) +- return -1; ++ log_egl_config_info(gr->egl_display, egl_config); + +- if (gr->create_platform_window) { +- go->egl_surface = +- gr->create_platform_window(gr->egl_display, +- egl_config, +- window_for_platform, +- NULL); +- } else { +- go->egl_surface = +- eglCreateWindowSurface(gr->egl_display, +- egl_config, +- window_for_legacy, NULL); +- } ++ if (gr->create_platform_window) ++ egl_surface = gr->create_platform_window(gr->egl_display, ++ egl_config, ++ window_for_platform, ++ NULL); ++ else ++ egl_surface = eglCreateWindowSurface(gr->egl_display, ++ egl_config, ++ window_for_legacy, NULL); + +- if (go->egl_surface == EGL_NO_SURFACE) { +- weston_log("failed to create egl surface\n"); +- free(go); +- return -1; +- } ++ return egl_surface; ++} ++ ++static int ++gl_renderer_output_create(struct weston_output *output, ++ EGLSurface surface) ++{ ++ struct weston_compositor *ec = output->compositor; ++ struct gl_renderer *gr = get_renderer(ec); ++ struct gl_output_state *go; ++ int i; + + if (gr->egl_context == NULL) +- if (gl_renderer_setup(ec, go->egl_surface) < 0) { +- free(go); ++ if (gl_renderer_setup(ec, surface) < 0) { + return -1; + } + ++ go = zalloc(sizeof *go); ++ if (go == NULL) ++ return -1; ++ ++ go->egl_surface = surface; ++ + for (i = 0; i < BUFFER_DAMAGE_COUNT; i++) + pixman_region32_init(&go->buffer_damage[i]); + + output->renderer_state = go; + +- log_egl_config_info(gr->egl_display, egl_config); +- + return 0; + } + ++static int ++gl_renderer_output_window_create(struct weston_output *output, ++ EGLNativeWindowType window_for_legacy, ++ void *window_for_platform, ++ const EGLint *config_attribs, ++ const EGLint *visual_id, ++ int n_ids) ++{ ++ struct weston_compositor *ec = output->compositor; ++ struct gl_renderer *gr = get_renderer(ec); ++ EGLSurface egl_surface = EGL_NO_SURFACE; ++ int ret = 0; ++ ++ egl_surface = gl_renderer_create_window_surface(gr, ++ window_for_legacy, ++ window_for_platform, ++ config_attribs, ++ visual_id, n_ids); ++ if (egl_surface == EGL_NO_SURFACE) { ++ weston_log("failed to create egl surface\n"); ++ return -1; ++ } ++ ++ ret = gl_renderer_output_create(output, egl_surface); ++ if (ret < 0) ++ eglDestroySurface(gr->egl_display, egl_surface); ++ ++ return ret; ++} ++ + static void + gl_renderer_output_destroy(struct weston_output *output) + { +-- +2.8.3 + |