Now that we have execution sizes, we can use that instead of the dispatch width. This way it also works for 8-wide instructions in SIMD16. --- src/mesa/drivers/dri/i965/brw_fs.cpp | 10 +++++----- src/mesa/drivers/dri/i965/brw_fs.h | 4 ++-- src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 551bc2b..ffbfdbd 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -354,7 +354,7 @@ fs_visitor::LOAD_PAYLOAD(const fs_reg &dst, fs_reg *src, int sources) * dealing with whole registers. If this ever changes, we can deal * with it later. */ - int size = src[i].effective_width(this) * type_sz(src[i].type); + int size = src[i].effective_width(inst) * type_sz(src[i].type); assert(size % 32 == 0); inst->regs_written += (size + 31) / 32; } @@ -583,7 +583,7 @@ fs_reg::equals(const fs_reg &r) const } uint8_t -fs_reg::effective_width(const fs_visitor *v) const +fs_reg::effective_width(const fs_inst *inst) const { switch (this->file) { case BAD_FILE: @@ -591,10 +591,10 @@ fs_reg::effective_width(const fs_visitor *v) const case UNIFORM: case IMM: assert(this->width == 1); - return v->dispatch_width; + return inst->exec_size; case GRF: case HW_REG: - assert(this->width > 1 && this->width <= v->dispatch_width); + assert(this->width > 1 && this->width <= inst->exec_size); assert(this->width % 8 == 0); return this->width; case MRF: @@ -2994,7 +2994,7 @@ fs_visitor::lower_load_payload() fs_reg dst = inst->dst; for (int i = 0; i < inst->sources; i++) { - dst.width = inst->src[i].effective_width(this); + dst.width = inst->src[i].effective_width(inst); dst.type = inst->src[i].type; if (inst->src[i].file == BAD_FILE) { diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index 4ffbec8..c282b5e 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ b/src/mesa/drivers/dri/i965/brw_fs.h @@ -62,7 +62,7 @@ namespace brw { class fs_live_variables; } -class fs_visitor; +class fs_inst; class fs_reg : public backend_reg { public: @@ -110,7 +110,7 @@ public: * effectively take on the width of the instruction in which they are * used. */ - uint8_t effective_width(const fs_visitor *v) const; + uint8_t effective_width(const fs_inst *inst) const; /** Register region horizontal stride */ uint8_t stride; diff --git a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp index aafc49b..73a196d 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp @@ -640,13 +640,13 @@ fs_visitor::opt_copy_propagate_local(void *copy_prop_ctx, bblock_t *block, inst->dst.file == GRF) { int offset = 0; for (int i = 0; i < inst->sources; i++) { - int regs_written = ((inst->src[i].effective_width(this) * + int regs_written = ((inst->src[i].effective_width(inst) * type_sz(inst->src[i].type)) + 31) / 32; if (inst->src[i].file == GRF) { acp_entry *entry = ralloc(copy_prop_ctx, acp_entry); entry->dst = inst->dst; entry->dst.reg_offset = offset; - entry->dst.width = inst->src[i].effective_width(this); + entry->dst.width = inst->src[i].effective_width(inst); entry->src = inst->src[i]; entry->regs_written = regs_written; entry->opcode = inst->opcode; -- 2.1.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev