submit_count is used to disambiguate a batch_id based on the generation
id of a given batch: this value is incremented once on submit and once on
reset such that the diff of the values is > 1 any time the batch does not
represent the fence it was last submitted with
in the case of a batch's first use, however, this value was being incorrectly
incremented such that the first submit would cause disambiguation checks
to erroneously determine that the batch had already completed, breaking synchronization
fixes #9313
cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24016>
bs->unordered_write_access = 0;
bs->unordered_write_stages = 0;
+ /* only increment batch generation if previously in-use to avoid false detection of batch completion */
+ if (bs->fence.submitted)
+ bs->usage.submit_count++;
/* only reset submitted here so that tc fence desync can pick up the 'completed' flag
* before the state is reused
*/
bs->has_barriers = false;
if (bs->fence.batch_id)
zink_screen_update_last_finished(screen, bs->fence.batch_id);
- bs->usage.submit_count++;
bs->fence.batch_id = 0;
bs->usage.usage = 0;
bs->next = NULL;