Lines Matching refs:transfer
319 struct si_transfer *transfer;
322 transfer = calloc(1, sizeof(*transfer));
324 transfer = slab_zalloc(&sctx->pool_transfers_unsync);
326 transfer = slab_zalloc(&sctx->pool_transfers);
328 pipe_resource_reference(&transfer->b.b.resource, resource);
329 transfer->b.b.usage = usage;
330 transfer->b.b.box = *box;
331 transfer->b.b.offset = offset;
332 transfer->staging = staging;
333 *ptransfer = &transfer->b.b;
413 /* Do a wait-free write-only transfer using a temporary buffer. */
481 static void si_buffer_do_flush_region(struct pipe_context *ctx, struct pipe_transfer *transfer,
485 struct si_transfer *stransfer = (struct si_transfer *)transfer;
486 struct si_resource *buf = si_resource(transfer->resource);
490 stransfer->b.b.offset + transfer->box.x % SI_MAP_BUFFER_ALIGNMENT + (box->x - transfer->box.x);
493 si_copy_buffer(sctx, transfer->resource, &stransfer->staging->b.b, box->x, src_offset,
500 static void si_buffer_flush_region(struct pipe_context *ctx, struct pipe_transfer *transfer,
505 if ((transfer->usage & required_usage) == required_usage) {
508 u_box_1d(transfer->box.x + rel_box->x, rel_box->width, &box);
509 si_buffer_do_flush_region(ctx, transfer, &box);
513 static void si_buffer_transfer_unmap(struct pipe_context *ctx, struct pipe_transfer *transfer)
516 struct si_transfer *stransfer = (struct si_transfer *)transfer;
518 if (transfer->usage & PIPE_MAP_WRITE && !(transfer->usage & PIPE_MAP_FLUSH_EXPLICIT))
519 si_buffer_do_flush_region(ctx, transfer, &transfer->box);
521 if (transfer->usage & (PIPE_MAP_ONCE | RADEON_MAP_TEMPORARY) &&
527 pipe_resource_reference(&transfer->resource, NULL);
529 if (transfer->usage & PIPE_MAP_THREAD_SAFE) {
530 free(transfer);
535 slab_free(&sctx->pool_transfers, transfer);
542 struct pipe_transfer *transfer = NULL;
552 map = si_buffer_transfer_map(ctx, buffer, 0, usage, &box, &transfer);
557 si_buffer_transfer_unmap(ctx, transfer);