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