panfrost: Adjust the draw descriptor definition

Add missing fields, and rename some of the existing fields.

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/6980>
diff --git a/src/gallium/drivers/panfrost/pan_compute.c b/src/gallium/drivers/panfrost/pan_compute.c
index 7498699..3b5e633 100644
--- a/src/gallium/drivers/panfrost/pan_compute.c
+++ b/src/gallium/drivers/panfrost/pan_compute.c
@@ -141,9 +141,11 @@
         }
 
         pan_section_pack(t.cpu, COMPUTE_JOB, DRAW, cfg) {
-                cfg.unknown_1 = (dev->quirks & IS_BIFROST) ? 0x2 : 0x6;
+                cfg.draw_descriptor_is_64b = true;
+                if (!(dev->quirks & IS_BIFROST))
+                        cfg.texture_descriptor_is_64b = true;
                 cfg.state = panfrost_emit_compute_shader_meta(batch, PIPE_SHADER_COMPUTE);
-                cfg.shared = panfrost_emit_shared_memory(batch, info);
+                cfg.thread_storage = panfrost_emit_shared_memory(batch, info);
                 cfg.uniform_buffers = panfrost_emit_const_buf(batch,
                                 PIPE_SHADER_COMPUTE, &cfg.push_uniforms);
                 cfg.textures = panfrost_emit_texture_descriptors(batch,
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index 07c54d4..2b7ce4b 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -258,8 +258,8 @@
                 struct MALI_DRAW *d, enum pipe_shader_type st)
 {
         d->offset_start = batch->ctx->offset_start;
-        d->instances = batch->ctx->instance_count > 1 ?
-                batch->ctx->padded_count : 1;
+        d->instance_size = batch->ctx->instance_count > 1 ?
+                           batch->ctx->padded_count : 1;
 
         d->uniform_buffers = panfrost_emit_const_buf(batch, st, &d->push_uniforms);
         d->textures = panfrost_emit_texture_descriptors(batch, st);
@@ -296,12 +296,14 @@
         }
 
         pan_section_pack(job, COMPUTE_JOB, DRAW, cfg) {
-                cfg.unknown_1 = (device->quirks & IS_BIFROST) ? 0x2 : 0x6;
+                cfg.draw_descriptor_is_64b = true;
+                if (!(device->quirks & IS_BIFROST))
+                        cfg.texture_descriptor_is_64b = true;
                 cfg.state = panfrost_emit_compute_shader_meta(batch, PIPE_SHADER_VERTEX);
                 cfg.attributes = panfrost_emit_vertex_data(batch, &cfg.attribute_buffers);
                 cfg.varyings = vs_vary;
                 cfg.varying_buffers = varyings;
-                cfg.shared = shared_mem;
+                cfg.thread_storage = shared_mem;
                 pan_emit_draw_descs(batch, &cfg, PIPE_SHADER_VERTEX);
         }
 }
@@ -381,7 +383,10 @@
                   pan_section_ptr(job, BIFROST_TILER_JOB, DRAW) :
                   pan_section_ptr(job, MIDGARD_TILER_JOB, DRAW);
         pan_pack(section, DRAW, cfg) {
-                cfg.unknown_1 = (device->quirks & IS_BIFROST) ? 0x3 : 0x7;
+                cfg.four_components_per_vertex = true;
+                cfg.draw_descriptor_is_64b = true;
+                if (!(device->quirks & IS_BIFROST))
+                        cfg.texture_descriptor_is_64b = true;
                 cfg.front_face_ccw = rast->front_ccw;
                 cfg.cull_front_face = rast->cull_face & PIPE_FACE_FRONT;
                 cfg.cull_back_face = rast->cull_face & PIPE_FACE_BACK;
@@ -390,7 +395,7 @@
                 cfg.viewport = panfrost_emit_viewport(batch);
                 cfg.varyings = fs_vary;
                 cfg.varying_buffers = varyings;
-                cfg.shared = shared_mem;
+                cfg.thread_storage = shared_mem;
 
                 pan_emit_draw_descs(batch, &cfg, PIPE_SHADER_FRAGMENT);
 
diff --git a/src/panfrost/bifrost/test/bi_submit.c b/src/panfrost/bifrost/test/bi_submit.c
index 62572a3..99f1ba2 100644
--- a/src/panfrost/bifrost/test/bi_submit.c
+++ b/src/panfrost/bifrost/test/bi_submit.c
@@ -195,8 +195,8 @@
         }
 
         pan_section_pack(&job, COMPUTE_JOB, DRAW, cfg) {
-                cfg.unknown_1 = 0x2;
-                cfg.shared = shmem->gpu;
+                cfg.draw_descriptor_is_64b = true;
+                cfg.thread_storage = shmem->gpu;
                 cfg.state = shader_desc->gpu;
                 cfg.push_uniforms = ubo->gpu + 1024;
                 cfg.uniform_buffers = ubo->gpu;
diff --git a/src/panfrost/lib/decode.c b/src/panfrost/lib/decode.c
index 51e0a3f..a556fd7 100644
--- a/src/panfrost/lib/decode.c
+++ b/src/panfrost/lib/decode.c
@@ -1124,14 +1124,14 @@
         };
 
         if (is_bifrost)
