summaryrefslogtreecommitdiff
path: root/src/rpi-renderer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rpi-renderer.c')
-rw-r--r--src/rpi-renderer.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/rpi-renderer.c b/src/rpi-renderer.c
index c6b924c6..3a7f65cc 100644
--- a/src/rpi-renderer.c
+++ b/src/rpi-renderer.c
@@ -363,6 +363,7 @@ rpi_resource_update(struct rpi_resource *resource, struct weston_buffer *buffer,
int height;
int stride;
int ret;
+ int applied_opaque_region = 0;
#ifdef HAVE_RESOURCE_WRITE_DATA_RECT
int n;
#endif
@@ -384,13 +385,18 @@ rpi_resource_update(struct rpi_resource *resource, struct weston_buffer *buffer,
if (!pixels)
return -1;
+
+ applied_opaque_region = 1;
}
#endif
ret = rpi_resource_realloc(resource, ifmt & ~PREMULT_ALPHA_FLAG,
width, height, stride, height);
- if (ret < 0)
+ if (ret < 0) {
+ if (applied_opaque_region)
+ free(pixels);
return -1;
+ }
pixman_region32_init_rect(&write_region, 0, 0, width, height);
if (ret == 0)
@@ -437,12 +443,8 @@ rpi_resource_update(struct rpi_resource *resource, struct weston_buffer *buffer,
pixman_region32_fini(&write_region);
-#ifndef HAVE_ELEMENT_SET_OPAQUE_RECT
- if (pixman_region32_not_empty(opaque_region) &&
- wl_shm_buffer_get_format(buffer->shm_buffer) == WL_SHM_FORMAT_ARGB8888 &&
- resource->enable_opaque_regions)
+ if (applied_opaque_region)
free(pixels);
-#endif
return ret ? -1 : 0;
}
@@ -1742,11 +1744,13 @@ rpi_renderer_create(struct weston_compositor *compositor,
renderer->egl_display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
if (renderer->egl_display == EGL_NO_DISPLAY) {
weston_log("failed to create EGL display\n");
+ free(renderer);
return -1;
}
if (!eglInitialize(renderer->egl_display, &major, &minor)) {
weston_log("failed to initialize EGL display\n");
+ free(renderer);
return -1;
}
@@ -1761,6 +1765,8 @@ rpi_renderer_create(struct weston_compositor *compositor,
EGL_EXTENSIONS);
if (!extensions) {
weston_log("Retrieving EGL extension string failed.\n");
+ eglTerminate(renderer->egl_display);
+ free(renderer);
return -1;
}