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>
This commit is contained in:
Boris Brezillon 2020-10-17 11:02:12 +02:00 committed by Marge Bot
parent d769697f35
commit 7486b5d91e
3 changed files with 35 additions and 10 deletions

View File

@ -78,8 +78,8 @@ pan_prepare_bifrost_props(struct panfrost_shader_state *state,
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_bifrost_props(struct panfrost_shader_state *state,
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");

View File

@ -178,8 +178,8 @@ bit_vertex(struct panfrost_device *dev, panfrost_program prog,
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);
}

View File

@ -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>