r600g: use a bitfield to track dirty atoms
authorGrazvydas Ignotas <notasas@gmail.com>
Sun, 9 Aug 2015 21:42:35 +0000 (00:42 +0300)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 11 Aug 2015 12:46:54 +0000 (14:46 +0200)
commit50545882113b389decc3f05771764f6c62213af3
treee7a5cd5ecc4354968e10ec2ad34cd9e8d3aaab3e
parentc58534c1384dc63bb1b13eb37c06bdb4652c13ff
r600g: use a bitfield to track dirty atoms

r600 currently has 73 atoms and looping through their dirty flags has
become costly because checking each flag requires a pointer
dereference before the read. To avoid having to do that add additional
bitfield which can be checked really quickly thanks to tzcnt instruction.

id field was added to struct r600_atom but that doesn't affect memory
usage for both 32 and 64 bit CPUs because it was stuffed into padding.

The performance improvement is ~2% for benchmarks that can have FPS in
the thousands but is hardly measurable in "real" programs.

Signed-off-by: Marek Olšák <marek.olsak@amd.com>
src/gallium/drivers/r600/r600_hw_context.c
src/gallium/drivers/r600/r600_pipe.h
src/gallium/drivers/r600/r600_state_common.c
src/gallium/drivers/radeon/r600_pipe_common.h