From e4ff3cd7797fad27099f2c41a675bc95d05b6956 Mon Sep 17 00:00:00 2001 From: Martin Andersson Date: Wed, 25 Dec 2013 14:28:00 +0100 Subject: [PATCH] st/egl: Flush resources before presentation Fixes wayland regression on r600g due to fast clear introduced by commit edbbfac6. --- src/gallium/state_trackers/egl/common/native_helper.c | 15 +++++++++++++++ src/gallium/state_trackers/egl/common/native_helper.h | 5 +++++ src/gallium/state_trackers/egl/wayland/native_wayland.c | 4 ++++ 3 files changed, 24 insertions(+) diff --git a/src/gallium/state_trackers/egl/common/native_helper.c b/src/gallium/state_trackers/egl/common/native_helper.c index 4a77a50..856cbb6 100644 --- a/src/gallium/state_trackers/egl/common/native_helper.c +++ b/src/gallium/state_trackers/egl/common/native_helper.c @@ -341,6 +341,21 @@ resource_surface_throttle(struct resource_surface *rsurf) } boolean +resource_surface_flush_resource(struct resource_surface *rsurf, + struct native_display *ndpy, + enum native_attachment which) +{ + struct pipe_context *pipe = ndpy_get_copy_context(ndpy); + + if (!pipe) + return FALSE; + + pipe->flush_resource(pipe, rsurf->resources[which]); + + return TRUE; +} + +boolean resource_surface_flush(struct resource_surface *rsurf, struct native_display *ndpy) { diff --git a/src/gallium/state_trackers/egl/common/native_helper.h b/src/gallium/state_trackers/egl/common/native_helper.h index 4c369a7..0b53b28 100644 --- a/src/gallium/state_trackers/egl/common/native_helper.h +++ b/src/gallium/state_trackers/egl/common/native_helper.h @@ -91,6 +91,11 @@ resource_surface_copy_swap(struct resource_surface *rsurf, boolean resource_surface_throttle(struct resource_surface *rsurf); +boolean +resource_surface_flush_resource(struct resource_surface *rsurf, + struct native_display *ndpy, + enum native_attachment which); + /** * Flush pending rendering using the copy context. This function saves a * marker for upcoming throttles. diff --git a/src/gallium/state_trackers/egl/wayland/native_wayland.c b/src/gallium/state_trackers/egl/wayland/native_wayland.c index cfdf4f8..0ab4be6 100644 --- a/src/gallium/state_trackers/egl/wayland/native_wayland.c +++ b/src/gallium/state_trackers/egl/wayland/native_wayland.c @@ -259,6 +259,10 @@ wayland_surface_swap_buffers(struct native_surface *nsurf) if (ret == -1) return EGL_FALSE; + (void) resource_surface_flush_resource(surface->rsurf, &display->base, + NATIVE_ATTACHMENT_BACK_LEFT); + (void) resource_surface_flush(surface->rsurf, &display->base); + surface->frame_callback = wl_surface_frame(surface->win->surface); wl_callback_add_listener(surface->frame_callback, &frame_listener, surface); wl_proxy_set_queue((struct wl_proxy *) surface->frame_callback, -- 1.8.5.1