Home | History | Annotate | Download | only in freedreno

Lines Matching refs:rsc

91 realloc_bo(struct fd_resource *rsc, uint32_t size)
93 struct fd_screen *screen = fd_screen(rsc->base.b.screen);
101 if (rsc->bo)
102 fd_bo_del(rsc->bo);
104 rsc->bo = fd_bo_new(screen->dev, size, flags);
105 rsc->timestamp = 0;
106 util_range_set_empty(&rsc->valid_buffer_range);
107 fd_bc_invalidate_resource(rsc, true);
129 fd_try_shadow_resource(struct fd_context *ctx, struct fd_resource *rsc,
133 struct pipe_resource *prsc = &rsc->base.b;
178 * should empty/destroy rsc->batches hashset)
180 fd_bc_invalidate_resource(rsc, false);
194 DBG("shadow: %p (%d) -> %p (%d)\n", rsc, rsc->base.b.reference.count,
198 swap(rsc->bo, shadow->bo);
199 swap(rsc->timestamp, shadow->timestamp);
200 swap(rsc->write_batch, shadow->write_batch);
203 * by any batches, but the existing rsc (probably) is. We need to
208 foreach_batch(batch, &ctx->screen->batch_cache, rsc->batch_mask) {
209 struct set_entry *entry = _mesa_set_search(batch->resources, rsc);
213 swap(rsc->batch_mask, shadow->batch_mask);
286 fd_resource_layer_offset(struct fd_resource *rsc,
290 if (rsc->layer_first)
291 return layer * rsc->layer_size;
299 struct fd_resource *rsc = fd_resource(trans->base.resource);
300 struct fd_resource_slice *slice = fd_resource_slice(rsc, trans->base.level);
301 struct fd_resource_slice *sslice = fd_resource_slice(rsc->stencil, trans->base.level);
304 float *depth = fd_bo_map(rsc->bo) + slice->offset +
305 fd_resource_layer_offset(rsc, slice, trans->base.box.z) +
307 uint8_t *stencil = fd_bo_map(rsc->stencil->bo) + sslice->offset +
308 fd_resource_layer_offset(rsc->stencil, sslice, trans->base.box.z) +
326 struct fd_resource *rsc = fd_resource(trans->base.resource);
327 struct fd_resource_slice *slice = fd_resource_slice(rsc, trans->base.level);
330 uint8_t *data = fd_bo_map(rsc->bo) + slice->offset +
331 fd_resource_layer_offset(rsc, slice, trans->base.box.z) +
333 trans->base.box.x + box->x) * rsc->cpp;
345 data, slice->pitch * rsc->cpp,
354 data, slice->pitch * rsc->cpp,
394 struct fd_resource *rsc = fd_resource(ptrans->resource);
398 util_range_add(&rsc->valid_buffer_range,
411 struct fd_resource *rsc = fd_resource(ptrans->resource);
421 fd_bo_cpu_fini(rsc->bo);
422 if (rsc->stencil)
423 fd_bo_cpu_fini(rsc->stencil->bo);
426 util_range_add(&rsc->valid_buffer_range,
444 struct fd_resource *rsc = fd_resource(prsc);
445 struct fd_resource_slice *slice = fd_resource_slice(rsc, level);
469 ptrans->stride = util_format_get_nblocksx(format, slice->pitch) * rsc->cpp;
470 ptrans->layer_stride = rsc->layer_first ? rsc->layer_size : slice->size0;
482 realloc_bo(rsc, fd_bo_size(rsc->bo));
483 if (rsc->stencil)
484 realloc_bo(rsc->stencil, fd_bo_size(rsc->stencil->bo));
488 !util_ranges_intersect(&rsc->valid_buffer_range,
497 fd_batch_reference(&write_batch, rsc->write_batch);
508 bool needs_flush = pending(rsc, !!(usage & PIPE_TRANSFER_WRITE));
509 bool busy = needs_flush || (0 != fd_bo_cpu_prep(rsc->bo,
520 if (fd_try_shadow_resource(ctx, rsc, level, usage, box)) {
529 foreach_batch(batch, &ctx->screen->batch_cache, rsc->batch_mask) {
537 assert(rsc->batch_mask == 0);
541 assert(!rsc->write_batch);
551 ret = fd_bo_cpu_prep(rsc->bo, ctx->screen->pipe, op);
557 buf = fd_bo_map(rsc->bo);
563 box->x / util_format_get_blockwidth(format) * rsc->cpp +
564 fd_resource_layer_offset(rsc, slice, box->z);
570 trans->base.stride = trans->base.box.width * rsc->cpp * 2;
581 fd_resource_slice(rsc->stencil, level);
582 void *sbuf = fd_bo_map(rsc->stencil->bo);
587 fd_resource_layer_offset(rsc, slice, box->z) +
590 fd_resource_layer_offset(rsc->stencil, sslice, box->z) +
607 } else if (rsc->internal_format != format &&
625 fd_resource_layer_offset(rsc, slice, box->z) +
626 box->y * slice->pitch * rsc->cpp + box->x * rsc->cpp;
635 rgba8, slice->pitch * rsc->cpp,
644 rgba8, slice->pitch * rsc->cpp,
670 struct fd_resource *rsc = fd_resource(prsc);
671 fd_bc_invalidate_resource(rsc, true);
672 if (rsc->bo)
673 fd_bo_del(rsc->bo);
674 util_range_destroy(&rsc->valid_buffer_range);
675 FREE(rsc);
683 struct fd_resource *rsc = fd_resource(prsc);
685 return fd_screen_bo_get_handle(pscreen, rsc->bo,
686 rsc->slices[0].pitch * rsc->cpp, handle);
699 setup_slices(struct fd_resource *rsc, uint32_t alignment, enum pipe_format format)
701 struct pipe_resource *prsc = &rsc->base.b;
711 uint32_t layers_in_level = rsc->layer_first ? 1 : prsc->array_size;
714 struct fd_resource_slice *slice = fd_resource_slice(rsc, level);
732 (level > 1 && rsc->slices[level - 1].size0 > 0xf000)))
733 slice->size0 = align(blocks * rsc->cpp, alignment);
734 else if (level == 0 || rsc->layer_first || alignment == 1)
735 slice->size0 = align(blocks * rsc->cpp, alignment);
737 slice->size0 = rsc->slices[level - 1].size0;
769 struct fd_resource *rsc = fd_resource(prsc);
776 realloc_bo(rsc, setup_slices(rsc, 1, prsc->format));
786 struct fd_resource *rsc = CALLOC_STRUCT(fd_resource);
787 struct pipe_resource *prsc = &rsc->base.b;
798 if (!rsc)
807 util_range_init(&rsc->valid_buffer_range);
809 rsc->base.vtbl = &fd_resource_vtbl;
816 rsc->internal_format = format;
817 rsc->cpp = util_format_get_blocksize(format);
819 assert(rsc->cpp);
825 rsc->layer_first = false;
828 rsc->layer_first = true;
834 size = setup_slices(rsc, alignment, format);
845 if (rsc->layer_first) {
846 rsc->layer_size = align(size, 4096);
847 size = rsc->layer_size * prsc->array_size;
850 realloc_bo(rsc, size);
851 if (!rsc->bo)
862 rsc->stencil = fd_resource(fd_resource_create(pscreen, &stencil));
863 if (!rsc->stencil)
883 struct fd_resource *rsc = CALLOC_STRUCT(fd_resource);
884 struct fd_resource_slice *slice = &rsc->slices[0];
885 struct pipe_resource *prsc = &rsc->base.b;
895 if (!rsc)
904 util_range_init(&rsc->valid_buffer_range);
906 rsc->bo = fd_screen_bo_from_handle(pscreen, handle);
907 if (!rsc->bo)
910 rsc->base.vtbl = &fd_resource_vtbl;
911 rsc->cpp = util_format_get_blocksize(tmpl->format);
912 slice->pitch = handle->stride / rsc->cpp;
920 assert(rsc->cpp);
1107 struct fd_resource *rsc = fd_resource(prsc);
1109 if (rsc->write_batch)
1110 fd_batch_flush(rsc->write_batch, true);
1112 assert(!rsc->write_batch);