Mesa (main): freedreno/a6xx: Allocate just enough memory for SO state, only if we do SO.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jul 13 22:29:46 UTC 2021


Module: Mesa
Branch: main
Commit: 5c3ca9cb81d9863334d76ace9639fd2c68ce011e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5c3ca9cb81d9863334d76ace9639fd2c68ce011e

Author: Emma Anholt <emma at anholt.net>
Date:   Fri Jul  2 15:41:01 2021 -0700

freedreno/a6xx: Allocate just enough memory for SO state, only if we do SO.

Continuing to improve our suballocation packing.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11697>

---

 src/gallium/drivers/freedreno/a6xx/fd6_program.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.c b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
index 9be4c7d3aa4..38ce74bbcd8 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_program.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
@@ -153,7 +153,7 @@ fd6_emit_shader(struct fd_context *ctx, struct fd_ringbuffer *ring,
 }
 
 static void
-setup_stream_out(struct fd6_program_state *state,
+setup_stream_out(struct fd_context *ctx, struct fd6_program_state *state,
                  const struct ir3_shader_variant *v,
                  struct ir3_shader_linkage *l)
 {
@@ -203,7 +203,8 @@ setup_stream_out(struct fd6_program_state *state,
       }
    }
 
-   struct fd_ringbuffer *ring = state->streamout_stateobj;
+   struct fd_ringbuffer *ring =
+      fd_ringbuffer_new_object(ctx->pipe, (13 + (2 * prog_count)) * 4);
 
    OUT_PKT7(ring, CP_CONTEXT_REG_BUNCH, 12 + (2 * prog_count));
    OUT_RING(ring, REG_A6XX_VPC_SO_STREAM_CNTL);
@@ -227,6 +228,8 @@ setup_stream_out(struct fd6_program_state *state,
       OUT_RING(ring, REG_A6XX_VPC_SO_PROG);
       OUT_RING(ring, prog[i]);
    }
+
+   state->streamout_stateobj = ring;
 }
 
 static void
@@ -542,7 +545,7 @@ setup_stateobj(struct fd_ringbuffer *ring, struct fd_context *ctx,
     * program:
     */
    if (do_streamout && !binning_pass) {
-      setup_stream_out(state, last_shader, &l);
+      setup_stream_out(ctx, state, last_shader, &l);
    }
 
    debug_assert(l.cnt <= 32);
@@ -1120,7 +1123,6 @@ fd6_program_create(void *data, struct ir3_shader_variant *bs,
    state->fs = fs;
    state->binning_stateobj = fd_ringbuffer_new_object(ctx->pipe, 0x1000);
    state->stateobj = fd_ringbuffer_new_object(ctx->pipe, 0x1000);
-   state->streamout_stateobj = fd_ringbuffer_new_object(ctx->pipe, 0x1000);
 
 #ifdef DEBUG
    if (!ds) {
@@ -1153,7 +1155,8 @@ fd6_program_destroy(void *data, struct ir3_program_state *state)
    fd_ringbuffer_del(so->binning_stateobj);
    fd_ringbuffer_del(so->config_stateobj);
    fd_ringbuffer_del(so->interp_stateobj);
-   fd_ringbuffer_del(so->streamout_stateobj);
+   if (so->streamout_stateobj)
+      fd_ringbuffer_del(so->streamout_stateobj);
    free(so);
 }
 



More information about the mesa-commit mailing list