panfrost: Drop panfrost_vt_emit_shared_memory
Let's reuse the same routines across Midgard/Bifrost so we get proper
handling of spilling.
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7206>
diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c
index 0f7987b..83234bd 100644
--- a/src/gallium/drivers/panfrost/pan_cmdstream.c
+++ b/src/gallium/drivers/panfrost/pan_cmdstream.c
@@ -52,32 +52,6 @@
PAN_BO_ACCESS_VERTEX_TILER;
}
-mali_ptr
-panfrost_vt_emit_shared_memory(struct panfrost_batch *batch)
-{
- struct panfrost_device *dev = pan_device(batch->ctx->base.screen);
-
- struct panfrost_ptr t =
- panfrost_pool_alloc_aligned(&batch->pool,
- MALI_LOCAL_STORAGE_LENGTH,
- 64);
-
- pan_pack(t.cpu, LOCAL_STORAGE, ls) {
- ls.wls_instances = MALI_LOCAL_STORAGE_NO_WORKGROUP_MEM;
- if (batch->stack_size) {
- struct panfrost_bo *stack =
- panfrost_batch_get_scratchpad(batch, batch->stack_size,
- dev->thread_tls_alloc,
- dev->core_count);
-
- ls.tls_size = panfrost_get_stack_shift(batch->stack_size);
- ls.tls_base_pointer = stack->ptr.gpu;
- }
- }
-
- return t.gpu;
-}
-
/* Gets a GPU address for the associated index buffer. Only gauranteed to be
* good for the duration of the draw (transient), could last longer. Also get
* the bounds on the index buffer for the range accessed by the draw. We do
diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.h b/src/gallium/drivers/panfrost/pan_cmdstream.h
index 6ed36bd..dfc67da 100644
--- a/src/gallium/drivers/panfrost/pan_cmdstream.h
+++ b/src/gallium/drivers/panfrost/pan_cmdstream.h
@@ -66,9 +66,6 @@
mali_ptr *buffers);
mali_ptr
-panfrost_vt_emit_shared_memory(struct panfrost_batch *batch);
-
-mali_ptr
panfrost_get_index_buffer_bounded(struct panfrost_context *ctx,
const struct pipe_draw_info *info,
unsigned *min_index, unsigned *max_index);
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index 588b5f6..3ff1d75 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -483,9 +483,7 @@
unsigned vertex_count = ctx->vertex_count;
- mali_ptr shared_mem = is_bifrost ?
- panfrost_vt_emit_shared_memory(batch) :
- panfrost_batch_reserve_framebuffer(batch);
+ mali_ptr shared_mem = panfrost_batch_reserve_framebuffer(batch);
unsigned min_index = 0, max_index = 0;
mali_ptr indices = 0;
diff --git a/src/gallium/drivers/panfrost/pan_job.c b/src/gallium/drivers/panfrost/pan_job.c
index 8170ba1..22b0b34 100644
--- a/src/gallium/drivers/panfrost/pan_job.c
+++ b/src/gallium/drivers/panfrost/pan_job.c
@@ -727,25 +727,26 @@
{
struct panfrost_device *dev = pan_device(batch->ctx->base.screen);
- /* If we haven't, reserve space for the framebuffer */
+ /* If we haven't, reserve space for the thread storage descriptor (or a
+ * full framebuffer descriptor on Midgard) */
if (!batch->framebuffer.gpu) {
- unsigned size = (dev->quirks & MIDGARD_SFBD) ?
+ unsigned size = (dev->quirks & IS_BIFROST) ?
+ MALI_LOCAL_STORAGE_LENGTH :
+ (dev->quirks & MIDGARD_SFBD) ?
MALI_SINGLE_TARGET_FRAMEBUFFER_LENGTH :
MALI_MULTI_TARGET_FRAMEBUFFER_LENGTH;
batch->framebuffer = panfrost_pool_alloc_aligned(&batch->pool, size, 64);
/* Tag the pointer */
- if (!(dev->quirks & MIDGARD_SFBD))
+ if (!(dev->quirks & (MIDGARD_SFBD | IS_BIFROST)))
batch->framebuffer.gpu |= MALI_FBD_TAG_IS_MFBD;
}
return batch->framebuffer.gpu;
}
-
-
static void
panfrost_load_surface(struct panfrost_batch *batch, struct pipe_surface *surf, unsigned loc)
{
@@ -863,7 +864,7 @@
panfrost_batch_get_bifrost_tiler(batch, vertex_count);
panfrost_load_bifrost(&batch->pool, &batch->scoreboard,
blend_shader,
- panfrost_vt_emit_shared_memory(batch),
+ batch->framebuffer.gpu,
tiler,
transfer.gpu, vertex_count,
&img, loc);
diff --git a/src/gallium/drivers/panfrost/pan_mfbd.c b/src/gallium/drivers/panfrost/pan_mfbd.c
index 27b7896..01c4ef0 100644
--- a/src/gallium/drivers/panfrost/pan_mfbd.c
+++ b/src/gallium/drivers/panfrost/pan_mfbd.c
@@ -556,10 +556,10 @@
struct panfrost_device *dev = pan_device(batch->ctx->base.screen);
void *fb = batch->framebuffer.cpu;
+ panfrost_mfbd_emit_local_storage(batch, fb);
+
if (dev->quirks & IS_BIFROST)
- panfrost_mfbd_emit_bifrost_parameters(batch, fb);
- else
- panfrost_mfbd_emit_local_storage(batch, fb);
+ return;
pan_section_pack(fb, MULTI_TARGET_FRAMEBUFFER, PARAMETERS, params) {
params.width = batch->key.width;
@@ -572,10 +572,7 @@
params.render_target_count = MAX2(batch->key.nr_cbufs, 1);
}
- if (dev->quirks & IS_BIFROST)
- panfrost_mfbd_emit_bifrost_tiler(batch, fb, vertex_count);
- else
- panfrost_mfbd_emit_midgard_tiler(batch, fb, vertex_count);
+ panfrost_mfbd_emit_midgard_tiler(batch, fb, vertex_count);
}
/* Creates an MFBD for the FRAGMENT section of the bound framebuffer */