i965/fs: Fix lower_load_payload() to take into account non-zero reg_offset.
authorFrancisco Jerez <currojerez@riseup.net>
Fri, 6 Feb 2015 13:06:05 +0000 (15:06 +0200)
committerFrancisco Jerez <currojerez@riseup.net>
Mon, 23 Feb 2015 18:55:40 +0000 (20:55 +0200)
Fixes metadata guess when instructions in the program specify a
destination register with non-zero reg_offset and when the payload of
a LOAD_PAYLOAD spans several registers.

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
src/mesa/drivers/dri/i965/brw_fs.cpp

index e396fbc08256fe2685ace46ed3abc22efed78a65..4fa679017577d8a8e3d63745ae0e358e69a2b76e 100644 (file)
@@ -3127,7 +3127,7 @@ fs_visitor::lower_load_payload()
 
    foreach_block_and_inst_safe (block, fs_inst, inst, cfg) {
       if (inst->dst.file == GRF) {
-         const int dst_reg = vgrf_to_reg[inst->dst.reg];
+         const int dst_reg = vgrf_to_reg[inst->dst.reg] + inst->dst.reg_offset;
          bool force_sechalf = inst->force_sechalf &&
                               !inst->force_writemask_all;
          bool toggle_sechalf = inst->dst.width == 16 &&
@@ -3176,7 +3176,7 @@ fs_visitor::lower_load_payload()
                }
 
                if (dst.file == GRF) {
-                  const int dst_reg = vgrf_to_reg[dst.reg];
+                  const int dst_reg = vgrf_to_reg[dst.reg] + dst.reg_offset;
                   const bool force_writemask = mov->force_writemask_all;
                   metadata[dst_reg].force_writemask_all = force_writemask;
                   metadata[dst_reg].force_sechalf = mov->force_sechalf;