Module: Mesa Branch: main Commit: 08ffa8e0d28316d810caf548d7dfefb73107b9c2 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=08ffa8e0d28316d810caf548d7dfefb73107b9c2
Author: Rob Clark <[email protected]> Date: Wed Apr 26 10:37:58 2023 -0700 dri/android: Fix MSAA resolve Commit f9a074dd550 ("dri2/android: Bypass throttling") dropped unnecessary throtting in the SwapBuffers() path for android. But unfortunately MSAA resolve got tangled up in the throttle reason flag. So add a new flag that indicates "no throttingling, but yes please do MSAA resolve". Fixes: f9a074dd550 ("dri2/android: Bypass throttling") Signed-off-by: Rob Clark <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22719> --- include/GL/internal/dri_interface.h | 3 ++- src/egl/drivers/dri2/platform_android.c | 2 +- src/gallium/frontends/dri/dri_drawable.c | 7 +++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h index 9598adc31dc..f4fc777d7e8 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h @@ -240,7 +240,8 @@ struct __DRItexBufferExtensionRec { enum __DRI2throttleReason { __DRI2_THROTTLE_SWAPBUFFER, __DRI2_THROTTLE_COPYSUBBUFFER, - __DRI2_THROTTLE_FLUSHFRONT + __DRI2_THROTTLE_FLUSHFRONT, + __DRI2_NOTHROTTLE_SWAPBUFFER, }; struct __DRI2flushExtensionRec { diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c index 74d3733d127..60c7ef5bc33 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c @@ -997,7 +997,7 @@ droid_swap_buffers(_EGLDisplay *disp, _EGLSurface *draw) if (dri2_surf->back) dri2_surf->back->age = 1; - dri2_flush_drawable_for_swapbuffers_flags(disp, draw, -1); + dri2_flush_drawable_for_swapbuffers_flags(disp, draw, __DRI2_NOTHROTTLE_SWAPBUFFER); /* dri2_surf->buffer can be null even when no error has occurred. For * example, if the user has called no GL rendering commands since the diff --git a/src/gallium/frontends/dri/dri_drawable.c b/src/gallium/frontends/dri/dri_drawable.c index 14ece91ff61..8716392f956 100644 --- a/src/gallium/frontends/dri/dri_drawable.c +++ b/src/gallium/frontends/dri/dri_drawable.c @@ -430,13 +430,15 @@ notify_before_flush_cb(void* _args) if (args->drawable->stvis.samples > 1 && (args->reason == __DRI2_THROTTLE_SWAPBUFFER || + args->reason == __DRI2_NOTHROTTLE_SWAPBUFFER || args->reason == __DRI2_THROTTLE_COPYSUBBUFFER)) { /* Resolve the MSAA back buffer. */ dri_pipe_blit(st->pipe, args->drawable->textures[ST_ATTACHMENT_BACK_LEFT], args->drawable->msaa_textures[ST_ATTACHMENT_BACK_LEFT]); - if (args->reason == __DRI2_THROTTLE_SWAPBUFFER && + if ((args->reason == __DRI2_THROTTLE_SWAPBUFFER || + args->reason == __DRI2_NOTHROTTLE_SWAPBUFFER) && args->drawable->msaa_textures[ST_ATTACHMENT_FRONT_LEFT] && args->drawable->msaa_textures[ST_ATTACHMENT_BACK_LEFT]) { args->swap_msaa_buffers = true; @@ -519,7 +521,8 @@ dri_flush(__DRIcontext *cPriv, flush_flags = 0; if (flags & __DRI2_FLUSH_CONTEXT) flush_flags |= ST_FLUSH_FRONT; - if (reason == __DRI2_THROTTLE_SWAPBUFFER) + if (reason == __DRI2_THROTTLE_SWAPBUFFER || + reason == __DRI2_NOTHROTTLE_SWAPBUFFER) flush_flags |= ST_FLUSH_END_OF_FRAME; /* Flush the context and throttle if needed. */
