panfrost: Move panfrost_attach_vt_framebuffer() to pan_cmdstream.c
authorBoris Brezillon <boris.brezillon@collabora.com>
Fri, 6 Mar 2020 08:59:56 +0000 (09:59 +0100)
committerBoris Brezillon <boris.brezillon@collabora.com>
Tue, 10 Mar 2020 11:47:34 +0000 (12:47 +0100)
Move panfrost_attach_vt_framebuffer() to pan_cmdstream.c and change its
name to panfrost_vt_attach_framebuffer() so we can use a consistent
prefix (panfrost_vt_) for all helpers initializing/updating
midgard_payload_vertex_tiler fields.

Note that the function only initializes one VT object now.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4083>

src/gallium/drivers/panfrost/pan_cmdstream.c
src/gallium/drivers/panfrost/pan_cmdstream.h
src/gallium/drivers/panfrost/pan_context.c

index 18a47b0854e38449bdb561c40e9a570363352aa3..83f80d24dfbc9d226232dedac28a06547463e421 100644 (file)
  * SOFTWARE.
  */
 
+#include "util/macros.h"
+
+#include "panfrost-quirks.h"
+
 #include "pan_allocate.h"
 #include "pan_bo.h"
 #include "pan_cmdstream.h"
 #include "pan_context.h"
 #include "pan_job.h"
 
+/* TODO: Bifrost requires just a mali_shared_memory, without the rest of the
+ * framebuffer */
+
+void
+panfrost_vt_attach_framebuffer(struct panfrost_context *ctx,
+                               struct midgard_payload_vertex_tiler *vt)
+{
+        struct panfrost_screen *screen = pan_screen(ctx->base.screen);
+        struct panfrost_batch *batch = panfrost_get_batch_for_fbo(ctx);
+
+        /* If we haven't, reserve space for the framebuffer */
+
+        if (!batch->framebuffer.gpu) {
+                unsigned size = (screen->quirks & MIDGARD_SFBD) ?
+                        sizeof(struct mali_single_framebuffer) :
+                        sizeof(struct mali_framebuffer);
+
+                batch->framebuffer = panfrost_allocate_transient(batch, size);
+
+                /* Tag the pointer */
+                if (!(screen->quirks & MIDGARD_SFBD))
+                        batch->framebuffer.gpu |= MALI_MFBD;
+        }
+
+        vt->postfix.shared_memory = batch->framebuffer.gpu;
+}
+
 void
 panfrost_emit_shader_meta(struct panfrost_batch *batch,
                           enum pipe_shader_type st,
index 326e4b2efe5d313b66165480efa26aa8786b315c..86380cd5d8aafceac52e6c73d9bb853c1c523a38 100644 (file)
 
 #include "pan_job.h"
 
+void
+panfrost_vt_attach_framebuffer(struct panfrost_context *ctx,
+                               struct midgard_payload_vertex_tiler *vt);
+
 void
 panfrost_emit_shader_meta(struct panfrost_batch *batch,
                           enum pipe_shader_type st,
index 1f595919faa05ee577795a6cc38d7405a6541f58..41eda89d8fb56e441496662b2c9745ca42381cca 100644 (file)
@@ -142,33 +142,6 @@ panfrost_clear(
         panfrost_batch_clear(batch, buffers, color, depth, stencil);
 }
 
-/* TODO: Bifrost requires just a mali_shared_memory, without the rest of the
- * framebuffer */
-
-static void
-panfrost_attach_vt_framebuffer(struct panfrost_context *ctx)
-{
-        struct panfrost_screen *screen = pan_screen(ctx->base.screen);
-        struct panfrost_batch *batch = panfrost_get_batch_for_fbo(ctx);
-
-        /* If we haven't, reserve space for the framebuffer */
-
-        if (!batch->framebuffer.gpu) {
-                unsigned size = (screen->quirks & MIDGARD_SFBD) ?
-                        sizeof(struct mali_single_framebuffer) :
-                        sizeof(struct mali_framebuffer);
-
-                batch->framebuffer = panfrost_allocate_transient(batch, size);
-
-                /* Tag the pointer */
-                if (!(screen->quirks & MIDGARD_SFBD))
-                        batch->framebuffer.gpu |= MALI_MFBD;
-        }
-
-        for (unsigned i = 0; i < PIPE_SHADER_TYPES; ++i)
-                ctx->payloads[i].postfix.shared_memory = batch->framebuffer.gpu;
-}
-
 /* Reset per-frame context, called on context initialisation as well as after
  * flushing a frame */
 
@@ -559,7 +532,9 @@ panfrost_emit_for_draw(struct panfrost_context *ctx, bool with_vertex_data)
         struct panfrost_screen *screen = pan_screen(ctx->base.screen);
 
         panfrost_batch_add_fbo_bos(batch);
-        panfrost_attach_vt_framebuffer(ctx);
+
+        for (int i = 0; i < PIPE_SHADER_TYPES; ++i)
+                panfrost_vt_attach_framebuffer(ctx, &ctx->payloads[i]);
 
         if (with_vertex_data) {
                 panfrost_emit_vertex_data(batch);