Mesa (main): zink: delete zink_resource_object::dt_has_data

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jun 28 02:57:47 UTC 2022


Module: Mesa
Branch: main
Commit: 1951065a1613bc64351e6ff461677fe9f301b772
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1951065a1613bc64351e6ff461677fe9f301b772

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Wed Jun 22 13:24:33 2022 -0400

zink: delete zink_resource_object::dt_has_data

this should be on the swapchain image

Reviewed-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17149>

---

 src/gallium/drivers/zink/zink_batch.c    |  4 +---
 src/gallium/drivers/zink/zink_kopper.c   | 11 ++++++-----
 src/gallium/drivers/zink/zink_kopper.h   |  2 +-
 src/gallium/drivers/zink/zink_resource.h |  1 -
 4 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c
index 31e17d53468..faa64385deb 100644
--- a/src/gallium/drivers/zink/zink_batch.c
+++ b/src/gallium/drivers/zink/zink_batch.c
@@ -493,10 +493,8 @@ zink_batch_resource_usage_set(struct zink_batch *batch, struct zink_resource *re
 {
    if (res->obj->dt) {
       VkSemaphore acquire = zink_kopper_acquire_submit(zink_screen(batch->state->ctx->base.screen), res);
-      if (acquire) {
+      if (acquire)
          util_dynarray_append(&batch->state->acquires, VkSemaphore, acquire);
-         res->obj->dt_has_data = true;
-      }
    }
    if (write && !res->obj->is_buffer) {
       if (!res->valid && res->fb_binds)
diff --git a/src/gallium/drivers/zink/zink_kopper.c b/src/gallium/drivers/zink/zink_kopper.c
index 5d2be3d791b..d27b32bd4ec 100644
--- a/src/gallium/drivers/zink/zink_kopper.c
+++ b/src/gallium/drivers/zink/zink_kopper.c
@@ -512,8 +512,7 @@ kopper_acquire(struct zink_screen *screen, struct zink_resource *res, uint64_t t
       res->obj->indefinite_acquire = true;
       p_atomic_inc(&cdt->swapchain->num_acquires);
    }
-   cdt->swapchain->dt_has_data = false;
-   res->obj->dt_has_data = false;
+   cdt->swapchain->images[res->obj->dt_idx].dt_has_data = false;
    return VK_SUCCESS;
 }
 
@@ -573,7 +572,8 @@ zink_kopper_acquire_submit(struct zink_screen *screen, struct zink_resource *res
 {
    assert(res->obj->dt);
    struct kopper_displaytarget *cdt = res->obj->dt;
-   if (cdt->swapchain->dt_has_data)
+   assert(res->obj->dt_idx != UINT32_MAX);
+   if (cdt->swapchain->images[res->obj->dt_idx].dt_has_data)
       return VK_NULL_HANDLE;
    assert(res->obj->dt_idx != UINT32_MAX);
    assert(cdt->swapchain->images[res->obj->dt_idx].acquire);
@@ -581,7 +581,7 @@ zink_kopper_acquire_submit(struct zink_screen *screen, struct zink_resource *res
    /* this is now owned by the batch */
    VkSemaphore acquire = cdt->swapchain->images[res->obj->dt_idx].acquire;
    cdt->swapchain->images[res->obj->dt_idx].acquire = VK_NULL_HANDLE;
-   cdt->swapchain->dt_has_data = true;
+   cdt->swapchain->images[res->obj->dt_idx].dt_has_data = true;
    return acquire;
 }
 
@@ -743,7 +743,8 @@ zink_kopper_acquire_readback(struct zink_context *ctx, struct zink_resource *res
    uint32_t last_dt_idx = res->obj->last_dt_idx;
    VkResult ret = VK_SUCCESS;
    /* if this hasn't been presented or if it has data, use this as the readback target */
-   if (res->obj->last_dt_idx == UINT32_MAX || res->obj->dt_has_data)
+   if (res->obj->last_dt_idx == UINT32_MAX ||
+       (zink_kopper_acquired(cdt, res->obj->dt_idx) && cdt->swapchain->images[res->obj->dt_idx].dt_has_data))
       return false;
    while (res->obj->dt_idx != last_dt_idx) {
       if (res->obj->dt_idx != UINT32_MAX && !zink_kopper_present_readback(ctx, res))
diff --git a/src/gallium/drivers/zink/zink_kopper.h b/src/gallium/drivers/zink/zink_kopper.h
index a62c6a14860..43f7687a9d7 100644
--- a/src/gallium/drivers/zink/zink_kopper.h
+++ b/src/gallium/drivers/zink/zink_kopper.h
@@ -32,6 +32,7 @@
 struct kopper_swapchain_image {
    bool init;
    bool acquired;
+   bool dt_has_data;
    VkImage image;
    VkSemaphore acquire;
 };
@@ -48,7 +49,6 @@ struct kopper_swapchain {
    unsigned num_acquires;
    unsigned max_acquires;
    unsigned async_presents;
-   bool dt_has_data;
    struct kopper_swapchain_image *images;
 };
 
diff --git a/src/gallium/drivers/zink/zink_resource.h b/src/gallium/drivers/zink/zink_resource.h
index 5047cb01c9c..2c460dbddef 100644
--- a/src/gallium/drivers/zink/zink_resource.h
+++ b/src/gallium/drivers/zink/zink_resource.h
@@ -90,7 +90,6 @@ struct zink_resource_object {
    uint32_t last_dt_idx;
    VkSemaphore present;
    bool new_dt;
-   bool dt_has_data;
    bool indefinite_acquire;
    // }
 



More information about the mesa-commit mailing list