Mesa (main): pan/decode: Handle IDVS jobs on Bifrost

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jul 6 20:30:49 UTC 2021


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

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Tue Jun 22 11:16:37 2021 -0400

pan/decode: Handle IDVS jobs on Bifrost

Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11413>

---

 src/panfrost/lib/decode.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/src/panfrost/lib/decode.c b/src/panfrost/lib/decode.c
index e3eae2b1692..07366e45072 100644
--- a/src/panfrost/lib/decode.c
+++ b/src/panfrost/lib/decode.c
@@ -790,6 +790,8 @@ pandecode_dcd(const struct MALI_DRAW *p,
 {
         struct pandecode_mapped_memory *attr_mem;
 
+        bool idvs = (job_type == MALI_JOB_TYPE_INDEXED_VERTEX);
+
         struct pandecode_fbd fbd_info = {
                 /* Default for Bifrost */
                 .rt_count = 1
@@ -815,6 +817,8 @@ pandecode_dcd(const struct MALI_DRAW *p,
                 if (state.shader.shader & ~0xF)
                         pandecode_shader_disassemble(state.shader.shader & ~0xF, job_no, job_type, is_bifrost, gpu_id);
 
+                if (idvs && state.secondary_shader)
+                        pandecode_shader_disassemble(state.secondary_shader, job_no, job_type, is_bifrost, gpu_id);
                 DUMP_UNPACKED(RENDERER_STATE, state, "State:\n");
                 pandecode_indent++;
 
@@ -972,6 +976,41 @@ pandecode_vertex_compute_geometry_job(const struct MALI_JOB_HEADER *h,
         pandecode_log("\n");
 }
 
+static void
+pandecode_indexed_vertex_job(const struct MALI_JOB_HEADER *h,
+                             const struct pandecode_mapped_memory *mem,
+                             mali_ptr job, int job_no, bool is_bifrost,
+                             unsigned gpu_id)
+{
+        struct mali_bifrost_indexed_vertex_job_packed *PANDECODE_PTR_VAR(p, mem, job);
+
+        pandecode_log("Vertex:\n");
+        pan_section_unpack(p, BIFROST_INDEXED_VERTEX_JOB, VERTEX_DRAW, vert_draw);
+        pandecode_dcd(&vert_draw, job_no, h->type, "", is_bifrost, gpu_id);
+        DUMP_UNPACKED(DRAW, vert_draw, "Vertex Draw:\n");
+
+        pandecode_log("Fragment:\n");
+        pan_section_unpack(p, BIFROST_INDEXED_VERTEX_JOB, FRAGMENT_DRAW, frag_draw);
+        pandecode_dcd(&frag_draw, job_no, MALI_JOB_TYPE_FRAGMENT, "", is_bifrost, gpu_id);
+        DUMP_UNPACKED(DRAW, frag_draw, "Fragment Draw:\n");
+
+        pan_section_unpack(p, BIFROST_INDEXED_VERTEX_JOB, TILER, tiler_ptr);
+        pandecode_log("Tiler Job Payload:\n");
+        pandecode_indent++;
+        pandecode_bifrost_tiler(tiler_ptr.address, job_no);
+        pandecode_indent--;
+
+        pandecode_invocation(pan_section_ptr(p, BIFROST_INDEXED_VERTEX_JOB, INVOCATION));
+        pandecode_primitive(pan_section_ptr(p, BIFROST_INDEXED_VERTEX_JOB, PRIMITIVE));
+
+        /* TODO: gl_PointSize on Bifrost */
+        pandecode_primitive_size(pan_section_ptr(p, BIFROST_INDEXED_VERTEX_JOB, PRIMITIVE_SIZE), true);
+
+        pan_section_unpack(p, BIFROST_INDEXED_VERTEX_JOB, PADDING, padding);
+        pan_section_unpack(p, BIFROST_INDEXED_VERTEX_JOB, FRAGMENT_DRAW_PADDING, f_padding);
+        pan_section_unpack(p, BIFROST_INDEXED_VERTEX_JOB, VERTEX_DRAW_PADDING, v_padding);
+}
+
 static void
 pandecode_tiler_job_bfr(const struct MALI_JOB_HEADER *h,
                         const struct pandecode_mapped_memory *mem,
@@ -1136,6 +1175,11 @@ pandecode_jc(mali_ptr jc_gpu_va, bool bifrost, unsigned gpu_id)
                                                               bifrost, gpu_id);
                         break;
 
+                case MALI_JOB_TYPE_INDEXED_VERTEX:
+                        pandecode_indexed_vertex_job(&h, mem, jc_gpu_va, job_no,
+                                                              bifrost, gpu_id);
+                        break;
+
                 case MALI_JOB_TYPE_FRAGMENT:
                         pandecode_fragment_job(mem, jc_gpu_va, job_no, bifrost, gpu_id);
                         break;



More information about the mesa-commit mailing list