Mesa (main): zink: delete all non-imageless framebuffer code
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Apr 18 23:55:48 UTC 2022
Module: Mesa
Branch: main
Commit: fe8212791f121cb3595cef1fd60cd1d92be1d4cc
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fe8212791f121cb3595cef1fd60cd1d92be1d4cc
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Tue Apr 12 14:59:16 2022 -0400
zink: delete all non-imageless framebuffer code
hooray it's finally gone
Acked-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15904>
---
src/gallium/drivers/zink/zink_context.c | 95 +++++-----------
src/gallium/drivers/zink/zink_framebuffer.c | 171 ----------------------------
src/gallium/drivers/zink/zink_framebuffer.h | 5 -
src/gallium/drivers/zink/zink_screen.c | 27 -----
src/gallium/drivers/zink/zink_surface.c | 2 -
5 files changed, 29 insertions(+), 271 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c
index d1866b5fc79..aab0473a3b5 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -139,16 +139,8 @@ zink_context_destroy(struct pipe_context *pctx)
util_dynarray_fini(&ctx->di.bindless[i].resident);
}
- if (screen->info.have_KHR_imageless_framebuffer) {
- hash_table_foreach(&ctx->framebuffer_cache, he)
- zink_destroy_framebuffer(screen, he->data);
- } else if (ctx->framebuffer) {
- simple_mtx_lock(&screen->framebuffer_mtx);
- struct hash_entry *entry = _mesa_hash_table_search(&screen->framebuffer_cache, &ctx->framebuffer->state);
- if (zink_framebuffer_reference(screen, &ctx->framebuffer, NULL))
- _mesa_hash_table_remove(&screen->framebuffer_cache, entry);
- simple_mtx_unlock(&screen->framebuffer_mtx);
- }
+ hash_table_foreach(&ctx->framebuffer_cache, he)
+ zink_destroy_framebuffer(screen, he->data);
hash_table_foreach(ctx->render_pass_cache, he)
zink_destroy_render_pass(screen, he->data);
@@ -2137,26 +2129,6 @@ update_framebuffer_state(struct zink_context *ctx, int old_w, int old_h)
* we're about to use
*/
struct zink_framebuffer *fb = ctx->get_framebuffer(ctx);
- struct zink_screen *screen = zink_screen(ctx->base.screen);
- if (ctx->framebuffer && !screen->info.have_KHR_imageless_framebuffer) {
- simple_mtx_lock(&screen->framebuffer_mtx);
- struct hash_entry *he = _mesa_hash_table_search(&screen->framebuffer_cache, &ctx->framebuffer->state);
- if (ctx->framebuffer && !ctx->framebuffer->state.num_attachments) {
- /* if this has no attachments then its lifetime has ended */
- _mesa_hash_table_remove(&screen->framebuffer_cache, he);
- he = NULL;
- /* ensure an unflushed fb doesn't get destroyed by deferring it */
- util_dynarray_append(&ctx->batch.state->dead_framebuffers, struct zink_framebuffer*, ctx->framebuffer);
- ctx->framebuffer = NULL;
- }
- /* a framebuffer loses 1 ref every time we unset it;
- * we do NOT add refs here, as the ref has already been added in
- * get_framebuffer()
- */
- if (zink_framebuffer_reference(screen, &ctx->framebuffer, NULL) && he)
- _mesa_hash_table_remove(&screen->framebuffer_cache, he);
- simple_mtx_unlock(&screen->framebuffer_mtx);
- }
ctx->fb_changed |= ctx->framebuffer != fb;
ctx->framebuffer = fb;
}
@@ -2355,36 +2327,34 @@ begin_render_pass(struct zink_context *ctx)
infos.attachmentCount = ctx->framebuffer->state.num_attachments;
infos.pAttachments = att;
prep_fb_attachments(ctx, att);
- if (zink_screen(ctx->base.screen)->info.have_KHR_imageless_framebuffer) {
#ifndef NDEBUG
- const unsigned cresolve_offset = ctx->fb_state.nr_cbufs + !!ctx->fb_state.zsbuf;
- for (int i = 0; i < ctx->fb_state.nr_cbufs; i++) {
- if (ctx->fb_state.cbufs[i]) {
- struct zink_surface *surf = zink_csurface(ctx->fb_state.cbufs[i]);
- struct zink_surface *transient = zink_transient_surface(ctx->fb_state.cbufs[i]);
- if (surf->base.format == ctx->fb_state.cbufs[i]->format) {
- if (transient) {
- assert(zink_resource(transient->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[i].usage);
- assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[cresolve_offset].usage);
- } else {
- assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[i].usage);
- }
+ const unsigned cresolve_offset = ctx->fb_state.nr_cbufs + !!ctx->fb_state.zsbuf;
+ for (int i = 0; i < ctx->fb_state.nr_cbufs; i++) {
+ if (ctx->fb_state.cbufs[i]) {
+ struct zink_surface *surf = zink_csurface(ctx->fb_state.cbufs[i]);
+ struct zink_surface *transient = zink_transient_surface(ctx->fb_state.cbufs[i]);
+ if (surf->base.format == ctx->fb_state.cbufs[i]->format) {
+ if (transient) {
+ assert(zink_resource(transient->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[i].usage);
+ assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[cresolve_offset].usage);
+ } else {
+ assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[i].usage);
}
}
}
- if (ctx->fb_state.zsbuf) {
- struct zink_surface *surf = zink_csurface(ctx->fb_state.zsbuf);
- struct zink_surface *transient = zink_transient_surface(ctx->fb_state.zsbuf);
- if (transient) {
- assert(zink_resource(transient->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[ctx->fb_state.nr_cbufs].usage);
- assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[cresolve_offset].usage);
- } else {
- assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[ctx->fb_state.nr_cbufs].usage);
- }
+ }
+ if (ctx->fb_state.zsbuf) {
+ struct zink_surface *surf = zink_csurface(ctx->fb_state.zsbuf);
+ struct zink_surface *transient = zink_transient_surface(ctx->fb_state.zsbuf);
+ if (transient) {
+ assert(zink_resource(transient->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[ctx->fb_state.nr_cbufs].usage);
+ assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[cresolve_offset].usage);
+ } else {
+ assert(zink_resource(surf->base.texture)->obj->vkusage == ctx->framebuffer->state.infos[ctx->fb_state.nr_cbufs].usage);
}
-#endif
- rpbi.pNext = &infos;
}
+#endif
+ rpbi.pNext = &infos;
VKCTX(CmdBeginRenderPass)(batch->state->cmdbuf, &rpbi, VK_SUBPASS_CONTENTS_INLINE);
batch->in_rp = true;
@@ -3887,11 +3857,9 @@ zink_rebind_framebuffer(struct zink_context *ctx, struct zink_resource *res)
return;
zink_batch_no_rp(ctx);
- if (zink_screen(ctx->base.screen)->info.have_KHR_imageless_framebuffer) {
- struct zink_framebuffer *fb = ctx->get_framebuffer(ctx);
- ctx->fb_changed |= ctx->framebuffer != fb;
- ctx->framebuffer = fb;
- }
+ struct zink_framebuffer *fb = ctx->get_framebuffer(ctx);
+ ctx->fb_changed |= ctx->framebuffer != fb;
+ ctx->framebuffer = fb;
}
ALWAYS_INLINE static struct zink_resource *
@@ -4247,13 +4215,8 @@ zink_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags)
ctx->base.screen = pscreen;
ctx->base.priv = priv;
- if (screen->info.have_KHR_imageless_framebuffer) {
- ctx->get_framebuffer = zink_get_framebuffer_imageless;
- ctx->init_framebuffer = zink_init_framebuffer_imageless;
- } else {
- ctx->get_framebuffer = zink_get_framebuffer;
- ctx->init_framebuffer = zink_init_framebuffer;
- }
+ ctx->get_framebuffer = zink_get_framebuffer_imageless;
+ ctx->init_framebuffer = zink_init_framebuffer_imageless;
ctx->base.destroy = zink_context_destroy;
ctx->base.get_device_reset_status = zink_get_device_reset_status;
diff --git a/src/gallium/drivers/zink/zink_framebuffer.c b/src/gallium/drivers/zink/zink_framebuffer.c
index c3eda61c94d..46f44552cfe 100644
--- a/src/gallium/drivers/zink/zink_framebuffer.c
+++ b/src/gallium/drivers/zink/zink_framebuffer.c
@@ -202,179 +202,8 @@ zink_get_framebuffer_imageless(struct zink_context *ctx)
return fb;
}
-void
-zink_init_framebuffer(struct zink_screen *screen, struct zink_framebuffer *fb, struct zink_render_pass *rp)
-{
- VkFramebuffer ret;
-
- if (fb->rp == rp)
- return;
-
- uint32_t hash = _mesa_hash_pointer(rp);
-
- struct hash_entry *he = _mesa_hash_table_search_pre_hashed(&fb->objects, hash, rp);
- if (he) {
-#if defined(_WIN64) || defined(__x86_64__)
- ret = (VkFramebuffer)he->data;
-#else
- VkFramebuffer *ptr = he->data;
- ret = *ptr;
-#endif
- goto out;
- }
-
- assert(rp->state.num_cbufs + rp->state.have_zsbuf + rp->state.num_cresolves + rp->state.num_zsresolves == fb->state.num_attachments);
-
- VkFramebufferCreateInfo fci = {0};
- fci.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
- fci.renderPass = rp->render_pass;
- fci.attachmentCount = fb->state.num_attachments;
- fci.pAttachments = fb->state.attachments;
- fci.width = fb->state.width;
- fci.height = fb->state.height;
- fci.layers = fb->state.layers + 1;
-
- if (VKSCR(CreateFramebuffer)(screen->dev, &fci, NULL, &ret) != VK_SUCCESS)
- return;
-#if defined(_WIN64) || defined(__x86_64__)
- _mesa_hash_table_insert_pre_hashed(&fb->objects, hash, rp, ret);
-#else
- VkFramebuffer *ptr = ralloc(fb, VkFramebuffer);
- if (!ptr) {
- VKSCR(DestroyFramebuffer)(screen->dev, ret, NULL);
- return;
- }
- *ptr = ret;
- _mesa_hash_table_insert_pre_hashed(&fb->objects, hash, rp, ptr);
-#endif
-out:
- fb->rp = rp;
- fb->fb = ret;
-}
-
-static struct zink_framebuffer *
-create_framebuffer(struct zink_context *ctx,
- struct zink_framebuffer_state *state,
- struct pipe_surface **attachments)
-{
- struct zink_screen *screen = zink_screen(ctx->base.screen);
- struct zink_framebuffer *fb = rzalloc(NULL, struct zink_framebuffer);
- if (!fb)
- return NULL;
-
- unsigned num_attachments = 0;
- for (int i = 0; i < state->num_attachments; i++) {
- struct zink_surface *surf;
- if (state->attachments[i]) {
- surf = zink_csurface(attachments[i]);
- /* no ref! */
- fb->surfaces[i] = attachments[i];
- num_attachments++;
- util_dynarray_append(&surf->framebuffer_refs, struct zink_framebuffer*, fb);
- } else {
- surf = zink_csurface(ctx->dummy_surface[util_logbase2_ceil(state->samples+1)]);
- state->attachments[i] = surf->image_view;
- }
- }
- pipe_reference_init(&fb->reference, 1 + num_attachments);
-
- if (!_mesa_hash_table_init(&fb->objects, fb, _mesa_hash_pointer, _mesa_key_pointer_equal))
- goto fail;
- memcpy(&fb->state, state, sizeof(struct zink_framebuffer_state));
-
- return fb;
-fail:
- zink_destroy_framebuffer(screen, fb);
- return NULL;
-}
-
void
debug_describe_zink_framebuffer(char* buf, const struct zink_framebuffer *ptr)
{
sprintf(buf, "zink_framebuffer");
}
-
-struct zink_framebuffer *
-zink_get_framebuffer(struct zink_context *ctx)
-{
- struct zink_screen *screen = zink_screen(ctx->base.screen);
-
- assert(!screen->info.have_KHR_imageless_framebuffer);
-
- struct pipe_surface *attachments[2 * (PIPE_MAX_COLOR_BUFS + 1)] = {0};
- const unsigned cresolve_offset = ctx->fb_state.nr_cbufs + !!ctx->fb_state.zsbuf;
- unsigned num_resolves = 0;
-
- struct zink_framebuffer_state state = {0};
- if (!zink_use_dummy_attachments(ctx)) {
- for (int i = 0; i < ctx->fb_state.nr_cbufs; i++) {
- struct pipe_surface *psurf = ctx->fb_state.cbufs[i];
- if (psurf) {
- struct zink_surface *surf = zink_csurface(psurf);
- struct zink_surface *transient = zink_transient_surface(psurf);
- if (transient) {
- state.attachments[i] = transient->image_view;
- state.attachments[cresolve_offset + i] = surf->image_view;
- attachments[cresolve_offset + i] = psurf;
- psurf = &transient->base;
- num_resolves++;
- } else {
- state.attachments[i] = surf->image_view;
- }
- } else {
- state.attachments[i] = VK_NULL_HANDLE;
- }
- attachments[i] = psurf;
- }
- }
-
- state.num_attachments = ctx->fb_state.nr_cbufs;
- const unsigned zsresolve_offset = cresolve_offset + num_resolves;
- if (ctx->fb_state.zsbuf) {
- struct pipe_surface *psurf = ctx->fb_state.zsbuf;
- if (psurf) {
- struct zink_surface *surf = zink_csurface(psurf);
- struct zink_surface *transient = zink_transient_surface(psurf);
- if (transient) {
- state.attachments[state.num_attachments] = transient->image_view;
- state.attachments[zsresolve_offset] = surf->image_view;
- attachments[zsresolve_offset] = psurf;
- psurf = &transient->base;
- num_resolves++;
- } else {
- state.attachments[state.num_attachments] = surf->image_view;
- }
- } else {
- state.attachments[state.num_attachments] = VK_NULL_HANDLE;
- }
- attachments[state.num_attachments++] = psurf;
- }
-
- /* avoid bitfield explosion */
- assert(state.num_attachments + num_resolves < 16);
- state.num_attachments += num_resolves;
- state.width = MAX2(ctx->fb_state.width, 1);
- state.height = MAX2(ctx->fb_state.height, 1);
- state.layers = MAX2(util_framebuffer_get_num_layers(&ctx->fb_state), 1) - 1;
- state.samples = ctx->fb_state.samples - 1;
-
- struct zink_framebuffer *fb;
- simple_mtx_lock(&screen->framebuffer_mtx);
- struct hash_entry *entry = _mesa_hash_table_search(&screen->framebuffer_cache, &state);
- if (entry) {
- fb = (void*)entry->data;
- struct zink_framebuffer *fb_ref = NULL;
- /* this gains 1 ref every time we reuse it */
- zink_framebuffer_reference(screen, &fb_ref, fb);
- } else {
- /* this adds 1 extra ref on creation because all newly-created framebuffers are
- * going to be bound; necessary to handle framebuffers which have no "real" attachments
- * and are only using null surfaces since the only ref they get is the extra one here
- */
- fb = create_framebuffer(ctx, &state, attachments);
- _mesa_hash_table_insert(&screen->framebuffer_cache, &fb->state, fb);
- }
- simple_mtx_unlock(&screen->framebuffer_mtx);
-
- return fb;
-}
diff --git a/src/gallium/drivers/zink/zink_framebuffer.h b/src/gallium/drivers/zink/zink_framebuffer.h
index 4fb8bf67b90..669d3e7b2f4 100644
--- a/src/gallium/drivers/zink/zink_framebuffer.h
+++ b/src/gallium/drivers/zink/zink_framebuffer.h
@@ -61,8 +61,6 @@ struct zink_framebuffer {
struct hash_table objects;
};
-void
-zink_init_framebuffer(struct zink_screen *screen, struct zink_framebuffer *fb, struct zink_render_pass *rp);
void
zink_init_framebuffer_imageless(struct zink_screen *screen, struct zink_framebuffer *fb, struct zink_render_pass *rp);
@@ -92,7 +90,4 @@ zink_framebuffer_reference(struct zink_screen *screen,
struct zink_framebuffer *
zink_get_framebuffer_imageless(struct zink_context *ctx);
-
-struct zink_framebuffer *
-zink_get_framebuffer(struct zink_context *ctx);
#endif
diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index fc16d75ebea..2abbef81df6 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -138,20 +138,6 @@ zink_get_device_uuid(struct pipe_screen *pscreen, char *uuid)
}
}
-static uint32_t
-hash_framebuffer_state(const void *key)
-{
- struct zink_framebuffer_state* s = (struct zink_framebuffer_state*)key;
- return _mesa_hash_data(key, offsetof(struct zink_framebuffer_state, attachments) + sizeof(s->attachments[0]) * s->num_attachments);
-}
-
-static bool
-equals_framebuffer_state(const void *a, const void *b)
-{
- struct zink_framebuffer_state *s = (struct zink_framebuffer_state*)a;
- return memcmp(a, b, offsetof(struct zink_framebuffer_state, attachments) + sizeof(s->attachments[0]) * s->num_attachments) == 0;
-}
-
static VkDeviceSize
get_video_mem(struct zink_screen *screen)
{
@@ -1220,14 +1206,6 @@ zink_destroy_screen(struct pipe_screen *pscreen)
VKSCR(DestroyDebugUtilsMessengerEXT)(screen->instance, screen->debugUtilsCallbackHandle, NULL);
}
- if (!screen->info.have_KHR_imageless_framebuffer) {
- hash_table_foreach(&screen->framebuffer_cache, entry) {
- struct zink_framebuffer* fb = (struct zink_framebuffer*)entry->data;
- zink_destroy_framebuffer(screen, fb);
- }
- simple_mtx_destroy(&screen->framebuffer_mtx);
- }
-
u_transfer_helper_destroy(pscreen->transfer_helper);
#ifdef ENABLE_SHADER_CACHE
if (screen->disk_cache) {
@@ -2238,11 +2216,6 @@ zink_internal_create_screen(const struct pipe_screen_config *config)
screen->resizable_bar = true;
}
- if (!screen->info.have_KHR_imageless_framebuffer) {
- simple_mtx_init(&screen->framebuffer_mtx, mtx_plain);
- _mesa_hash_table_init(&screen->framebuffer_cache, screen, hash_framebuffer_state, equals_framebuffer_state);
- }
-
simple_mtx_init(&screen->dt_lock, mtx_plain);
zink_screen_init_descriptor_funcs(screen, false);
diff --git a/src/gallium/drivers/zink/zink_surface.c b/src/gallium/drivers/zink/zink_surface.c
index 6cf98a5e337..bdacaf60e32 100644
--- a/src/gallium/drivers/zink/zink_surface.c
+++ b/src/gallium/drivers/zink/zink_surface.c
@@ -336,8 +336,6 @@ zink_destroy_surface(struct zink_screen *screen, struct pipe_surface *psurface)
_mesa_hash_table_remove(&res->surface_cache, he);
simple_mtx_unlock(&res->surface_mtx);
}
- if (!screen->info.have_KHR_imageless_framebuffer)
- surface_clear_fb_refs(screen, psurface);
zink_descriptor_set_refs_clear(&surface->desc_set_refs, surface);
util_dynarray_fini(&surface->framebuffer_refs);
if (surface->simage_view)
More information about the mesa-commit
mailing list