util/u_threaded: fix a CPU storage crash due to an invalid codepath taken
authorMarek Olšák <marek.olsak@amd.com>
Fri, 15 Jul 2022 11:31:49 +0000 (07:31 -0400)
committerMarge Bot <emma+marge@anholt.net>
Thu, 28 Jul 2022 01:11:01 +0000 (01:11 +0000)
Fixes: 3df9d8ed807 - gallium/u_threaded: implement pipelined partial buffer uploads using CPU storage

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6837
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6594
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6613

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17556>

src/gallium/auxiliary/util/u_threaded_context.c

index a9f69b4..74d39f8 100644 (file)
@@ -2370,8 +2370,14 @@ tc_transfer_flush_region(struct pipe_context *_pipe,
          tc_buffer_do_flush_region(tc, ttrans, &box);
       }
 
-      /* Staging transfers don't send the call to the driver. */
-      if (ttrans->staging)
+      /* Staging transfers don't send the call to the driver.
+       *
+       * Transfers using the CPU storage shouldn't call transfer_flush_region
+       * in the driver because the buffer is not really mapped on the driver
+       * side and the CPU storage always re-uploads everything (flush_region
+       * makes no difference).
+       */
+      if (ttrans->staging || ttrans->cpu_storage_mapped)
          return;
    }