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:
parent
b2e5dadd22
commit
c6741f52bd
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue