nvk: Don't re-initialize the descriptor writer if the set matches

The logic here before was wrong.  In the case where the set is the same,
it would avoid the flush but then re-initialize anyway, loosing the
dirty information and causing us not to actually flush out all the
descriptors.

Fixes: 1f0fda22f7 ("nvk: Flush descriptor set maps")
(cherry picked from commit 2f6b3b6b91)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38268>
This commit is contained in:
Faith Ekstrand 2025-10-28 22:09:48 -04:00 committed by Dylan Baker
parent 9aeac1e0a7
commit 182877f3c8
2 changed files with 9 additions and 2 deletions

View file

@ -114,7 +114,7 @@
"description": "nvk: Don't re-initialize the descriptor writer if the set matches",
"nominated": true,
"nomination_type": 2,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "1f0fda22f7fe6bec8a001c89b967888fc0399868",
"notes": null

View file

@ -94,7 +94,14 @@ nvk_descriptor_writer_next_set(struct nvk_descriptor_writer *w,
{
const struct nvk_physical_device *pdev = w->pdev;
if (w->set != NULL && w->set != set)
/* If we're writing to the same set, keep using the original writer as-is
* so we don't do unnecessary extra flushing in the case where the client
* has a lot of writes to the same set back-to-back.
*/
if (w->set == set)
return;
if (w->set != NULL)
nvk_descriptor_writer_finish(w);
nvk_descriptor_writer_init_set(pdev, w, set);