sources with file == HW_REG get all their information from the fixed_hw_reg field, so we need to get the stride and type from there when computing the size.
Signed-off-by: Connor Abbott <connor.w.abb...@intel.com> --- src/mesa/drivers/dri/i965/brw_fs.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 38b9095..64f093b 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -696,24 +696,36 @@ fs_inst::regs_read(int arg) const break; } + unsigned stride; + enum brw_reg_type type; + switch (src[arg].file) { case BAD_FILE: case UNIFORM: case IMM: return 1; + case GRF: + stride = src[arg].stride; + type = src[arg].type; + break; + case HW_REG: - if (src[arg].stride == 0) { - return 1; - } else { - int size = components * this->exec_size * type_sz(src[arg].type); - return DIV_ROUND_UP(size * src[arg].stride, 32); - } + stride = src[arg].fixed_hw_reg.hstride; + type = src[arg].fixed_hw_reg.type; + break; + case MRF: unreachable("MRF registers are not allowed as sources"); default: unreachable("Invalid register file"); } + + if (stride == 0) + return 1; + + int size = components * this->exec_size * type_sz(type); + return DIV_ROUND_UP(size * stride, 32); } bool -- 2.4.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev