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