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@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8227>
This commit is contained in:
Mike Blumenkrantz 2020-12-24 09:17:23 -05:00 committed by Marge Bot
parent b2e5dadd22
commit c6741f52bd
9 changed files with 3 additions and 66 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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 */

View File

@ -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;

View File

@ -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;
};

View File

@ -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;

View File

@ -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;
};

View File

@ -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");
}

View File

@ -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