r600c: fix setting negative values to bitfields
authorAndre Maasikas <amaasikas@gmail.com>
Tue, 14 Sep 2010 15:56:39 +0000 (18:56 +0300)
committerAndre Maasikas <amaasikas@gmail.com>
Tue, 14 Sep 2010 16:00:35 +0000 (19:00 +0300)
when setting negative integers to bitfields we could overwrite
other parts of it. So mask the value to be written correctly.
This is used quite often in the driver - hope it doesnt affect
performace or uncover behaviour relied before...

fixes strange effects when setting negative lodbias on evergreen

src/mesa/drivers/dri/r600/r700_chip.h

index ebf1840..0ca237b 100644 (file)
@@ -38,7 +38,7 @@
 
 #include "r700_chipoffset.h"
 
-#define SETfield(x, val, shift, mask)  ( (x) = ((x) & ~(mask)) | ((val) << (shift)) ) /* u32All */
+#define SETfield(x, val, shift, mask)  ( (x) = ((x) & ~(mask)) | (((val) << (shift)) & (mask)) )/* u32All */
 #define CLEARfield(x, mask)            ( (x) &= ~(mask) )
 #define SETbit(x, bit)                 ( (x) |= (bit) )
 #define CLEARbit(x, bit)               ( (x) &= ~(bit) )