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.
|
* 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);
|
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
|
* So, regardless of whether we are supposed to wait or not, we do need to
|
||||||
* flush now.
|
* 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);
|
etna_flush(&ctx->base, NULL, 0, true);
|
||||||
|
|
||||||
if (!wait)
|
if (!wait)
|
||||||
|
@@ -872,32 +872,31 @@ void
|
|||||||
etna_resource_used(struct etna_context *ctx, struct pipe_resource *prsc,
|
etna_resource_used(struct etna_context *ctx, struct pipe_resource *prsc,
|
||||||
enum etna_resource_status status)
|
enum etna_resource_status status)
|
||||||
{
|
{
|
||||||
struct etna_resource *rsc;
|
|
||||||
struct hash_entry *entry;
|
struct hash_entry *entry;
|
||||||
uint32_t hash;
|
uint32_t hash;
|
||||||
|
|
||||||
if (!prsc)
|
if (!prsc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
rsc = etna_resource(prsc);
|
hash = _mesa_hash_pointer(prsc);
|
||||||
hash = _mesa_hash_pointer(rsc);
|
|
||||||
entry = _mesa_hash_table_search_pre_hashed(ctx->pending_resources,
|
entry = _mesa_hash_table_search_pre_hashed(ctx->pending_resources,
|
||||||
hash, rsc);
|
hash, prsc);
|
||||||
|
|
||||||
if (entry) {
|
if (entry) {
|
||||||
enum etna_resource_status tmp = (uintptr_t)entry->data;
|
enum etna_resource_status tmp = (uintptr_t)entry->data;
|
||||||
tmp |= status;
|
tmp |= status;
|
||||||
entry->data = (void *)(uintptr_t)tmp;
|
entry->data = (void *)(uintptr_t)tmp;
|
||||||
} else {
|
} 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);
|
(void *)(uintptr_t)status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum etna_resource_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)
|
if (entry)
|
||||||
return (enum etna_resource_status)(uintptr_t)entry->data;
|
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
|
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.
|
/* Allocate Tile Status for an etna resource.
|
||||||
* Tile status is a cache of the clear status per tile. This means a smaller
|
* 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:
|
manual:
|
||||||
if (src->layout == ETNA_LAYOUT_TILED && dst->layout == ETNA_LAYOUT_TILED) {
|
if (src->layout == ETNA_LAYOUT_TILED && dst->layout == ETNA_LAYOUT_TILED) {
|
||||||
if ((etna_resource_status(ctx, src) & ETNA_PENDING_WRITE) ||
|
if ((etna_resource_status(ctx, &src->base) & ETNA_PENDING_WRITE) ||
|
||||||
(etna_resource_status(ctx, dst) & ETNA_PENDING_WRITE))
|
(etna_resource_status(ctx, &dst->base) & ETNA_PENDING_WRITE))
|
||||||
etna_flush(pctx, NULL, 0, true);
|
etna_flush(pctx, NULL, 0, true);
|
||||||
|
|
||||||
perf_debug_ctx(ctx, "RS blit falls back to sw");
|
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.
|
* transfers without a temporary resource.
|
||||||
*/
|
*/
|
||||||
if (trans->rsc || !(usage & PIPE_MAP_UNSYNCHRONIZED)) {
|
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;
|
uint32_t prep_flags = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user