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:
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
@@ -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");
|
||||
|
@@ -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;
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user