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>