freedreno/a6xx: don't emit a bogus size for empty cb slots
[mesa.git] / src / gallium / drivers / freedreno / a6xx / fd6_const.c
index ad67378a27ca4d39dcf349cba8159f8c0610a5bc..bfe2fec96832aea7c9923445a9a6a59ed437e766 100644 (file)
@@ -175,8 +175,8 @@ emit_tess_consts(struct fd6_emit *emit)
                emit->gs->shader->nir->info.gs.vertices_in;
 
        uint32_t vs_params[4] = {
-               emit->vs->shader->output_size * num_vertices * 4,       /* vs primitive stride */
-               emit->vs->shader->output_size * 4,                                      /* vs vertex stride */
+               emit->vs->output_size * num_vertices * 4,       /* vs primitive stride */
+               emit->vs->output_size * 4,                                      /* vs vertex stride */
                0,
                0
        };
@@ -185,9 +185,9 @@ emit_tess_consts(struct fd6_emit *emit)
 
        if (emit->hs) {
                uint32_t hs_params[4] = {
-                       emit->vs->shader->output_size * num_vertices * 4,       /* vs primitive stride */
-                       emit->vs->shader->output_size * 4,                                      /* vs vertex stride */
-                       emit->hs->shader->output_size,
+                       emit->vs->output_size * num_vertices * 4,       /* vs primitive stride */
+                       emit->vs->output_size * 4,                                      /* vs vertex stride */
+                       emit->hs->output_size,
                        emit->info->vertices_per_patch
                };
 
@@ -198,9 +198,9 @@ emit_tess_consts(struct fd6_emit *emit)
                        num_vertices = emit->gs->shader->nir->info.gs.vertices_in;
 
                uint32_t ds_params[4] = {
-                       emit->ds->shader->output_size * num_vertices * 4,       /* ds primitive stride */
-                       emit->ds->shader->output_size * 4,                                      /* ds vertex stride */
-                       emit->hs->shader->output_size,                      /* hs vertex stride (dwords) */
+                       emit->ds->output_size * num_vertices * 4,       /* ds primitive stride */
+                       emit->ds->output_size * 4,                                      /* ds vertex stride */
+                       emit->hs->output_size,                      /* hs vertex stride (dwords) */
                        emit->hs->shader->nir->info.tess.tcs_vertices_out
                };
 
@@ -216,8 +216,8 @@ emit_tess_consts(struct fd6_emit *emit)
                        prev = emit->vs;
 
                uint32_t gs_params[4] = {
-                       prev->shader->output_size * num_vertices * 4,   /* ds primitive stride */
-                       prev->shader->output_size * 4,                                  /* ds vertex stride */
+                       prev->output_size * num_vertices * 4,   /* ds primitive stride */
+                       prev->output_size * 4,                                  /* ds vertex stride */
                        0,
                        0,
                };
@@ -233,10 +233,11 @@ static void
 fd6_emit_ubos(struct fd_context *ctx, const struct ir3_shader_variant *v,
                struct fd_ringbuffer *ring, struct fd_constbuf_stateobj *constbuf)
 {
-       if (!v->shader->num_ubos)
-               return;
+       const struct ir3_const_state *const_state = ir3_const_state(v);
+       int num_ubos = const_state->num_ubos;
 
-       int num_ubos = v->shader->num_ubos;
+       if (!num_ubos)
+               return;
 
        OUT_PKT7(ring, fd6_stage2opcode(v->type), 3 + (2 * num_ubos));
        OUT_RING(ring, CP_LOAD_STATE6_0_DST_OFF(0) |
@@ -272,7 +273,7 @@ fd6_emit_ubos(struct fd_context *ctx, const struct ir3_shader_variant *v,
                                        0);
                } else {
                        OUT_RING(ring, 0xbad00000 | (i << 16));
-                       OUT_RING(ring, 0xbad00000 | (i << 16));
+                       OUT_RING(ring, A6XX_UBO_1_SIZE(0));
                }
        }
 }
@@ -280,7 +281,8 @@ fd6_emit_ubos(struct fd_context *ctx, const struct ir3_shader_variant *v,
 static unsigned
 user_consts_cmdstream_size(struct ir3_shader_variant *v)
 {
-       struct ir3_ubo_analysis_state *ubo_state = &v->shader->ubo_state;
+       struct ir3_const_state *const_state = ir3_const_state(v);
+       struct ir3_ubo_analysis_state *ubo_state = &const_state->ubo_state;
 
        if (unlikely(!ubo_state->cmdstream_size)) {
                unsigned packets, size;
@@ -290,7 +292,7 @@ user_consts_cmdstream_size(struct ir3_shader_variant *v)
 
                /* also account for UBO addresses: */
                packets += 1;
-               size += 2 * v->shader->num_ubos;
+               size += 2 * const_state->num_ubos;
 
                unsigned sizedwords = (4 * packets) + size;
                ubo_state->cmdstream_size = sizedwords * 4;