diff options
author | Rob Clark <robdclark@chromium.org> | 2023-09-28 12:43:33 -0700 |
---|---|---|
committer | Dylan Baker <dylan.c.baker@intel.com> | 2023-10-06 13:44:14 -0700 |
commit | 51a36be63c152d6bff40bddda4da24b33cf77b27 (patch) | |
tree | 5a02a079b4d7a83c096c02af3fd00fa5f25a3eba | |
parent | 4b6322f1c6606bab4b051f59e86d6d54221ab952 (diff) |
freedreno: Fix streamout offset_buf dirtiness
We also need to mark the offset buffer as dirty.
Fixes: b43e5aec0d2c ("freedreno/batch: Move submit bo tracking to batch")
Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25465>
(cherry picked from commit 4c0defda8a2e6796cdc992ba62ce182e3f797f5d)
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_draw.c | 12 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_state.c | 4 |
3 files changed, 14 insertions, 4 deletions
diff --git a/.pick_status.json b/.pick_status.json index f8d738a78fa..01efdf1de32 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1714,7 +1714,7 @@ "description": "freedreno: Fix streamout offset_buf dirtiness", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "b43e5aec0d2ce542d4ba68da947e3ad752855979", "notes": null diff --git a/src/gallium/drivers/freedreno/freedreno_draw.c b/src/gallium/drivers/freedreno/freedreno_draw.c index 1324e1f0685..85c786d8258 100644 --- a/src/gallium/drivers/freedreno/freedreno_draw.c +++ b/src/gallium/drivers/freedreno/freedreno_draw.c @@ -182,9 +182,15 @@ batch_draw_tracking_for_dirty_bits(struct fd_batch *batch) assert_dt /* Mark streamout buffers as being written.. */ if (dirty & FD_DIRTY_STREAMOUT) { - for (unsigned i = 0; i < ctx->streamout.num_targets; i++) - if (ctx->streamout.targets[i]) - resource_written(batch, ctx->streamout.targets[i]->buffer); + for (unsigned i = 0; i < ctx->streamout.num_targets; i++) { + struct fd_stream_output_target *target = + fd_stream_output_target(ctx->streamout.targets[i]); + + if (target) { + resource_written(batch, target->base.buffer); + resource_written(batch, target->offset_buf); + } + } } if (dirty & FD_DIRTY_QUERY) { diff --git a/src/gallium/drivers/freedreno/freedreno_state.c b/src/gallium/drivers/freedreno/freedreno_state.c index 5e36730ef69..19d40c9f1a6 100644 --- a/src/gallium/drivers/freedreno/freedreno_state.c +++ b/src/gallium/drivers/freedreno/freedreno_state.c @@ -683,6 +683,10 @@ fd_set_stream_output_targets(struct pipe_context *pctx, unsigned num_targets, if (targets[i]) { fd_resource_set_usage(targets[i]->buffer, FD_DIRTY_STREAMOUT); fd_dirty_resource(ctx, targets[i]->buffer, FD_DIRTY_STREAMOUT, true); + + struct fd_stream_output_target *target = fd_stream_output_target(targets[i]); + fd_resource_set_usage(target->offset_buf, FD_DIRTY_STREAMOUT); + fd_dirty_resource(ctx, target->offset_buf, FD_DIRTY_STREAMOUT, true); } if (!changed && !reset) |