mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-08 15:00:11 +01:00
etnaviv: add function to get resource status
Don't access the status member of etna_resource directly, as this go away to get rid of shared mutable state. Add a wrapper function that allows to plug in the new status lookup. Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14466>
This commit is contained in:
parent
ce4e5198a3
commit
a11fa44b2d
4 changed files with 13 additions and 6 deletions
|
|
@ -118,7 +118,7 @@ etna_acc_get_query_result(struct etna_context *ctx, struct etna_query *q,
|
|||
|
||||
assert(list_is_empty(&aq->node));
|
||||
|
||||
if (rsc->status & ETNA_PENDING_WRITE) {
|
||||
if (etna_resource_status(ctx, rsc) & ETNA_PENDING_WRITE) {
|
||||
if (!wait) {
|
||||
/* piglit spec@arb_occlusion_query@occlusion_query_conform
|
||||
* test, and silly apps perhaps, get stuck in a loop trying
|
||||
|
|
|
|||
|
|
@ -169,6 +169,12 @@ resource_written(struct etna_context *ctx, struct pipe_resource *prsc)
|
|||
etna_resource_used(ctx, prsc, ETNA_PENDING_WRITE);
|
||||
}
|
||||
|
||||
static inline enum etna_resource_status
|
||||
etna_resource_status(struct etna_context *ctx, struct etna_resource *res)
|
||||
{
|
||||
return res->status;
|
||||
}
|
||||
|
||||
/* Allocate Tile Status for an etna resource.
|
||||
* Tile status is a cache of the clear status per tile. This means a smaller
|
||||
* surface has to be cleared which is faster.
|
||||
|
|
|
|||
|
|
@ -805,8 +805,8 @@ etna_try_rs_blit(struct pipe_context *pctx,
|
|||
|
||||
manual:
|
||||
if (src->layout == ETNA_LAYOUT_TILED && dst->layout == ETNA_LAYOUT_TILED) {
|
||||
if ((src->status & ETNA_PENDING_WRITE) ||
|
||||
(dst->status & ETNA_PENDING_WRITE))
|
||||
if ((etna_resource_status(ctx, src) & ETNA_PENDING_WRITE) ||
|
||||
(etna_resource_status(ctx, dst) & ETNA_PENDING_WRITE))
|
||||
pctx->flush(pctx, NULL, 0);
|
||||
return etna_manual_blit(dst, dst_lev, dst_offset, src, src_lev, src_offset, blit_info);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -374,6 +374,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);
|
||||
uint32_t prep_flags = 0;
|
||||
|
||||
/*
|
||||
|
|
@ -384,10 +385,10 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc,
|
|||
*/
|
||||
mtx_lock(&ctx->lock);
|
||||
|
||||
if ((trans->rsc && (etna_resource(trans->rsc)->status & ETNA_PENDING_WRITE)) ||
|
||||
if ((trans->rsc && (status & ETNA_PENDING_WRITE)) ||
|
||||
(!trans->rsc &&
|
||||
(((usage & PIPE_MAP_READ) && (rsc->status & ETNA_PENDING_WRITE)) ||
|
||||
((usage & PIPE_MAP_WRITE) && rsc->status)))) {
|
||||
(((usage & PIPE_MAP_READ) && (status & ETNA_PENDING_WRITE)) ||
|
||||
((usage & PIPE_MAP_WRITE) && status)))) {
|
||||
mtx_lock(&rsc->lock);
|
||||
set_foreach(rsc->pending_ctx, entry) {
|
||||
struct etna_context *pend_ctx = (struct etna_context *)entry->key;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue