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. */

Reply via email to