Mesa (main): d3d12: When mapping a resource used in the current batch without blocking, at least flush

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Feb 10 20:18:08 UTC 2022


Module: Mesa
Branch: main
Commit: 5cbd7093af74a39efe64a7348f348e8eb57ff9f4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5cbd7093af74a39efe64a7348f348e8eb57ff9f4

Author: Jesse Natalie <jenatali at microsoft.com>
Date:   Thu Feb 10 11:08:16 2022 -0800

d3d12: When mapping a resource used in the current batch without blocking, at least flush

Also, resource_is_busy needs to opportunistically retire batches, so apps can
spin on non-blocking resource maps and eventually succeed.

Reviewed-by: Bill Kristiansen <billkris at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14959>

---

 src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt |  5 ++---
 src/gallium/drivers/d3d12/d3d12_resource.cpp    | 21 ++++++++++++---------
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt b/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt
index 51b2d91bae0..2e9c0774a56 100644
--- a/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt
+++ b/src/gallium/drivers/d3d12/ci/d3d12-quick_gl.txt
@@ -1670,7 +1670,6 @@ spec/arb_texture_barrier/arb_texture_barrier-blending-in-shader 512 42 8 8 7: sk
 spec/arb_texture_barrier/arb_texture_barrier-blending-in-shader 512 42 8 8 8: skip
 spec/arb_texture_buffer_object/bufferstorage: skip
 spec/arb_texture_buffer_object/negative-unsupported: skip
-spec/arb_texture_buffer_object/subdata-sync: fail
 spec/arb_texture_buffer_range/ranges-2: fail
 spec/arb_texture_buffer_range/ranges-2 compat: fail
 spec/arb_texture_cube_map/copyteximage cube samples=16: skip
@@ -3526,8 +3525,8 @@ wgl/wgl-sanity: skip
 summary:
        name:  results
        ----  --------
-       pass:    17840
-       fail:     2047
+       pass:    17841
+       fail:     2046
       crash:        7
        skip:     1452
     timeout:        0
diff --git a/src/gallium/drivers/d3d12/d3d12_resource.cpp b/src/gallium/drivers/d3d12/d3d12_resource.cpp
index 1d44186e656..26ab62feae5 100644
--- a/src/gallium/drivers/d3d12/d3d12_resource.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_resource.cpp
@@ -80,11 +80,14 @@ resource_is_busy(struct d3d12_context *ctx,
                  struct d3d12_resource *res,
                  bool want_to_write)
 {
-   bool busy = false;
-
-   for (unsigned i = 0; i < ARRAY_SIZE(ctx->batches); i++)
-      busy |= d3d12_batch_has_references(&ctx->batches[i], res->bo, want_to_write);
+   if (d3d12_batch_has_references(d3d12_current_batch(ctx), res->bo, want_to_write))
+      return true;
 
+   bool busy = false;
+   d3d12_foreach_submitted_batch(ctx, batch) {
+      if (!d3d12_reset_batch(ctx, batch, 0))
+         busy |= d3d12_batch_has_references(batch, res->bo, want_to_write);
+   }
    return busy;
 }
 
@@ -97,11 +100,8 @@ d3d12_resource_wait_idle(struct d3d12_context *ctx,
       d3d12_flush_cmdlist_and_wait(ctx);
    } else {
       d3d12_foreach_submitted_batch(ctx, batch) {
-         if (d3d12_batch_has_references(batch, res->bo, want_to_write)) {
+         if (d3d12_batch_has_references(batch, res->bo, want_to_write))
             d3d12_reset_batch(ctx, batch, PIPE_TIMEOUT_INFINITE);
-            if (!resource_is_busy(ctx, res, want_to_write))
-               break;
-         }
       }
    }
 }
@@ -945,8 +945,11 @@ synchronize(struct d3d12_context *ctx,
    }
 
    if (!(usage & PIPE_MAP_UNSYNCHRONIZED) && resource_is_busy(ctx, res, usage & PIPE_MAP_WRITE)) {
-      if (usage & PIPE_MAP_DONTBLOCK)
+      if (usage & PIPE_MAP_DONTBLOCK) {
+         if (d3d12_batch_has_references(d3d12_current_batch(ctx), res->bo, usage & PIPE_MAP_WRITE))
+            d3d12_flush_cmdlist(ctx);
          return false;
+      }
 
       d3d12_resource_wait_idle(ctx, res, usage & PIPE_MAP_WRITE);
    }



More information about the mesa-commit mailing list