panfrost: Add specialized preload descriptors

It's just easier to identify the different layouts this way.

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/7206>
diff --git a/src/gallium/drivers/panfrost/pan_assemble.c b/src/gallium/drivers/panfrost/pan_assemble.c
index f237ded..6808a18 100644
--- a/src/gallium/drivers/panfrost/pan_assemble.c
+++ b/src/gallium/drivers/panfrost/pan_assemble.c
@@ -78,8 +78,8 @@
 
                 pan_prepare(&state->preload, PRELOAD);
                 state->preload.uniform_count = state->uniform_count;
-                state->preload.vertex_id = true;
-                state->preload.instance_id = true;
+                state->preload.vertex.vertex_id = true;
+                state->preload.vertex.instance_id = true;
                 break;
         case MESA_SHADER_FRAGMENT:
                 pan_prepare(&state->properties, RENDERER_PROPERTIES);
@@ -91,8 +91,8 @@
 
                 pan_prepare(&state->preload, PRELOAD);
                 state->preload.uniform_count = state->uniform_count;
-                state->preload.fragment_position = state->reads_frag_coord;
-                state->preload.unknown = true;
+                state->preload.fragment.fragment_position = state->reads_frag_coord;
+                state->preload.fragment.coverage = true;
                 break;
         default:
                 unreachable("TODO");
diff --git a/src/panfrost/bifrost/test/bi_submit.c b/src/panfrost/bifrost/test/bi_submit.c
index da3512c..cfa2aa3 100644
--- a/src/panfrost/bifrost/test/bi_submit.c
+++ b/src/panfrost/bifrost/test/bi_submit.c
@@ -178,8 +178,8 @@
                 cfg.shader.attribute_count = cfg.shader.varying_count = 1;
                 cfg.properties.uniform_buffer_count = 1;
                 cfg.properties.bifrost.zs_update_operation = MALI_PIXEL_KILL_STRONG_EARLY;
-                cfg.preload.vertex_id = true;
-                cfg.preload.instance_id = true;
+                cfg.preload.vertex.vertex_id = true;
+                cfg.preload.vertex.instance_id = true;
                 cfg.preload.uniform_count = (sz_ubo / 16);
         }
 
diff --git a/src/panfrost/lib/midgard.xml b/src/panfrost/lib/midgard.xml
index df9c9cc..ede4b0f 100644
--- a/src/panfrost/lib/midgard.xml
+++ b/src/panfrost/lib/midgard.xml
@@ -680,7 +680,8 @@
     <field name="Stencil from shader" size="1" start="28" type="bool"/>
   </struct>
 
-  <struct name="Preload" size="1">
+  <struct name="Compute Preload" size="1" no-direct-packing="true">
+    <field name="PC" size="1" start="6" type="bool"/>
     <field name="Local Invocation XY" size="1" start="7" type="bool"/>
     <field name="Local Invocation Z" size="1" start="8" type="bool"/>
     <field name="Work group X" size="1" start="9" type="bool"/>
@@ -689,13 +690,37 @@
     <field name="Global Invocation X" size="1" start="12" type="bool"/>
     <field name="Global Invocation Y" size="1" start="13" type="bool"/>
     <field name="Global Invocation Z" size="1" start="14" type="bool"/>
+  </struct>
+
+  <enum name="Warp Limit">
+    <value name="None" value="0"/>
+    <value name="2" value="1"/>
+    <value name="4" value="2"/>
+    <value name="8" value="3"/>
+  </enum>
+
+  <struct name="Vertex Preload" size="1" no-direct-packing="true">
+    <field name="Warp limit" size="2" start="0" type="Warp Limit"/>
+    <field name="PC" size="1" start="6" type="bool"/>
+    <field name="Position result address lo" size="1" start="10" type="bool"/>
+    <field name="Position result address hi" size="1" start="11" type="bool"/>
     <field name="Vertex ID" size="1" start="13" type="bool"/>
     <field name="Instance ID" size="1" start="14" type="bool"/>
-    <field name="Unknown" size="1" start="7" type="bool"/>
+  </struct>
+
+  <struct name="Fragment Preload" size="1" no-direct-packing="true">
+    <field name="PC" size="1" start="6" type="bool"/>
+    <field name="Coverage" size="1" start="7" type="bool"/>
     <field name="Primitive ID" size="1" start="9" type="bool"/>
-    <field name="Front facing" size="1" start="10" type="bool"/>
+    <field name="Primitive flags" size="1" start="10" type="bool"/>
     <field name="Fragment position" size="1" start="11" type="bool"/>
-    <field name="Sample mask/ID" size="1" start="12" type="bool"/>
+    <field name="Sample mask/ID" size="1" start="13" type="bool"/>
+  </struct>
+
+  <struct name="Preload" size="1">
+    <field name="Compute" size="32" start="0" type="Compute Preload"/>
+    <field name="Vertex" size="32" start="0" type="Vertex Preload"/>
+    <field name="Fragment" size="32" start="0" type="Fragment Preload"/>
     <field name="Uniform count" size="7" start="15" type="uint"/>
   </struct>