-                pandecode_compute_fbd(p->shared & ~1, job_no);
-        else if (p->shared & MALI_FBD_TAG_IS_MFBD)
-                fbd_info = pandecode_mfbd_bfr((u64) ((uintptr_t) p->shared) & ~MALI_FBD_TAG_MASK,
+                pandecode_compute_fbd(p->fbd & ~1, job_no);
+        else if (p->fbd & MALI_FBD_TAG_IS_MFBD)
+                fbd_info = pandecode_mfbd_bfr((u64) ((uintptr_t) p->fbd) & ~MALI_FBD_TAG_MASK,
                                               job_no, false, job_type == MALI_JOB_TYPE_COMPUTE, is_bifrost, gpu_id);
         else if (job_type == MALI_JOB_TYPE_COMPUTE)
-                pandecode_compute_fbd((u64) (uintptr_t) p->shared, job_no);
+                pandecode_compute_fbd((u64) (uintptr_t) p->fbd, job_no);
         else
-                fbd_info = pandecode_sfbd((u64) (uintptr_t) p->shared, job_no, false, gpu_id);
+                fbd_info = pandecode_sfbd((u64) (uintptr_t) p->fbd, job_no, false, gpu_id);
 
         int varying_count = 0, attribute_count = 0, uniform_count = 0, uniform_buffer_count = 0;
         int texture_count = 0, sampler_count = 0;
@@ -1224,7 +1224,7 @@
                  * per-RT descriptors */
 
                 if (job_type == MALI_JOB_TYPE_TILER &&
-                    (is_bifrost || p->shared & MALI_FBD_TAG_IS_MFBD)) {
+                    (is_bifrost || p->fbd & MALI_FBD_TAG_IS_MFBD)) {
                         void* blend_base = ((void *) cl) + MALI_STATE_LENGTH;
 
                         for (unsigned i = 0; i < fbd_info.rt_count; i++) {
diff --git a/src/panfrost/lib/midgard.xml b/src/panfrost/lib/midgard.xml
index 4e5d976..74dcc38 100644
--- a/src/panfrost/lib/midgard.xml
+++ b/src/panfrost/lib/midgard.xml
@@ -342,16 +342,21 @@
   </struct>
 
   <struct name="Draw" size="30">
-    <field name="Unknown 1" size="3" start="0:0" type="uint"/>
+    <field name="Four Components Per Vertex" size="1" start="0:0" type="bool"/>
+    <field name="Draw Descriptor Is 64b" size="1" start="0:1" type="bool"/>
+    <field name="Texture Descriptor Is 64b" size="1" start="0:2" type="bool"/>
     <field name="Occlusion query" size="2" start="0:3" type="Occlusion Mode" default="Disabled"/>
     <field name="Front face CCW" size="1" start="0:5" type="bool"/>
     <field name="Cull front face" size="1" start="0:6" type="bool"/>
     <field name="Cull back face" size="1" start="0:7" type="bool"/>
-    <!-- TODO 0:7-0:15 -->
-    <field name="Instances" size="8" start="0:16" type="padded" default="1"/>
-    <!-- TODO: 0:16-0:24 -->
+    <field name="Flat Shading Vertex" size="1" start="0:8" type="uint"/>
+    <field name="Exclude Filtered Perf Counters" size="1" start="0:9" type="bool"/>
+    <field name="Primitive Barrier" size="1" start="0:10" type="bool"/>
+    <field name="Clean Fragment Write" size="1" start="0:11" type="bool"/>
+    <field name="Instance Size" size="8" start="0:16" type="padded" default="1"/>
+    <field name="Instance Primitive Size" size="8" start="0:24" type="padded" default="1"/>
     <field name="Offset start" size="32" start="1:0" type="uint"/>
-    <!-- TODO: 2-3 -->
+    <field name="Primitive Index Base" size="32" start="2:0" type="uint"/>
     <field name="Position" size="64" start="4:0" type="address"/>
     <field name="Uniform buffers" size="64" start="6:0" type="address"/>
     <field name="Textures" size="64" start="8:0" type="address"/>
@@ -364,7 +369,8 @@
     <field name="Varyings" size="64" start="22:0" type="address"/>
     <field name="Viewport" size="64" start="24:0" type="address"/>
     <field name="Occlusion" size="64" start="26:0" type="address"/>
-    <field name="Shared" size="64" start="28:0" type="address"/>
+    <field name="Thread Storage" size="64" start="28:0" type="address"/>
+    <field name="FBD" size="64" start="28:0" type="address"/>
   </struct>
 
   <struct name="Midgard Sampler">
diff --git a/src/panfrost/lib/pan_blit.c b/src/panfrost/lib/pan_blit.c
index 26c5608..eac5061 100644
--- a/src/panfrost/lib/pan_blit.c
+++ b/src/panfrost/lib/pan_blit.c
@@ -346,7 +346,9 @@
                 panfrost_pool_alloc_aligned(pool, MALI_MIDGARD_TILER_JOB_LENGTH, 64);
 
         pan_section_pack(t.cpu, MIDGARD_TILER_JOB, DRAW, cfg) {
-                cfg.unknown_1 = 0x7;
+                cfg.four_components_per_vertex = true;
+                cfg.draw_descriptor_is_64b = true;
+                cfg.texture_descriptor_is_64b = true;
                 cfg.position = coordinates;
                 cfg.textures = panfrost_pool_upload(pool, &texture_t.gpu, sizeof(texture_t.gpu));
                 cfg.samplers = sampler.gpu;
@@ -354,7 +356,7 @@
                 cfg.varying_buffers = varying_buffer.gpu;
                 cfg.varyings = varying.gpu;
                 cfg.viewport = viewport.gpu;
-                cfg.shared = fbd;
+                cfg.fbd = fbd;
         }
 
         pan_section_pack(t.cpu, MIDGARD_TILER_JOB, PRIMITIVE, cfg) {