From: Francisco Jerez Date: Fri, 2 Sep 2016 22:21:26 +0000 (-0700) Subject: i965/fs: Switch mask_relative_to() used in compute-to-mrf to byte units. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a384503c156e182560104e6c43a6bf0c64608791;p=mesa.git i965/fs: Switch mask_relative_to() used in compute-to-mrf to byte units. This makes the helper function less annoying to use and somewhat more accurate. Reviewed-by: Iago Toral Quiroga --- diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index ff81e7145b3..e40a7d47677 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -2646,16 +2646,18 @@ fs_visitor::opt_redundant_discard_jumps() /** * Compute a bitmask with GRF granularity with a bit set for each GRF starting - * from \p r which overlaps the region starting at \p r and spanning \p n GRF - * units. + * from \p r.offset which overlaps the region starting at \p s.offset and + * spanning \p ds bytes. */ static inline unsigned -mask_relative_to(const fs_reg &r, const fs_reg &s, unsigned n) +mask_relative_to(const fs_reg &r, const fs_reg &s, unsigned ds) { - const int rel_offset = (reg_offset(s) - reg_offset(r)) / REG_SIZE; + const int rel_offset = reg_offset(s) - reg_offset(r); + const int shift = rel_offset / REG_SIZE; + const unsigned n = DIV_ROUND_UP(rel_offset % REG_SIZE + ds, REG_SIZE); assert(reg_space(r) == reg_space(s) && - rel_offset >= 0 && rel_offset < int(8 * sizeof(unsigned))); - return ((1 << n) - 1) << rel_offset; + shift >= 0 && shift < int(8 * sizeof(unsigned))); + return ((1 << n) - 1) << shift; } bool @@ -2735,8 +2737,7 @@ fs_visitor::compute_to_mrf() /* Clear the bits for any registers this instruction overwrites. */ regs_left &= ~mask_relative_to( - inst->src[0], scan_inst->dst, DIV_ROUND_UP(scan_inst->size_written, - REG_SIZE)); + inst->src[0], scan_inst->dst, scan_inst->size_written); if (!regs_left) break; } @@ -2794,8 +2795,7 @@ fs_visitor::compute_to_mrf() inst->src[0], inst->size_read(0))) { /* Clear the bits for any registers this instruction overwrites. */ regs_left &= ~mask_relative_to( - inst->src[0], scan_inst->dst, DIV_ROUND_UP(scan_inst->size_written, - REG_SIZE)); + inst->src[0], scan_inst->dst, scan_inst->size_written); const unsigned rel_offset = reg_offset(scan_inst->dst) - reg_offset(inst->src[0]);