X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Ffreedreno%2Ffreedreno_resource.c;h=803054c4f2fa0d569cf0d1bfc84c2974b073062c;hp=0caa3f6756b7ec1db7d1ceefacb4e91960a5f0f3;hb=aae1e68637ff662d45902954390e678516798ecf;hpb=e953f6c001566f8acbbeaa9bf853f03074023b36 diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c b/src/gallium/drivers/freedreno/freedreno_resource.c index 0caa3f6756b..803054c4f2f 100644 --- a/src/gallium/drivers/freedreno/freedreno_resource.c +++ b/src/gallium/drivers/freedreno/freedreno_resource.c @@ -166,6 +166,15 @@ rebind_resource(struct fd_resource *rsc) fd_screen_unlock(screen); } +static inline void +fd_resource_set_bo(struct fd_resource *rsc, struct fd_bo *bo) +{ + struct fd_screen *screen = fd_screen(rsc->base.screen); + + rsc->bo = bo; + rsc->seqno = p_atomic_inc_return(&screen->rsc_seqno); +} + static void realloc_bo(struct fd_resource *rsc, uint32_t size) { @@ -183,8 +192,9 @@ realloc_bo(struct fd_resource *rsc, uint32_t size) if (rsc->bo) fd_bo_del(rsc->bo); - rsc->bo = fd_bo_new(screen->dev, size, flags, "%ux%ux%u@%u:%x", + struct fd_bo *bo = fd_bo_new(screen->dev, size, flags, "%ux%ux%u@%u:%x", prsc->width0, prsc->height0, prsc->depth0, rsc->layout.cpp, prsc->bind); + fd_resource_set_bo(rsc, bo); /* Zero out the UBWC area on allocation. This fixes intermittent failures * with UBWC, which I suspect are due to the HW having a hard time @@ -197,7 +207,6 @@ realloc_bo(struct fd_resource *rsc, uint32_t size) rsc->needs_ubwc_clear = true; } - rsc->seqno = p_atomic_inc_return(&screen->rsc_seqno); util_range_set_empty(&rsc->valid_buffer_range); fd_bc_invalidate_resource(rsc, true); } @@ -1077,10 +1086,12 @@ fd_resource_from_handle(struct pipe_screen *pscreen, simple_mtx_init(&rsc->lock, mtx_plain); - rsc->bo = fd_screen_bo_from_handle(pscreen, handle); - if (!rsc->bo) + struct fd_bo *bo = fd_screen_bo_from_handle(pscreen, handle); + if (!bo) goto fail; + fd_resource_set_bo(rsc, bo); + rsc->internal_format = tmpl->format; rsc->layout.pitch0 = handle->stride; slice->offset = handle->offset; @@ -1270,7 +1281,7 @@ fd_resource_from_memobj(struct pipe_screen *pscreen, } /* Share the bo with the memory object. */ - rsc->bo = fd_bo_ref(memobj->bo); + fd_resource_set_bo(rsc, fd_bo_ref(memobj->bo)); return prsc; }