diff options
author | Ilia Mirkin <imirkin@alum.mit.edu> | 2015-12-29 15:05:34 -0500 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2016-01-08 12:05:26 +0200 |
commit | 1415b6b0aebd37f9d472a2c24b9ce603023d0475 (patch) | |
tree | 67ae99b21e202fa9f4103a2732962a3ae2f6bbd1 | |
parent | e468d4b1d69bd8cd290bb5d8fbef72ae28428a6e (diff) | |
download | mesa-1415b6b0aebd37f9d472a2c24b9ce603023d0475.tar.gz |
nv50/ir: float(s32 & 0xff) = float(u8), not s8
Make sure to make conversion unsigned when we're ANDing the high bits
away. Fixes corruption in dolphin.
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: "11.0 11.1" <mesa-stable@lists.freedesktop.org>
(cherry picked from commit 724134f68322087ef88bc590febd0011167ae367)
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp index fa6a04bc589..8a2516b860a 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp @@ -1711,6 +1711,9 @@ AlgebraicOpt::handleCVT_EXTBF(Instruction *cvt) arg = shift->getSrc(0); offset = imm.reg.data.u32; } + // We just AND'd the high bits away, which means this is effectively an + // unsigned value. + cvt->sType = TYPE_U32; } else if (insn->op == OP_SHR && insn->sType == cvt->sType && insn->src(1).getImmediate(imm)) { |