From: Iago Toral Quiroga Date: Wed, 6 Apr 2016 08:27:14 +0000 (+0200) Subject: i965/fs: fix subreg_offset overflow in byte_offset() X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=17decd940c1e105506db74e8539a77db271adbc5;p=mesa.git i965/fs: fix subreg_offset overflow in byte_offset() This can happen if the register already has a non-zero subreg_offset when byte_offset() is called. v2 (Sam): - Refactor byte_offset() (Jordan). Signed-off-by: Samuel Iglesias Gonsálvez Reviewed-by: Kenneth Graunke --- diff --git a/src/mesa/drivers/dri/i965/brw_ir_fs.h b/src/mesa/drivers/dri/i965/brw_ir_fs.h index 86acdb236a4..305d91cd4c2 100644 --- a/src/mesa/drivers/dri/i965/brw_ir_fs.h +++ b/src/mesa/drivers/dri/i965/brw_ir_fs.h @@ -80,19 +80,21 @@ retype(fs_reg reg, enum brw_reg_type type) static inline fs_reg byte_offset(fs_reg reg, unsigned delta) { + reg.subreg_offset += delta; + switch (reg.file) { case BAD_FILE: break; case VGRF: case ATTR: - reg.reg_offset += delta / 32; + reg.reg_offset += reg.subreg_offset / 32; break; case MRF: reg.nr += delta / 32; break; case UNIFORM: - reg.reg_offset += delta / 4; - reg.subreg_offset += delta % 4; + reg.reg_offset += reg.subreg_offset / 4; + reg.subreg_offset %= 4; return reg; case ARF: case FIXED_GRF: @@ -100,7 +102,7 @@ byte_offset(fs_reg reg, unsigned delta) default: assert(delta == 0); } - reg.subreg_offset += delta % 32; + reg.subreg_offset %= 32; return reg; }