etnaviv: split adding resource to context flush set into own function

It is needed in a few more places, so split it into a separate
function to make it reusable.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20012>
This commit is contained in:
Lucas Stach
2022-11-25 20:21:21 +01:00
committed by Marge Bot
parent a6e487e367
commit cf501a7f34
3 changed files with 19 additions and 8 deletions

View File

@@ -52,6 +52,7 @@
#include "util/u_blitter.h" #include "util/u_blitter.h"
#include "util/u_draw.h" #include "util/u_draw.h"
#include "util/u_helpers.h" #include "util/u_helpers.h"
#include "util/u_inlines.h"
#include "util/u_memory.h" #include "util/u_memory.h"
#include "util/u_prim.h" #include "util/u_prim.h"
#include "util/u_upload_mgr.h" #include "util/u_upload_mgr.h"
@@ -546,6 +547,18 @@ etna_context_force_flush(struct etna_cmd_stream *stream, void *priv)
} }
void
etna_context_add_flush_resource(struct etna_context *ctx,
struct pipe_resource *rsc)
{
bool found;
_mesa_set_search_or_add(ctx->flush_resources, rsc, &found);
if (!found)
pipe_reference(NULL, &rsc->reference);
}
static void static void
etna_set_debug_callback(struct pipe_context *pctx, etna_set_debug_callback(struct pipe_context *pctx,
const struct util_debug_callback *cb) const struct util_debug_callback *cb)

View File

@@ -216,4 +216,8 @@ etna_transfer(struct pipe_transfer *p)
struct pipe_context * struct pipe_context *
etna_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags); etna_context_create(struct pipe_screen *pscreen, void *priv, unsigned flags);
void
etna_context_add_flush_resource(struct etna_context *ctx,
struct pipe_resource *rsc);
#endif #endif

View File

@@ -803,14 +803,8 @@ etna_record_flush_resources(struct etna_context *ctx)
if (fb->nr_cbufs > 0) { if (fb->nr_cbufs > 0) {
struct etna_surface *surf = etna_surface(fb->cbufs[0]); struct etna_surface *surf = etna_surface(fb->cbufs[0]);
if (!etna_resource(surf->prsc)->explicit_flush) { if (!etna_resource(surf->prsc)->explicit_flush)
bool found; etna_context_add_flush_resource(ctx, surf->prsc);
_mesa_set_search_or_add(ctx->flush_resources, surf->prsc, &found);
if (!found)
pipe_reference(NULL, &surf->prsc->reference);
}
} }
return true; return true;