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