r600g: track dirty registers better. (v2)
authorDave Airlie <airlied@redhat.com>
Sun, 17 Apr 2011 07:35:44 +0000 (17:35 +1000)
committerDave Airlie <airlied@redhat.com>
Tue, 19 Apr 2011 00:12:19 +0000 (10:12 +1000)
commitc058067e578e4426f56f9b23e33e3d3fac4562f7
treea043ff8911cd54e147e290f27e47f82859a664bb
parentedf2e4f79d5b27cb909b37fabc35e68d14af0834
r600g: track dirty registers better. (v2)

This is a first step to decreasing the CPU usage, by decreasing how much
stuff we pass to the GPU and hence to the kernel CS checker.

This adds a check to see if the values we need to write are actually dirty,
and avoids writing if they are. However certain register need to always
be written so we add a new flag to say which ones should be always written
if used. (Note this could probably be done cleaner with a larger refactoring,
 since I think the CONST_BUFFER_SIZE_PS/VS and CONST_CACHE_PS/VS might
be better off as a special state).

It also moves the need_bo to be a flags on the register now.

With this, a frame of gears goes from emitting 3k dwords to emitting 2k dwords,
and I'm sure it could get a lot smaller.

v2: fix some evergreen dirty bits.

Original patch from: Bas Nieuwenhuizen, I NIHed nearly the same thing
before seeing his patch on the list, oops.

Reviewed-by: Bas Nieuwenhuizen
Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/r600/r600.h
src/gallium/winsys/r600/drm/evergreen_hw_context.c
src/gallium/winsys/r600/drm/r600_hw_context.c
src/gallium/winsys/r600/drm/r600_priv.h