zink: don't check submit count for unflushed usage
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Thu, 5 Oct 2023 16:56:10 +0000 (12:56 -0400)
committerMarge Bot <emma+marge@anholt.net>
Fri, 6 Oct 2023 05:30:22 +0000 (05:30 +0000)
unflushed usage is unflushed regardless of the submit count and is
critical for detecting multi-context synchronization

fixes Wolfenstein: The New Order load screen deadlock

Fixes: db12b881c7f ("zink: track/check submit info on resource batch usage")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25572>

src/gallium/drivers/zink/zink_bo.h

index 3ee2ebd..d017107 100644 (file)
@@ -145,14 +145,15 @@ zink_bo_commit(struct zink_screen *screen, struct zink_resource *res, unsigned l
 static ALWAYS_INLINE bool
 zink_bo_has_unflushed_usage(const struct zink_bo *bo)
 {
-   return (zink_batch_usage_is_unflushed(bo->reads.u) && bo->reads.submit_count == bo->reads.u->submit_count) ||
-          (zink_batch_usage_is_unflushed(bo->writes.u) && bo->writes.submit_count == bo->writes.u->submit_count);
+   return zink_batch_usage_is_unflushed(bo->reads.u) ||
+          zink_batch_usage_is_unflushed(bo->writes.u);
 }
 
 static ALWAYS_INLINE bool
 zink_bo_has_usage(const struct zink_bo *bo)
 {
-   return (zink_batch_usage_exists(bo->reads.u) && bo->reads.submit_count == bo->reads.u->submit_count) ||
+   return zink_bo_has_unflushed_usage(bo) ||
+          (zink_batch_usage_exists(bo->reads.u) && bo->reads.submit_count == bo->reads.u->submit_count) ||
           (zink_batch_usage_exists(bo->writes.u) && bo->writes.submit_count == bo->writes.u->submit_count);
 }