From 37622b33c4b0c266cda31d41acb81bac14e6ec7c Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Wed, 19 Apr 2023 13:36:58 -0700 Subject: [PATCH] freedreno: Inline single-caller helpers Now that we don't have the batch_reset() path, we can inline batch_init() and batch_fini(). Signed-off-by: Rob Clark Part-of: --- src/gallium/drivers/freedreno/freedreno_batch.c | 134 ++++++++++-------------- 1 file changed, 54 insertions(+), 80 deletions(-) diff --git a/src/gallium/drivers/freedreno/freedreno_batch.c b/src/gallium/drivers/freedreno/freedreno_batch.c index 952359f..d26fec2 100644 --- a/src/gallium/drivers/freedreno/freedreno_batch.c +++ b/src/gallium/drivers/freedreno/freedreno_batch.c @@ -57,10 +57,22 @@ alloc_ring(struct fd_batch *batch, unsigned sz, enum fd_ringbuffer_flags flags) return fd_submit_new_ringbuffer(batch->submit, sz, flags); } -static void -batch_init(struct fd_batch *batch) +struct fd_batch * +fd_batch_create(struct fd_context *ctx, bool nondraw) { - struct fd_context *ctx = batch->ctx; + struct fd_batch *batch = CALLOC_STRUCT(fd_batch); + + if (!batch) + return NULL; + + DBG("%p", batch); + + pipe_reference_init(&batch->reference, 1); + batch->ctx = ctx; + batch->nondraw = nondraw; + + batch->resources = + _mesa_set_create(NULL, _mesa_hash_pointer, _mesa_key_pointer_equal); batch->submit = fd_submit_new(ctx->pipe); if (batch->nondraw) { @@ -86,23 +98,10 @@ batch_init(struct fd_batch *batch) if (ctx->screen->gen < 6) batch->fence = fd_pipe_fence_create(batch); - batch->cleared = 0; - batch->fast_cleared = 0; - batch->invalidated = 0; - batch->restore = batch->resolve = 0; - batch->needs_flush = false; - batch->flushed = false; - batch->gmem_reason = 0; - batch->num_draws = 0; - batch->num_vertices = 0; - batch->num_bins_per_pipe = 0; - batch->prim_strm_bits = 0; - batch->draw_strm_bits = 0; - fd_reset_wfi(batch); util_dynarray_init(&batch->draw_patches, NULL); - util_dynarray_init(&(batch->fb_read_patches), NULL); + util_dynarray_init(&(batch->fb_read_patches), NULL); if (is_a2xx(ctx->screen)) { util_dynarray_init(&batch->shader_patches, NULL); @@ -112,36 +111,19 @@ batch_init(struct fd_batch *batch) if (is_a3xx(ctx->screen)) util_dynarray_init(&batch->rbrc_patches, NULL); - assert(batch->resources->entries == 0); - util_dynarray_init(&batch->samples, NULL); u_trace_init(&batch->trace, &ctx->trace_context); batch->last_timestamp_cmd = NULL; -} - -struct fd_batch * -fd_batch_create(struct fd_context *ctx, bool nondraw) -{ - struct fd_batch *batch = CALLOC_STRUCT(fd_batch); - - if (!batch) - return NULL; - - DBG("%p", batch); - - pipe_reference_init(&batch->reference, 1); - batch->ctx = ctx; - batch->nondraw = nondraw; - - batch->resources = - _mesa_set_create(NULL, _mesa_hash_pointer, _mesa_key_pointer_equal); - - batch_init(batch); return batch; } +/** + * Cleanup that we normally do when the submit is flushed, like dropping + * rb references. But also called when batch is destroyed just in case + * it wasn't flushed. + */ static void cleanup_submit(struct fd_batch *batch) { @@ -186,46 +168,6 @@ cleanup_submit(struct fd_batch *batch) } static void -batch_fini(struct fd_batch *batch) -{ - DBG("%p", batch); - - pipe_resource_reference(&batch->query_buf, NULL); - - if (batch->in_fence_fd != -1) - close(batch->in_fence_fd); - - /* in case batch wasn't flushed but fence was created: */ - if (batch->fence) - fd_pipe_fence_set_batch(batch->fence, NULL); - - fd_pipe_fence_ref(&batch->fence, NULL); - - cleanup_submit(batch); - - util_dynarray_fini(&batch->draw_patches); - for (int i = 0; i < MAX_RENDER_TARGETS; i++) - util_dynarray_fini(&(batch->fb_read_patches)); - - if (is_a2xx(batch->ctx->screen)) { - util_dynarray_fini(&batch->shader_patches); - util_dynarray_fini(&batch->gmem_patches); - } - - if (is_a3xx(batch->ctx->screen)) - util_dynarray_fini(&batch->rbrc_patches); - - while (batch->samples.size > 0) { - struct fd_hw_sample *samp = - util_dynarray_pop(&batch->samples, struct fd_hw_sample *); - fd_hw_sample_reference(batch->ctx, &samp, NULL); - } - util_dynarray_fini(&batch->samples); - - u_trace_fini(&batch->trace); -} - -static void batch_flush_dependencies(struct fd_batch *batch) assert_dt { struct fd_batch_cache *cache = &batch->ctx->screen->batch_cache; @@ -288,7 +230,39 @@ __fd_batch_destroy_locked(struct fd_batch *batch) assert(batch->dependents_mask == 0); util_copy_framebuffer_state(&batch->framebuffer, NULL); - batch_fini(batch); + + pipe_resource_reference(&batch->query_buf, NULL); + + if (batch->in_fence_fd != -1) + close(batch->in_fence_fd); + + /* in case batch wasn't flushed but fence was created: */ + if (batch->fence) + fd_pipe_fence_set_batch(batch->fence, NULL); + + fd_pipe_fence_ref(&batch->fence, NULL); + + cleanup_submit(batch); + + util_dynarray_fini(&batch->draw_patches); + util_dynarray_fini(&(batch->fb_read_patches)); + + if (is_a2xx(batch->ctx->screen)) { + util_dynarray_fini(&batch->shader_patches); + util_dynarray_fini(&batch->gmem_patches); + } + + if (is_a3xx(batch->ctx->screen)) + util_dynarray_fini(&batch->rbrc_patches); + + while (batch->samples.size > 0) { + struct fd_hw_sample *samp = + util_dynarray_pop(&batch->samples, struct fd_hw_sample *); + fd_hw_sample_reference(batch->ctx, &samp, NULL); + } + util_dynarray_fini(&batch->samples); + + u_trace_fini(&batch->trace); free(batch->key); free(batch); -- 2.7.4