Module: Mesa Branch: staging/21.3 Commit: ee2e78b4160d5823c7ce3026248f095d486e8082 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ee2e78b4160d5823c7ce3026248f095d486e8082
Author: Mike Blumenkrantz <[email protected]> Date: Thu Feb 10 14:30:25 2022 -0500 zink: always invalidate streamout counter buffer if not resuming this otherwise treates begin/end/begin the same as begin/pause/resume cc: mesa-stable fixes: KHR-GL46.texture_view.view_classes KHR-GL46.transform_feedback.capture_geometry_separate_test KHR-GL46.transform_feedback.capture_vertex_separate_test KHR-GL46.transform_feedback.query_geometry_separate_test KHR-GL46.transform_feedback.query_vertex_separate_test Reviewed-by: Dave Airlie <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15020> (cherry picked from commit e8ba9cee270417af29f2399ada05c2d104f1dc58) --- .pick_status.json | 2 +- src/gallium/drivers/zink/ci/zink-lvp-fails.txt | 1 - src/gallium/drivers/zink/zink_context.c | 11 +++++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 33b7252647c..8ff8cb7c4e6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1381,7 +1381,7 @@ "description": "zink: always invalidate streamout counter buffer if not resuming", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null }, diff --git a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt index aee145ea429..b428b5e6d21 100644 --- a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt +++ b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt @@ -22,7 +22,6 @@ KHR-GL32.transform_feedback.capture_vertex_separate_test,Fail KHR-GL32.transform_feedback.discard_vertex_test,Fail KHR-GL32.transform_feedback.draw_xfb_instanced_test,Crash KHR-GL32.transform_feedback.draw_xfb_stream_instanced_test,Crash -KHR-GL32.transform_feedback.query_geometry_separate_test,Fail KHR-GL32.transform_feedback.query_vertex_interleaved_test,Fail KHR-GL32.transform_feedback.query_vertex_separate_test,Fail dEQP-GLES2.functional.clipping.line.wide_line_clip_viewport_center,Fail diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 8adcf3c9dac..2babcf3b207 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -3588,6 +3588,11 @@ zink_set_stream_output_targets(struct pipe_context *pctx, { struct zink_context *ctx = zink_context(pctx); + /* always set counter_buffer_valid=false on unbind: + * - on resume (indicated by offset==-1), set counter_buffer_valid=true + * - otherwise the counter buffer is invalidated + */ + if (num_targets == 0) { for (unsigned i = 0; i < ctx->num_so_targets; i++) { if (ctx->so_targets[i]) { @@ -3607,14 +3612,16 @@ zink_set_stream_output_targets(struct pipe_context *pctx, if (!t) continue; struct zink_resource *res = zink_resource(t->counter_buffer); - if (offsets[0] == (unsigned)-1) + if (offsets[0] == (unsigned)-1) { ctx->xfb_barrier |= zink_resource_buffer_needs_barrier(res, VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT, VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT); - else + } else { ctx->xfb_barrier |= zink_resource_buffer_needs_barrier(res, VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT, VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT); + t->counter_buffer_valid = false; + } struct zink_resource *so = zink_resource(ctx->so_targets[i]->buffer); if (so) { so->so_bind_count++;
