Path: blob/21.2-virgl/src/gallium/drivers/iris/iris_fine_fence.c
4565 views
#include "iris_context.h"1#include "iris_fine_fence.h"2#include "util/u_upload_mgr.h"34static void5iris_fine_fence_reset(struct iris_batch *batch)6{7u_upload_alloc(batch->fine_fences.uploader,80, sizeof(uint64_t), sizeof(uint64_t),9&batch->fine_fences.ref.offset, &batch->fine_fences.ref.res,10(void **)&batch->fine_fences.map);11WRITE_ONCE(*batch->fine_fences.map, 0);12batch->fine_fences.next++;13}1415void16iris_fine_fence_init(struct iris_batch *batch)17{18batch->fine_fences.ref.res = NULL;19batch->fine_fences.next = 0;20iris_fine_fence_reset(batch);21}2223static uint32_t24iris_fine_fence_next(struct iris_batch *batch)25{26uint32_t seqno = batch->fine_fences.next++;2728if (batch->fine_fences.next == 0)29iris_fine_fence_reset(batch);3031return seqno;32}3334void35iris_fine_fence_destroy(struct iris_screen *screen,36struct iris_fine_fence *fine)37{38iris_syncobj_reference(screen, &fine->syncobj, NULL);39pipe_resource_reference(&fine->ref.res, NULL);40free(fine);41}4243struct iris_fine_fence *44iris_fine_fence_new(struct iris_batch *batch, unsigned flags)45{46struct iris_fine_fence *fine = calloc(1, sizeof(*fine));47if (!fine)48return NULL;4950pipe_reference_init(&fine->reference, 1);5152fine->seqno = iris_fine_fence_next(batch);5354iris_syncobj_reference(batch->screen, &fine->syncobj,55iris_batch_get_signal_syncobj(batch));5657pipe_resource_reference(&fine->ref.res, batch->fine_fences.ref.res);58fine->ref.offset = batch->fine_fences.ref.offset;59fine->map = batch->fine_fences.map;60fine->flags = flags;6162unsigned pc;63if (flags & IRIS_FENCE_TOP_OF_PIPE) {64pc = PIPE_CONTROL_WRITE_IMMEDIATE | PIPE_CONTROL_CS_STALL;65} else {66pc = PIPE_CONTROL_WRITE_IMMEDIATE |67PIPE_CONTROL_RENDER_TARGET_FLUSH |68PIPE_CONTROL_TILE_CACHE_FLUSH |69PIPE_CONTROL_DEPTH_CACHE_FLUSH |70PIPE_CONTROL_DATA_CACHE_FLUSH;71}72iris_emit_pipe_control_write(batch, "fence: fine", pc,73iris_resource_bo(fine->ref.res),74fine->ref.offset,75fine->seqno);7677return fine;78}798081