diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 26 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_ir_fs.h | 8 |
2 files changed, 5 insertions, 29 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 60907cd20b9..375d73be5e9 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -863,31 +863,7 @@ fs_inst::size_read(int arg) const case SHADER_OPCODE_MOV_INDIRECT: if (arg == 0) { assert(src[2].file == IMM); - unsigned region_length = src[2].ud; - - if (src[0].file == UNIFORM) { - assert(region_length % 4 == 0); - return region_length; - } else if (src[0].file == FIXED_GRF) { - /* If the start of the region is not register aligned, then - * there's some portion of the register that's technically - * unread at the beginning. - * - * However, the register allocator works in terms of whole - * registers, and does not use subnr. It assumes that the - * read starts at the beginning of the register, and extends - * regs_read() whole registers beyond that. - * - * To compensate, we extend the region length to include this - * unread portion at the beginning. - */ - if (src[0].subnr) - region_length += src[0].subnr; - - return region_length; - } else { - assert(!"Invalid register file"); - } + return src[2].ud; } break; diff --git a/src/mesa/drivers/dri/i965/brw_ir_fs.h b/src/mesa/drivers/dri/i965/brw_ir_fs.h index 0be67b7b2f9..c688345fdfd 100644 --- a/src/mesa/drivers/dri/i965/brw_ir_fs.h +++ b/src/mesa/drivers/dri/i965/brw_ir_fs.h @@ -435,9 +435,9 @@ set_saturate(bool saturate, fs_inst *inst) inline unsigned regs_written(const fs_inst *inst) { - /* XXX - Take into account register-misaligned offsets correctly. */ assert(inst->dst.file != UNIFORM && inst->dst.file != IMM); - return DIV_ROUND_UP(inst->size_written - + return DIV_ROUND_UP(reg_offset(inst->dst) % REG_SIZE + + inst->size_written - MIN2(inst->size_written, reg_padding(inst->dst)), REG_SIZE); } @@ -451,10 +451,10 @@ regs_written(const fs_inst *inst) inline unsigned regs_read(const fs_inst *inst, unsigned i) { - /* XXX - Take into account register-misaligned offsets correctly. */ const unsigned reg_size = inst->src[i].file == UNIFORM || inst->src[i].file == IMM ? 4 : REG_SIZE; - return DIV_ROUND_UP(inst->size_read(i) - + return DIV_ROUND_UP(reg_offset(inst->src[i]) % reg_size + + inst->size_read(i) - MIN2(inst->size_read(i), reg_padding(inst->src[i])), reg_size); } |