mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 15:48:36 +02:00
panfrost/midgard/disasm: Varying perspective divides
With an extra flag, we're able to do a perspective division "for free" while loading a varying. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
parent
fc472007e7
commit
109460f03a
2 changed files with 28 additions and 4 deletions
|
|
@ -924,12 +924,21 @@ print_varying_parameters(midgard_load_store_word *word)
|
|||
else
|
||||
printf(".interp%d", param.interpolation);
|
||||
}
|
||||
} else if (param.flat || param.interpolation) {
|
||||
|
||||
if (param.modifier != midgard_varying_mod_none) {
|
||||
if (param.modifier == midgard_varying_mod_perspective_w)
|
||||
printf(".perspectivew");
|
||||
else if (param.modifier == midgard_varying_mod_perspective_z)
|
||||
printf(".perspectivez");
|
||||
else
|
||||
printf(".mod%d", param.modifier);
|
||||
}
|
||||
} else if (param.flat || param.interpolation || param.modifier) {
|
||||
printf(" /* is_varying not set but varying metadata attached */");
|
||||
}
|
||||
|
||||
if (param.zero1 || param.zero2)
|
||||
printf(" /* zero tripped, %d %d */ ", param.zero1, param.zero2);
|
||||
if (param.zero0 || param.zero1 || param.zero2)
|
||||
printf(" /* zero tripped, %d %d %d */ ", param.zero0, param.zero1, param.zero2);
|
||||
}
|
||||
|
||||
static bool
|
||||
|
|
|
|||
|
|
@ -435,10 +435,25 @@ typedef enum {
|
|||
midgard_interp_default = 2
|
||||
} midgard_interpolation;
|
||||
|
||||
typedef enum {
|
||||
midgard_varying_mod_none = 0,
|
||||
|
||||
/* Other values unknown */
|
||||
|
||||
/* Take the would-be result and divide all components by its z/w
|
||||
* (perspective division baked in with the load) */
|
||||
midgard_varying_mod_perspective_z = 2,
|
||||
midgard_varying_mod_perspective_w = 3,
|
||||
} midgard_varying_modifier;
|
||||
|
||||
typedef struct
|
||||
__attribute__((__packed__))
|
||||
{
|
||||
unsigned zero1 : 4; /* Always zero */
|
||||
unsigned zero0 : 1; /* Always zero */
|
||||
|
||||
midgard_varying_modifier modifier : 2;
|
||||
|
||||
unsigned zero1: 1; /* Always zero */
|
||||
|
||||
/* Varying qualifiers, zero if not a varying */
|
||||
unsigned flat : 1;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue