diff options
author | Rob Clark <[email protected]> | 2020-06-22 08:45:13 -0700 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-06-24 22:29:28 +0000 |
commit | 3e8c6312c70fb5a8a8df0bb4eeee70a079fe67ea (patch) | |
tree | e230e47c9eca9e51fde4d7ed86ec690051554812 /src/gallium/drivers/freedreno | |
parent | a474d48e1764a5251e1a47e1a34424c28d8ecfa0 (diff) |
freedreno/a5xx: use point-coord helper
Signed-off-by: Rob Clark <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5595>
Diffstat (limited to 'src/gallium/drivers/freedreno')
-rw-r--r-- | src/gallium/drivers/freedreno/a5xx/fd5_program.c | 58 |
1 files changed, 25 insertions, 33 deletions
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_program.c b/src/gallium/drivers/freedreno/a5xx/fd5_program.c index dba953d590f..a491cf10b04 100644 --- a/src/gallium/drivers/freedreno/a5xx/fd5_program.c +++ b/src/gallium/drivers/freedreno/a5xx/fd5_program.c @@ -610,40 +610,32 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring, } } - gl_varying_slot slot = s[FS].v->inputs[j].slot; - - /* since we don't enable PIPE_CAP_TGSI_TEXCOORD: */ - if (slot >= VARYING_SLOT_VAR0) { - unsigned texmask = 1 << (slot - VARYING_SLOT_VAR0); - /* Replace the .xy coordinates with S/T from the point sprite. Set - * interpolation bits for .zw such that they become .01 + bool coord_mode = emit->sprite_coord_mode; + if (ir3_point_sprite(s[FS].v, j, emit->sprite_coord_enable, &coord_mode)) { + /* mask is two 2-bit fields, where: + * '01' -> S + * '10' -> T + * '11' -> 1 - T (flip mode) */ - if (emit->sprite_coord_enable & texmask) { - /* mask is two 2-bit fields, where: - * '01' -> S - * '10' -> T - * '11' -> 1 - T (flip mode) - */ - unsigned mask = emit->sprite_coord_mode ? 0b1101 : 0b1001; - uint32_t loc = inloc; - if (compmask & 0x1) { - vpsrepl[loc / 16] |= ((mask >> 0) & 0x3) << ((loc % 16) * 2); - loc++; - } - if (compmask & 0x2) { - vpsrepl[loc / 16] |= ((mask >> 2) & 0x3) << ((loc % 16) * 2); - loc++; - } - if (compmask & 0x4) { - /* .z <- 0.0f */ - vinterp[loc / 16] |= 0b10 << ((loc % 16) * 2); - loc++; - } - if (compmask & 0x8) { - /* .w <- 1.0f */ - vinterp[loc / 16] |= 0b11 << ((loc % 16) * 2); - loc++; - } + unsigned mask = coord_mode ? 0b1101 : 0b1001; + uint32_t loc = inloc; + if (compmask & 0x1) { + vpsrepl[loc / 16] |= ((mask >> 0) & 0x3) << ((loc % 16) * 2); + loc++; + } + if (compmask & 0x2) { + vpsrepl[loc / 16] |= ((mask >> 2) & 0x3) << ((loc % 16) * 2); + loc++; + } + if (compmask & 0x4) { + /* .z <- 0.0f */ + vinterp[loc / 16] |= 0b10 << ((loc % 16) * 2); + loc++; + } + if (compmask & 0x8) { + /* .w <- 1.0f */ + vinterp[loc / 16] |= 0b11 << ((loc % 16) * 2); + loc++; } } } |