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