We have this wonderful offset() function for advancing registers, but we're not using it. Using offset() allows us to do some sanity checking and avoid manually touching fs_reg::reg_offset. In a few commits, we will make offset do even more nifty things for us.
Signed-off-by: Jason Ekstrand <jason.ekstr...@intel.com> --- src/mesa/drivers/dri/i965/brw_fs.cpp | 18 +-- src/mesa/drivers/dri/i965/brw_fs_cse.cpp | 12 +- src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp | 4 +- src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 137 ++++++++++------------ 4 files changed, 78 insertions(+), 93 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index af8c087..ea91705 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -310,8 +310,8 @@ fs_visitor::VARYING_PULL_CONSTANT_LOAD(const fs_reg &dst, inst->mlen = 1 + dispatch_width / 8; } - vec4_result.reg_offset += (const_offset & 3) * scale; - instructions.push_tail(MOV(dst, vec4_result)); + fs_reg result = offset(vec4_result, (const_offset & 3) * scale); + instructions.push_tail(MOV(dst, result)); return instructions; } @@ -1019,7 +1019,7 @@ fs_visitor::emit_fragcoord_interpolation(ir_variable *ir) } else { emit(ADD(wpos, this->pixel_x, fs_reg(0.5f))); } - wpos.reg_offset++; + wpos = offset(wpos, 1); /* gl_FragCoord.y */ if (!flip && ir->data.pixel_center_integer) { @@ -1035,7 +1035,7 @@ fs_visitor::emit_fragcoord_interpolation(ir_variable *ir) emit(ADD(wpos, pixel_y, fs_reg(offset))); } - wpos.reg_offset++; + wpos = offset(wpos, 1); /* gl_FragCoord.z */ if (brw->gen >= 6) { @@ -1046,7 +1046,7 @@ fs_visitor::emit_fragcoord_interpolation(ir_variable *ir) this->delta_y[BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC], interp_reg(VARYING_SLOT_POS, 2)); } - wpos.reg_offset++; + wpos = offset(wpos, 1); /* gl_FragCoord.w: Already set up in emit_interpolation */ emit(BRW_OPCODE_MOV, wpos, this->wpos_w); @@ -1120,7 +1120,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir) /* If there's no incoming setup data for this slot, don't * emit interpolation for it. */ - attr.reg_offset += type->vector_elements; + attr = offset(attr, type->vector_elements); location++; continue; } @@ -1135,7 +1135,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir) interp = suboffset(interp, 3); interp.type = reg->type; emit(FS_OPCODE_CINTERP, attr, fs_reg(interp)); - attr.reg_offset++; + attr = offset(attr, 1); } } else { /* Smooth/noperspective interpolation case. */ @@ -1173,7 +1173,7 @@ fs_visitor::emit_general_interpolation(ir_variable *ir) if (brw->gen < 6 && interpolation_mode == INTERP_QUALIFIER_SMOOTH) { emit(BRW_OPCODE_MUL, attr, attr, this->pixel_w); } - attr.reg_offset++; + attr = offset(attr, 1); } } @@ -1284,7 +1284,7 @@ fs_visitor::emit_samplepos_setup() } /* Compute gl_SamplePosition.x */ compute_sample_position(pos, int_sample_x); - pos.reg_offset++; + pos = offset(pos, 1); inst = emit(MOV(int_sample_y, fs_reg(suboffset(sample_pos_reg, 1)))); if (dispatch_width == 16) { inst->force_uncompressed = true; diff --git a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp index 9db6865..a09b0f4 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp @@ -212,10 +212,8 @@ fs_visitor::opt_cse_local(bblock_t *block) fs_inst *copy; if (written > 1) { fs_reg *sources = ralloc_array(mem_ctx, fs_reg, written); - for (int i = 0; i < written; i++) { - sources[i] = tmp; - sources[i].reg_offset = i; - } + for (int i = 0; i < written; i++) + sources[i] = offset(tmp, i); copy = LOAD_PAYLOAD(orig_dst, sources, written); } else { copy = MOV(orig_dst, tmp); @@ -235,10 +233,8 @@ fs_visitor::opt_cse_local(bblock_t *block) fs_inst *copy; if (written > 1) { fs_reg *sources = ralloc_array(mem_ctx, fs_reg, written); - for (int i = 0; i < written; i++) { - sources[i] = tmp; - sources[i].reg_offset = i; - } + for (int i = 0; i < written; i++) + sources[i] = offset(tmp, i); copy = LOAD_PAYLOAD(dst, sources, written); } else { copy = MOV(dst, tmp); diff --git a/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp b/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp index 237cc49..567f8e2 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp @@ -557,7 +557,7 @@ fs_visitor::emit_unspill(bblock_t *block, fs_inst *inst, fs_reg dst, } inst->insert_before(block, unspill_inst); - dst.reg_offset++; + dst = offset(dst, 1); spill_offset += dispatch_width * sizeof(float); } } @@ -717,7 +717,7 @@ fs_visitor::spill_reg(int spill_reg) fs_inst *spill_inst = new(mem_ctx) fs_inst(SHADER_OPCODE_GEN4_SCRATCH_WRITE, reg_null_f, spill_src); - spill_src.reg_offset++; + spill_src = offset(spill_src, 1); spill_inst->offset = subset_spill_offset + chan * reg_size; spill_inst->ir = inst->ir; spill_inst->annotation = inst->annotation; diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index 2d5318a..92a50a5 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -97,8 +97,7 @@ fs_visitor::visit(ir_variable *ir) /* General color output. */ for (unsigned int i = 0; i < MAX2(1, ir->type->length); i++) { int output = ir->data.location - FRAG_RESULT_DATA0 + i; - this->outputs[output] = *reg; - this->outputs[output].reg_offset += vector_elements * i; + this->outputs[output] = offset(*reg, vector_elements * i); this->output_components[output] = vector_elements; } } @@ -171,13 +170,13 @@ fs_visitor::visit(ir_dereference_record *ir) ir->record->accept(this); - unsigned int offset = 0; + unsigned int off = 0; for (unsigned int i = 0; i < struct_type->length; i++) { if (strcmp(struct_type->fields.structure[i].name, ir->field) == 0) break; - offset += type_size(struct_type->fields.structure[i].type); + off += type_size(struct_type->fields.structure[i].type); } - this->result.reg_offset += offset; + this->result = offset(this->result, off); this->result.type = brw_type_for_base_type(ir->type); } @@ -196,7 +195,7 @@ fs_visitor::visit(ir_dereference_array *ir) if (constant_index) { assert(src.file == UNIFORM || src.file == GRF || src.file == HW_REG); - src.reg_offset += constant_index->value.i[0] * element_size; + src = offset(src, constant_index->value.i[0] * element_size); } else { /* Variable index array dereference. We attach the variable index * component to the reg as a pointer to a register containing the @@ -372,8 +371,7 @@ fs_visitor::emit_interpolate_expression(ir_expression *ir) /* 1. collect interpolation factors */ fs_reg dst_x = fs_reg(this, glsl_type::get_instance(ir->type->base_type, 2, 1)); - fs_reg dst_y = dst_x; - dst_y.reg_offset++; + fs_reg dst_y = offset(dst_x, 1); /* for most messages, we need one reg of ignored data; the hardware requires mlen==1 * even when there is no payload. in the per-slot offset case, we'll replace this with @@ -430,8 +428,8 @@ fs_visitor::emit_interpolate_expression(ir_expression *ir) fs_inst *inst = emit(BRW_OPCODE_SEL, src2, src2, fs_reg(7)); inst->conditional_mod = BRW_CONDITIONAL_L; /* min(src2, 7) */ - src2.reg_offset++; - this->result.reg_offset++; + src2 = offset(src2, 1); + this->result = offset(this->result, 1); } mlen = 2 * reg_width; @@ -460,7 +458,7 @@ fs_visitor::emit_interpolate_expression(ir_expression *ir) emit(FS_OPCODE_LINTERP, res, dst_x, dst_y, fs_reg(interp_reg(var->data.location, ch))); - res.reg_offset++; + res = offset(res, 1); } } @@ -960,7 +958,7 @@ fs_visitor::visit(ir_expression *ir) emit(MOV(result, packed_consts)); } - result.reg_offset++; + result = offset(result, 1); } } else { /* Turn the byte offset into a dword offset. */ @@ -974,7 +972,7 @@ fs_visitor::visit(ir_expression *ir) if (ir->type->base_type == GLSL_TYPE_BOOL) emit(CMP(result, result, fs_reg(0), BRW_CONDITIONAL_NZ)); - result.reg_offset++; + result = offset(result, 1); } } @@ -1025,8 +1023,8 @@ fs_visitor::emit_assignment_writes(fs_reg &l, fs_reg &r, inst->predicate = predicated ? BRW_PREDICATE_NORMAL : BRW_PREDICATE_NONE; } - l.reg_offset++; - r.reg_offset++; + l = offset(l, 1); + r = offset(r, 1); } break; case GLSL_TYPE_ARRAY: @@ -1127,9 +1125,9 @@ fs_visitor::visit(ir_assignment *ir) inst = emit(MOV(l, r)); if (ir->condition) inst->predicate = BRW_PREDICATE_NORMAL; - r.reg_offset++; + r = offset(r, 1); } - l.reg_offset++; + l = offset(l, 1); } } else { emit_assignment_writes(l, r, ir->lhs->type, ir->condition != NULL); @@ -1152,7 +1150,7 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate, if (shadow_c.file != BAD_FILE) { for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { emit(MOV(fs_reg(MRF, base_mrf + mlen + i), coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); } /* gen4's SIMD8 sampler always has the slots for u,v,r present. @@ -1181,7 +1179,7 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate, } else if (ir->op == ir_tex) { for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { emit(MOV(fs_reg(MRF, base_mrf + mlen + i), coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); } /* zero the others. */ for (int i = ir->coordinate->type->vector_elements; i<3; i++) { @@ -1194,7 +1192,7 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate, for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { emit(MOV(fs_reg(MRF, base_mrf + mlen + i), coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); } /* the slots for u and v are always present, but r is optional */ mlen += MAX2(ir->coordinate->type->vector_elements, 2); @@ -1215,13 +1213,13 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate, */ for (int i = 0; i < ir->lod_info.grad.dPdx->type->vector_elements; i++) { emit(MOV(fs_reg(MRF, base_mrf + mlen), dPdx)); - dPdx.reg_offset++; + dPdx = offset(dPdx, 1); } mlen += MAX2(ir->lod_info.grad.dPdx->type->vector_elements, 2); for (int i = 0; i < ir->lod_info.grad.dPdy->type->vector_elements; i++) { emit(MOV(fs_reg(MRF, base_mrf + mlen), dPdy)); - dPdy.reg_offset++; + dPdy = offset(dPdy, 1); } mlen += MAX2(ir->lod_info.grad.dPdy->type->vector_elements, 2); } else if (ir->op == ir_txs) { @@ -1239,7 +1237,7 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate, for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { emit(MOV(fs_reg(MRF, base_mrf + mlen + i * 2, coordinate.type), coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); } /* Initialize the rest of u/v/r with 0.0. Empirically, this seems to @@ -1293,8 +1291,8 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate, if (simd16) { for (int i = 0; i < 4; i++) { emit(MOV(orig_dst, dst)); - orig_dst.reg_offset++; - dst.reg_offset += 2; + orig_dst = offset(orig_dst, 1); + dst = offset(dst, 2); } } @@ -1333,7 +1331,7 @@ fs_visitor::emit_texture_gen5(ir_texture *ir, fs_reg dst, fs_reg coordinate, for (int i = 0; i < vector_elements; i++) { emit(MOV(fs_reg(MRF, base_mrf + mlen + i * reg_width, coordinate.type), coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); } mlen += vector_elements * reg_width; @@ -1377,11 +1375,11 @@ fs_visitor::emit_texture_gen5(ir_texture *ir, fs_reg dst, fs_reg coordinate, */ for (int i = 0; i < ir->lod_info.grad.dPdx->type->vector_elements; i++) { emit(MOV(fs_reg(MRF, base_mrf + mlen), lod)); - lod.reg_offset++; + lod = offset(lod, 1); mlen += reg_width; emit(MOV(fs_reg(MRF, base_mrf + mlen), lod2)); - lod2.reg_offset++; + lod2 = offset(lod2, 1); mlen += reg_width; } @@ -1510,7 +1508,7 @@ fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate, */ for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { emit(MOV(sources[length], coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); length++; /* For cube map array, the coordinate is (u,v,r,ai) but there are @@ -1518,11 +1516,11 @@ fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate, */ if (i < ir->lod_info.grad.dPdx->type->vector_elements) { emit(MOV(sources[length], lod)); - lod.reg_offset++; + lod = offset(lod, 1); length++; emit(MOV(sources[length], lod2)); - lod2.reg_offset++; + lod2 = offset(lod2, 1); length++; } } @@ -1541,7 +1539,7 @@ fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate, case ir_txf: /* Unfortunately, the parameters for LD are intermixed: u, lod, v, r. */ emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); length++; emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), lod)); @@ -1549,7 +1547,7 @@ fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate, for (int i = 1; i < ir->coordinate->type->vector_elements; i++) { emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); length++; } @@ -1568,7 +1566,7 @@ fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate, */ for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); length++; } @@ -1585,19 +1583,19 @@ fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate, for (int i = 0; i < 2; i++) { /* u, v */ emit(MOV(sources[length], coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); length++; } for (int i = 0; i < 2; i++) { /* offu, offv */ emit(MOV(retype(sources[length], BRW_REGISTER_TYPE_D), offset_value)); - offset_value.reg_offset++; + offset_value = offset(offset_value, 1); length++; } if (ir->coordinate->type->vector_elements == 3) { /* r if present */ emit(MOV(sources[length], coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); length++; } @@ -1610,7 +1608,7 @@ fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate, if (ir->coordinate && !coordinate_done) { for (int i = 0; i < ir->coordinate->type->vector_elements; i++) { emit(MOV(sources[length], coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); length++; } } @@ -1721,8 +1719,8 @@ fs_visitor::rescale_texcoord(ir_texture *ir, fs_reg coordinate, coordinate = dst; emit(MUL(dst, src, scale_x)); - dst.reg_offset++; - src.reg_offset++; + dst = offset(dst, 1); + src = offset(src, 1); emit(MUL(dst, src, scale_y)); } else if (is_rect) { /* On gen6+, the sampler handles the rectangle coordinates @@ -1735,7 +1733,7 @@ fs_visitor::rescale_texcoord(ir_texture *ir, fs_reg coordinate, for (int i = 0; i < 2; i++) { if (key->tex.gl_clamp_mask[i] & (1 << sampler)) { fs_reg chan = coordinate; - chan.reg_offset += i; + chan = offset(chan, i); inst = emit(BRW_OPCODE_SEL, chan, chan, fs_reg(0.0f)); inst->conditional_mod = BRW_CONDITIONAL_G; @@ -1761,7 +1759,7 @@ fs_visitor::rescale_texcoord(ir_texture *ir, fs_reg coordinate, i < MIN2(ir->coordinate->type->vector_elements, 3); i++) { if (key->tex.gl_clamp_mask[i] & (1 << sampler)) { fs_reg chan = coordinate; - chan.reg_offset += i; + chan = offset(chan, i); fs_inst *inst = emit(MOV(chan, chan)); inst->saturate = true; @@ -1786,7 +1784,7 @@ fs_visitor::emit_mcs_fetch(ir_texture *ir, fs_reg coordinate, fs_reg sampler) for (int i = 0; i < length; i++) { sources[i] = fs_reg(this, glsl_type::float_type); emit(MOV(retype(sources[i], BRW_REGISTER_TYPE_D), coordinate)); - coordinate.reg_offset++; + coordinate = offset(coordinate, 1); } emit(LOAD_PAYLOAD(payload, sources, length)); @@ -1864,7 +1862,7 @@ fs_visitor::visit(ir_texture *ir) for (int i=0; i<4; i++) { emit(MOV(res, fs_reg(swiz == SWIZZLE_ZERO ? 0.0f : 1.0f))); - res.reg_offset++; + res = offset(res, 1); } return; } @@ -1963,19 +1961,16 @@ fs_visitor::visit(ir_texture *ir) glsl_type const *type = ir->sampler->type; if (type->sampler_dimensionality == GLSL_SAMPLER_DIM_CUBE && type->sampler_array) { - fs_reg depth = dst; - depth.reg_offset = 2; + fs_reg depth = offset(dst, 2); fs_reg fixed_depth = fs_reg(this, glsl_type::int_type); emit_math(SHADER_OPCODE_INT_QUOTIENT, fixed_depth, depth, fs_reg(6)); fs_reg *fixed_payload = ralloc_array(mem_ctx, fs_reg, inst->regs_written); - fs_reg d = dst; for (int i = 0; i < inst->regs_written; i++) { if (i == 2) { fixed_payload[i] = fixed_depth; } else { - d.reg_offset = i; - fixed_payload[i] = d; + fixed_payload[i] = offset(dst, i); } } emit(LOAD_PAYLOAD(dst, fixed_payload, inst->regs_written)); @@ -2015,7 +2010,7 @@ fs_visitor::emit_gen6_gather_wa(uint8_t wa, fs_reg dst) emit(ASR(dst, dst, fs_reg(32 - width))); } - dst.reg_offset++; + dst = offset(dst, 1); } } @@ -2052,8 +2047,7 @@ fs_visitor::swizzle_result(ir_texture *ir, fs_reg orig_val, uint32_t sampler) { if (ir->op == ir_query_levels) { /* # levels is in .w */ - orig_val.reg_offset += 3; - this->result = orig_val; + this->result = offset(orig_val, 3); return; } @@ -2074,16 +2068,15 @@ fs_visitor::swizzle_result(ir_texture *ir, fs_reg orig_val, uint32_t sampler) for (int i = 0; i < 4; i++) { int swiz = GET_SWZ(key->tex.swizzles[sampler], i); fs_reg l = swizzled_result; - l.reg_offset += i; + l = offset(l, i); if (swiz == SWIZZLE_ZERO) { emit(MOV(l, fs_reg(0.0f))); } else if (swiz == SWIZZLE_ONE) { emit(MOV(l, fs_reg(1.0f))); } else { - fs_reg r = orig_val; - r.reg_offset += GET_SWZ(key->tex.swizzles[sampler], i); - emit(MOV(l, r)); + emit(MOV(l, offset(orig_val, + GET_SWZ(key->tex.swizzles[sampler], i)))); } } this->result = swizzled_result; @@ -2097,7 +2090,7 @@ fs_visitor::visit(ir_swizzle *ir) fs_reg val = this->result; if (ir->type->vector_elements == 1) { - this->result.reg_offset += ir->mask.x; + this->result = offset(this->result, ir->mask.x); return; } @@ -2123,9 +2116,8 @@ fs_visitor::visit(ir_swizzle *ir) break; } - channel.reg_offset += swiz; - emit(MOV(result, channel)); - result.reg_offset++; + emit(MOV(result, offset(channel, swiz))); + result = offset(result, 1); } } @@ -2183,8 +2175,8 @@ fs_visitor::visit(ir_constant *ir) dst_reg.type = src_reg.type; for (unsigned j = 0; j < size; j++) { emit(MOV(dst_reg, src_reg)); - src_reg.reg_offset++; - dst_reg.reg_offset++; + src_reg = offset(src_reg, 1); + dst_reg = offset(dst_reg, 1); } } } else if (ir->type->is_record()) { @@ -2197,8 +2189,8 @@ fs_visitor::visit(ir_constant *ir) dst_reg.type = src_reg.type; for (unsigned j = 0; j < size; j++) { emit(MOV(dst_reg, src_reg)); - src_reg.reg_offset++; - dst_reg.reg_offset++; + src_reg = offset(src_reg, 1); + dst_reg = offset(dst_reg, 1); } } } else { @@ -2223,7 +2215,7 @@ fs_visitor::visit(ir_constant *ir) default: unreachable("Non-float/uint/int/bool constant"); } - dst_reg.reg_offset++; + dst_reg = offset(dst_reg, 1); } } @@ -2857,8 +2849,7 @@ fs_visitor::emit_interpolation_setup_gen4() this->delta_x[BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC] = fs_reg(this, glsl_type::vec2_type); this->delta_y[BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC] = - this->delta_x[BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC]; - this->delta_y[BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC].reg_offset++; + offset(this->delta_x[BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC], 1); } else { this->delta_x[BRW_WM_PERSPECTIVE_PIXEL_BARYCENTRIC] = fs_reg(this, glsl_type::float_type); @@ -2939,7 +2930,7 @@ fs_visitor::emit_color_write(int target, int index, int first_color_mrf) if (color.file == BAD_FILE) return; - color.reg_offset += index; + color = offset(color, index); if (dispatch_width == 8 || brw->gen >= 6) { /* SIMD8 write looks like: @@ -3040,8 +3031,7 @@ fs_visitor::emit_alpha_test() BRW_CONDITIONAL_NEQ)); } else { /* RT0 alpha */ - fs_reg color = outputs[0]; - color.reg_offset += 3; + fs_reg color = offset(outputs[0], 3); /* f0.1 &= func(color, ref) */ cmp = emit(CMP(reg_null_f, color, fs_reg(key->alpha_test_ref), @@ -3153,7 +3143,7 @@ fs_visitor::emit_fb_writes() "FB write src0"); for (int i = 0; i < 4; i++) { fs_inst *inst = emit(MOV(fs_reg(MRF, color_mrf + i, src0.type), src0)); - src0.reg_offset++; + src0 = offset(src0, 1); inst->saturate = key->clamp_fragment_color; } @@ -3162,7 +3152,7 @@ fs_visitor::emit_fb_writes() for (int i = 0; i < 4; i++) { fs_inst *inst = emit(MOV(fs_reg(MRF, color_mrf + 4 + i, src1.type), src1)); - src1.reg_offset++; + src1 = offset(src1, 1); inst->saturate = key->clamp_fragment_color; } @@ -3195,8 +3185,7 @@ fs_visitor::emit_fb_writes() int write_color_mrf = color_mrf; if (src0_alpha_to_render_target && target != 0) { fs_inst *inst; - fs_reg color = outputs[0]; - color.reg_offset += 3; + fs_reg color = offset(outputs[0], 3); inst = emit(MOV(fs_reg(MRF, write_color_mrf, color.type), color)); -- 2.1.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev