intel: Fix ROUND_DOWN_TO macro
authorIan Romanick <ian.d.romanick@intel.com>
Fri, 8 Apr 2011 23:31:22 +0000 (16:31 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Mon, 11 Apr 2011 21:43:42 +0000 (14:43 -0700)
commit7e809f0b8d635c8d5519b3d0fdaf11ac0ddda7eb
tree51f95543bbe7134f3a4c6157905d1a82058a2b40
parent03eade164d45cc35422dfc03aeaf579c9c3183f9
intel: Fix ROUND_DOWN_TO macro

Previously the macro would (ALIGN(value - alignment - 1, alignment)).
At the very least, this was missing parenthesis around "alignment -
1".  As a result, if value was already aligned, it would be reduced by
alignment.  Condisder:

     x = ROUND_DOWN_TO(256, 128);

This becomes:

    x = ALIGN(256 - 128 - 1, 128);

Or:

    x = ALIGN(127, 128);

Which becomes:

    x = 128;

This macro is currently only used in brw_state_batch
(brw_state_batch.c).  It looks like the original version of this macro
would just use too much space in the batch buffer.  It's possible, but
not at all clear to me from the code, that the original behavior is
actually desired.

In any case, this patch does not cause any piglit regressions on my
Ironlake system.

I also think that ALIGN_FLOOR would be a better name for this macro,
but ROUND_DOWN_TO matches rounddown in the Linux kernel.

Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Keith Whitwell <keithw@vmware.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/intel/intel_context.h