mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-03 15:50:17 +01:00
r600g: check rasterizer primitive states like in radeonsi
Specifically, non-line primitives skipped, and defaulting to reset on each packet. The skip of non-line primitives saves ≈110 resetting of PA_SC_LINE_STIPPLE register per frame in Kane&Lynch2. Signed-off-by: Constantine Kharlamov <Hi-Angel@yandex.ru> Signed-off-by: Marek Olšák <marek.olsak@amd.com> Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
This commit is contained in:
parent
7ade08e2a8
commit
6ee486899b
1 changed files with 13 additions and 8 deletions
|
|
@ -1670,19 +1670,24 @@ void r600_emit_clip_misc_state(struct r600_context *rctx, struct r600_atom *atom
|
|||
static inline void r600_emit_rasterizer_prim_state(struct r600_context *rctx)
|
||||
{
|
||||
struct radeon_winsys_cs *cs = rctx->b.gfx.cs;
|
||||
unsigned ls_mask = 0;
|
||||
enum pipe_prim_type rast_prim = rctx->current_rast_prim;
|
||||
|
||||
/* Skip this if not rendering lines. */
|
||||
if (rast_prim != PIPE_PRIM_LINES &&
|
||||
rast_prim != PIPE_PRIM_LINE_LOOP &&
|
||||
rast_prim != PIPE_PRIM_LINE_STRIP &&
|
||||
rast_prim != PIPE_PRIM_LINES_ADJACENCY &&
|
||||
rast_prim != PIPE_PRIM_LINE_STRIP_ADJACENCY)
|
||||
return;
|
||||
|
||||
if (rast_prim == rctx->last_rast_prim)
|
||||
return;
|
||||
|
||||
if (rast_prim == PIPE_PRIM_LINES)
|
||||
ls_mask = 1;
|
||||
else if (rast_prim == PIPE_PRIM_LINE_STRIP ||
|
||||
rast_prim == PIPE_PRIM_LINE_LOOP)
|
||||
ls_mask = 2;
|
||||
|
||||
/* For lines, reset the stipple pattern at each primitive. Otherwise,
|
||||
* reset the stipple pattern at each packet (line strips, line loops).
|
||||
*/
|
||||
radeon_set_context_reg(cs, R_028A0C_PA_SC_LINE_STIPPLE,
|
||||
S_028A0C_AUTO_RESET_CNTL(ls_mask) |
|
||||
S_028A0C_AUTO_RESET_CNTL(rast_prim == PIPE_PRIM_LINES ? 1 : 2) |
|
||||
(rctx->rasterizer ? rctx->rasterizer->pa_sc_line_stipple : 0));
|
||||
rctx->last_rast_prim = rast_prim;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue