etnaviv: use pipe_resource in etna_resource_status

This aligns the prototype with etna_resource_used and allows to
track different resource specializations in the same datastructure.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/34061>
This commit is contained in:
Lucas Stach
2024-04-16 19:25:30 +02:00
committed by Marge Bot
parent 69a08fd9b2
commit d46a8c32b5
6 changed files with 12 additions and 13 deletions

View File

@@ -387,7 +387,7 @@ etna_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info,
*
* This isn't implemented right now, so we don't support GPU written indirect buffers for now.
*/
assert(!(etna_resource_status(ctx, etna_resource(indirect->buffer)) & ETNA_PENDING_WRITE));
assert(!(etna_resource_status(ctx, indirect->buffer) & ETNA_PENDING_WRITE));
resource_read(ctx, indirect->buffer);
}

View File

@@ -124,7 +124,7 @@ etna_acc_get_query_result(struct etna_context *ctx, struct etna_query *q,
* So, regardless of whether we are supposed to wait or not, we do need to
* flush now.
*/
if (etna_resource_status(ctx, rsc) & ETNA_PENDING_WRITE)
if (etna_resource_status(ctx, &rsc->base) & ETNA_PENDING_WRITE)
etna_flush(&ctx->base, NULL, 0, true);
if (!wait)

View File

@@ -872,32 +872,31 @@ void
etna_resource_used(struct etna_context *ctx, struct pipe_resource *prsc,
enum etna_resource_status status)
{
struct etna_resource *rsc;
struct hash_entry *entry;
uint32_t hash;
if (!prsc)
return;
rsc = etna_resource(prsc);
hash = _mesa_hash_pointer(rsc);
hash = _mesa_hash_pointer(prsc);
entry = _mesa_hash_table_search_pre_hashed(ctx->pending_resources,
hash, rsc);
hash, prsc);
if (entry) {
enum etna_resource_status tmp = (uintptr_t)entry->data;
tmp |= status;
entry->data = (void *)(uintptr_t)tmp;
} else {
_mesa_hash_table_insert_pre_hashed(ctx->pending_resources, hash, rsc,
_mesa_hash_table_insert_pre_hashed(ctx->pending_resources, hash, prsc,
(void *)(uintptr_t)status);
}
}
enum etna_resource_status
etna_resource_status(struct etna_context *ctx, struct etna_resource *res)
etna_resource_status(struct etna_context *ctx, struct pipe_resource *prsc)
{
struct hash_entry *entry = _mesa_hash_table_search(ctx->pending_resources, res);
struct hash_entry *entry = _mesa_hash_table_search(ctx->pending_resources,
prsc);
if (entry)
return (enum etna_resource_status)(uintptr_t)entry->data;

View File

@@ -304,7 +304,7 @@ resource_written(struct etna_context *ctx, struct pipe_resource *prsc)
}
enum etna_resource_status
etna_resource_status(struct etna_context *ctx, struct etna_resource *res);
etna_resource_status(struct etna_context *ctx, struct pipe_resource *prsc);
/* Allocate Tile Status for an etna resource.
* Tile status is a cache of the clear status per tile. This means a smaller

View File

@@ -892,8 +892,8 @@ etna_try_rs_blit(struct pipe_context *pctx,
manual:
if (src->layout == ETNA_LAYOUT_TILED && dst->layout == ETNA_LAYOUT_TILED) {
if ((etna_resource_status(ctx, src) & ETNA_PENDING_WRITE) ||
(etna_resource_status(ctx, dst) & ETNA_PENDING_WRITE))
if ((etna_resource_status(ctx, &src->base) & ETNA_PENDING_WRITE) ||
(etna_resource_status(ctx, &dst->base) & ETNA_PENDING_WRITE))
etna_flush(pctx, NULL, 0, true);
perf_debug_ctx(ctx, "RS blit falls back to sw");

View File

@@ -322,7 +322,7 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc,
* transfers without a temporary resource.
*/
if (trans->rsc || !(usage & PIPE_MAP_UNSYNCHRONIZED)) {
enum etna_resource_status status = etna_resource_status(ctx, rsc);
enum etna_resource_status status = etna_resource_status(ctx, &rsc->base);
uint32_t prep_flags = 0;
/*