mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-19 01:40:43 +01:00
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:
parent
210f4aff1e
commit
2bdb8ba3ce
3 changed files with 8 additions and 14 deletions
|
|
@ -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"/>
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue