st/nine: Fix output shift calculation
authorAxel Davy <axel.davy@ens.fr>
Sat, 12 Mar 2016 11:24:51 +0000 (12:24 +0100)
committerAxel Davy <axel.davy@ens.fr>
Wed, 18 May 2016 21:37:14 +0000 (23:37 +0200)
We were getting it wrong for negative values.

Signed-off-by: Axel Davy <axel.davy@ens.fr>
src/gallium/state_trackers/nine/nine_shader.c

index 972245f475323d9931c2eae4ea909b86fba93896..2e822ce80c9ac87d230abc74946f98090c4bac22 100644 (file)
@@ -3005,7 +3005,7 @@ sm1_parse_get_param(struct shader_translator *tx, DWORD *reg, DWORD *rel)
 static void
 sm1_parse_dst_param(struct sm1_dst_param *dst, DWORD tok)
 {
-    uint8_t shift;
+    int8_t shift;
     dst->file =
         (tok & D3DSP_REGTYPE_MASK)  >> D3DSP_REGTYPE_SHIFT |
         (tok & D3DSP_REGTYPE_MASK2) >> D3DSP_REGTYPE_SHIFT2;
@@ -3015,7 +3015,7 @@ sm1_parse_dst_param(struct sm1_dst_param *dst, DWORD tok)
     dst->mask = (tok & NINED3DSP_WRITEMASK_MASK) >> NINED3DSP_WRITEMASK_SHIFT;
     dst->mod = (tok & D3DSP_DSTMOD_MASK) >> D3DSP_DSTMOD_SHIFT;
     shift = (tok & D3DSP_DSTSHIFT_MASK) >> D3DSP_DSTSHIFT_SHIFT;
-    dst->shift = (shift & 0x8) ? -(shift & 0x7) : shift & 0x7;
+    dst->shift = (shift & 0x7) - (shift & 0x8);
 }
 
 static void