asahi: Correct SET_SHADER_EXTENDED disambig bit

This is still a guess, but a considerably firmer one as it now corrects
handles the clear pipelines emitted by Metal as well as the regular
vertex/fragment shader, and gets rid of the preshader special cases
seen there. Fixes decode of clear pipeline's preshaders.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18380>
This commit is contained in:
Alyssa Rosenzweig 2022-09-03 14:01:03 -04:00 committed by Marge Bot
parent 210f4aff1e
commit 2bdb8ba3ce
3 changed files with 8 additions and 14 deletions

View file

@ -448,7 +448,7 @@
<field name="Code" size="32" start="1:16" type="address"/>
<field name="Unk 3" size="8" start="2:16" type="hex" default="0x8d"/>
<field name="Register quadwords" size="5" start="2:24" type="uint"/> <!-- 0 for max -->
<field name="Unk 3b" size="3" start="2:29" type="hex" default="0x0"/>
<field name="Has fragment parameters" size="1" start="2:29" type="bool" default="false"/>
<field name="Spill size" size="8" start="3:0" type="hex" default="0"/> <!-- TODO: determine relation, see docs/table.py -->
<field name="Unk 4" size="12" start="3:8" type="hex" default="0x801"/>
<field name="Preshader mode" size="4" start="3:20" type="Preshader mode" default="No preshader"/>
@ -479,7 +479,7 @@
<field name="Code" size="32" start="1:16" type="address"/>
<field name="Unk 3" size="8" start="2:16" type="hex" default="0x28d"/>
<field name="Register quadwords" size="5" start="2:24" type="uint"/> <!-- 0 for max -->
<field name="Unk 3b" size="3" start="2:29" type="hex" default="0x0"/>
<field name="Has fragment parameters" size="1" start="2:29" type="bool" default="true"/>
<field name="Fragment parameters" size="32" start="3:0" type="Fragment Parameters"/>
<field name="Spill size" size="8" start="4:0" type="hex" default="0"/> <!-- TODO: determine relation, see docs/table.py -->
<field name="Unk 4" size="12" start="4:8" type="hex" default="0x801"/>

View file

@ -305,8 +305,7 @@ agxdecode_pipeline(const uint8_t *map, UNUSED bool verbose)
{
uint8_t zeroes[16] = { 0 };
if (map[0] == 0x4D && map[1] == 0xbd) {
/* TODO: Disambiguation for extended is a guess */
if (map[0] == 0x4D && (map[11] & BITFIELD_BIT(5))) {
agx_unpack(agxdecode_dump_stream, map, SET_SHADER_EXTENDED, cmd);
DUMP_UNPACKED(SET_SHADER_EXTENDED, cmd, "Set shader\n");

View file

@ -1244,7 +1244,6 @@ agx_build_pipeline(struct agx_context *ctx, struct agx_compiled_shader *cs, enum
cfg.unk_2 = 0x0d;
cfg.loads_varyings = true;
cfg.fragment_parameters.early_z_testing = !writes_sample_mask;
cfg.unk_3b = 0x1;
cfg.unk_4 = 0x800;
cfg.preshader_unk = 0xc080;
cfg.spill_size = 0x2;
@ -1288,19 +1287,15 @@ agx_build_clear_pipeline(struct agx_context *ctx, uint32_t code, uint64_t clear_
record += AGX_BIND_UNIFORM_LENGTH;
/* TODO: Can we prepack this? */
agx_pack(record, SET_SHADER_EXTENDED, cfg) {
agx_pack(record, SET_SHADER, cfg) {
cfg.code = code;
cfg.register_quadwords = 1;
cfg.unk_3 = 0x8d;
cfg.unk_1 = 0x2010bd;
cfg.unk_2 = 0x0d;
cfg.fragment_parameters.unk_1 = 0x880100;
cfg.fragment_parameters.early_z_testing = false;
cfg.fragment_parameters.unk_2 = false;
cfg.fragment_parameters.unk_3 = 0;
cfg.preshader_mode = 0; // XXX
cfg.unk_3 = 0x8d;
cfg.register_quadwords = 1;
}
record += AGX_SET_SHADER_EXTENDED_LENGTH;
record += AGX_SET_SHADER_LENGTH;
/* End pipeline */
memset(record, 0, 8);