Mesa (master): zink: remove renderpass refcounting

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jan 14 22:18:16 UTC 2021


Module: Mesa
Branch: master
Commit: c6741f52bd2f646b2c1575db6e47aba2083f3765
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c6741f52bd2f646b2c1575db6e47aba2083f3765

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Thu Dec 24 09:17:23 2020 -0500

zink: remove renderpass refcounting

this is useless because we never destroy renderpasses during the lifetime
of a process and don't want to do so

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

---

 src/gallium/drivers/zink/zink_batch.c       |  1 -
 src/gallium/drivers/zink/zink_batch.h       |  1 -
 src/gallium/drivers/zink/zink_context.c     |  4 ++--
 src/gallium/drivers/zink/zink_framebuffer.c |  6 +-----
 src/gallium/drivers/zink/zink_framebuffer.h |  1 -
 src/gallium/drivers/zink/zink_program.c     | 29 -----------------------------
 src/gallium/drivers/zink/zink_program.h     |  1 -
 src/gallium/drivers/zink/zink_render_pass.c |  8 --------
 src/gallium/drivers/zink/zink_render_pass.h | 18 ------------------
 9 files changed, 3 insertions(+), 66 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c
index d7fc1220360..bb8d8f364b8 100644
--- a/src/gallium/drivers/zink/zink_batch.c
+++ b/src/gallium/drivers/zink/zink_batch.c
@@ -18,7 +18,6 @@ zink_batch_release(struct zink_screen *screen, struct zink_batch *batch)
 {
    zink_fence_reference(screen, &batch->fence, NULL);
 
-   zink_render_pass_reference(screen, &batch->rp, NULL);
    zink_framebuffer_reference(screen, &batch->fb, NULL);
    set_foreach(batch->programs, entry) {
       struct zink_gfx_program *prog = (struct zink_gfx_program*)entry->key;
diff --git a/src/gallium/drivers/zink/zink_batch.h b/src/gallium/drivers/zink/zink_batch.h
index 20c07766450..ee0367ca924 100644
--- a/src/gallium/drivers/zink/zink_batch.h
+++ b/src/gallium/drivers/zink/zink_batch.h
@@ -47,7 +47,6 @@ struct zink_batch {
    int descs_left;
    struct zink_fence *fence;
 
-   struct zink_render_pass *rp;
    struct zink_framebuffer *fb;
    struct set *programs;
 
diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c
index 4213d76ca42..3f0cea6a3f1 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -814,7 +814,7 @@ zink_batch_rp(struct zink_context *ctx)
    struct zink_batch *batch = zink_curr_batch(ctx);
    if (!batch->in_rp) {
       zink_begin_render_pass(ctx, batch);
-      assert(batch->rp);
+      assert(batch->fb && batch->fb->state.rp);
    }
    return batch;
 }
@@ -847,7 +847,7 @@ zink_set_framebuffer_state(struct pipe_context *pctx,
       zink_framebuffer_reference(screen, &fb, NULL);
    fb = create_framebuffer(ctx);
    zink_framebuffer_reference(screen, &ctx->framebuffer, fb);
-   zink_render_pass_reference(screen, &ctx->gfx_pipeline_state.render_pass, fb->rp);
+   ctx->gfx_pipeline_state.render_pass = fb->state.rp;
 
    uint8_t rast_samples = util_framebuffer_get_num_samples(state);
    /* in vulkan, gl_SampleMask needs to be explicitly ignored for sampleCount == 1 */
diff --git a/src/gallium/drivers/zink/zink_framebuffer.c b/src/gallium/drivers/zink/zink_framebuffer.c
index 102e7f82805..41de02d0ab8 100644
--- a/src/gallium/drivers/zink/zink_framebuffer.c
+++ b/src/gallium/drivers/zink/zink_framebuffer.c
@@ -69,8 +69,6 @@ zink_destroy_framebuffer(struct zink_screen *screen,
 
    pipe_surface_reference(&fbuf->null_surface, NULL);
 
-   zink_render_pass_reference(screen, &fbuf->rp, NULL);
-
    FREE(fbuf);
 }
 
@@ -95,11 +93,9 @@ zink_create_framebuffer(struct zink_context *ctx, struct zink_screen *screen,
       }
    }
 
-   zink_render_pass_reference(screen, &fbuf->rp, fb->rp);
-
    VkFramebufferCreateInfo fci = {};
    fci.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
-   fci.renderPass = fbuf->rp->render_pass;
+   fci.renderPass = fb->rp->render_pass;
    fci.attachmentCount = fb->num_attachments;
    fci.pAttachments = fb->attachments;
    fci.width = fb->width;
diff --git a/src/gallium/drivers/zink/zink_framebuffer.h b/src/gallium/drivers/zink/zink_framebuffer.h
index 55b721ea21d..1950ea23b0b 100644
--- a/src/gallium/drivers/zink/zink_framebuffer.h
+++ b/src/gallium/drivers/zink/zink_framebuffer.h
@@ -47,7 +47,6 @@ struct zink_framebuffer {
    VkFramebuffer fb;
 
    struct pipe_surface *surfaces[PIPE_MAX_COLOR_BUFS + 1];
-   struct zink_render_pass *rp;
    struct pipe_surface *null_surface; /* for use with unbound attachments */
    struct zink_framebuffer_state state;
 };
diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c
index 3ab700d71fd..021866b8087 100644
--- a/src/gallium/drivers/zink/zink_program.c
+++ b/src/gallium/drivers/zink/zink_program.c
@@ -431,11 +431,6 @@ zink_create_gfx_program(struct zink_context *ctx,
    if (!prog->layout)
       goto fail;
 
-   prog->render_passes = _mesa_set_create(NULL, _mesa_hash_pointer,
-                                          _mesa_key_pointer_equal);
-   if (!prog->render_passes)
-      goto fail;
-
    return prog;
 
 fail:
@@ -471,15 +466,6 @@ zink_destroy_gfx_program(struct zink_screen *screen,
          zink_shader_module_reference(screen, &prog->modules[i], NULL);
    }
 
-   /* unref all used render-passes */
-   if (prog->render_passes) {
-      set_foreach(prog->render_passes, entry) {
-         struct zink_render_pass *pres = (struct zink_render_pass *)entry->key;
-         zink_render_pass_reference(screen, &pres, NULL);
-      }
-      _mesa_set_destroy(prog->render_passes, NULL);
-   }
-
    for (int i = 0; i < ARRAY_SIZE(prog->pipelines); ++i) {
       hash_table_foreach(prog->pipelines[i], entry) {
          struct pipeline_cache_entry *pc_entry = entry->data;
@@ -536,19 +522,6 @@ primitive_topology(enum pipe_prim_type mode)
    }
 }
 
-static void
-reference_render_pass(struct zink_screen *screen,
-                      struct zink_gfx_program *prog,
-                      struct zink_render_pass *render_pass)
-{
-   struct set_entry *entry = _mesa_set_search(prog->render_passes,
-                                              render_pass);
-   if (!entry) {
-      entry = _mesa_set_add(prog->render_passes, render_pass);
-      pipe_reference(NULL, &render_pass->reference);
-   }
-}
-
 VkPipeline
 zink_get_gfx_pipeline(struct zink_screen *screen,
                       struct zink_gfx_program *prog,
@@ -584,8 +557,6 @@ zink_get_gfx_pipeline(struct zink_screen *screen,
 
       entry = _mesa_hash_table_insert_pre_hashed(prog->pipelines[vkmode], state->hash, state, pc_entry);
       assert(entry);
-
-      reference_render_pass(screen, prog, state->render_pass);
    }
 
    return ((struct pipeline_cache_entry *)(entry->data))->pipeline;
diff --git a/src/gallium/drivers/zink/zink_program.h b/src/gallium/drivers/zink/zink_program.h
index 176c2de4695..9d726f67fe3 100644
--- a/src/gallium/drivers/zink/zink_program.h
+++ b/src/gallium/drivers/zink/zink_program.h
@@ -67,7 +67,6 @@ struct zink_gfx_program {
    VkPipelineLayout layout;
    unsigned num_descriptors;
    struct hash_table *pipelines[11]; // number of draw modes we support
-   struct set *render_passes;
 };
 
 
diff --git a/src/gallium/drivers/zink/zink_render_pass.c b/src/gallium/drivers/zink/zink_render_pass.c
index d1472a090e3..b1eb9015bd8 100644
--- a/src/gallium/drivers/zink/zink_render_pass.c
+++ b/src/gallium/drivers/zink/zink_render_pass.c
@@ -95,8 +95,6 @@ zink_create_render_pass(struct zink_screen *screen,
    if (!rp)
       goto fail;
 
-   pipe_reference_init(&rp->reference, 1);
-
    rp->render_pass = create_render_pass(screen->dev, state);
    if (!rp->render_pass)
       goto fail;
@@ -116,9 +114,3 @@ zink_destroy_render_pass(struct zink_screen *screen,
    vkDestroyRenderPass(screen->dev, rp->render_pass, NULL);
    FREE(rp);
 }
-
-void
-debug_describe_zink_render_pass(char* buf, const struct zink_render_pass *ptr)
-{
-   sprintf(buf, "zink_render_pass");
-}
diff --git a/src/gallium/drivers/zink/zink_render_pass.h b/src/gallium/drivers/zink/zink_render_pass.h
index f8d5a992cab..577b92c9065 100644
--- a/src/gallium/drivers/zink/zink_render_pass.h
+++ b/src/gallium/drivers/zink/zink_render_pass.h
@@ -44,8 +44,6 @@ struct zink_render_pass_state {
 };
 
 struct zink_render_pass {
-   struct pipe_reference reference;
-
    VkRenderPass render_pass;
    struct zink_render_pass_state state;
 };
@@ -58,20 +56,4 @@ void
 zink_destroy_render_pass(struct zink_screen *screen,
                          struct zink_render_pass *rp);
 
-void
-debug_describe_zink_render_pass(char* buf, const struct zink_render_pass *ptr);
-
-static inline void
-zink_render_pass_reference(struct zink_screen *screen,
-                           struct zink_render_pass **dst,
-                           struct zink_render_pass *src)
-{
-   struct zink_render_pass *old_dst = *dst;
-
-   if (pipe_reference_described(&old_dst->reference, &src->reference,
-                                (debug_reference_descriptor)debug_describe_zink_render_pass))
-      zink_destroy_render_pass(screen, old_dst);
-   *dst = src;
-}
-
 #endif



More information about the mesa-commit mailing list