st/dri: Perform MSAA downsampling for __DRI2_THROTTLE_COPYSUBBUFFER
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 3 Oct 2019 16:11:22 +0000 (12:11 -0400)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 5 Oct 2019 13:19:37 +0000 (13:19 +0000)
glXCopySubBufferMESA copies data from the back buffer to the front,
so it needs to perform a MSAA downsampling operation just like
glXSwapBuffers would.

Currently, the CopySubBuffer implementations supply a throttle reason
of __DRI2_THROTTLE_SWAPBUFFERS, so they hit this path and work today.
But we'd like to avoid swapbuffer throttling in this case, so the next
patch will change that reason.

Tested-by: Michel Dänzer <mdaenzer@redhat.com> # DRI3 only
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
src/gallium/state_trackers/dri/dri_drawable.c

index b99d1e9de51c7409974a27b73d972c8e3e8e5a9c..8f5055407cd02d0c34f1dc38a8b540dab8c212cd 100644 (file)
@@ -511,13 +511,15 @@ dri_flush(__DRIcontext *cPriv,
       struct pipe_context *pipe = st->pipe;
 
       if (drawable->stvis.samples > 1 &&
-          reason == __DRI2_THROTTLE_SWAPBUFFER) {
+          (reason == __DRI2_THROTTLE_SWAPBUFFER ||
+           reason == __DRI2_THROTTLE_COPYSUBBUFFER)) {
          /* Resolve the MSAA back buffer. */
          dri_pipe_blit(st->pipe,
                        drawable->textures[ST_ATTACHMENT_BACK_LEFT],
                        drawable->msaa_textures[ST_ATTACHMENT_BACK_LEFT]);
 
-         if (drawable->msaa_textures[ST_ATTACHMENT_FRONT_LEFT] &&
+         if (reason == __DRI2_THROTTLE_SWAPBUFFER &&
+             drawable->msaa_textures[ST_ATTACHMENT_FRONT_LEFT] &&
              drawable->msaa_textures[ST_ATTACHMENT_BACK_LEFT]) {
             swap_msaa_buffers = true;
          }