i965/fs: Remove fs_reg::sechalf.
The same effect can be achieved using ::subreg_offset. Remove the less flexible alternative and define a convenience function to keep the fs_reg interface sane. Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
@@ -1219,22 +1219,18 @@ fs_visitor::emit_samplepos_setup(ir_variable *ir)
|
||||
|
||||
emit(MOV(int_sample_x, fs_reg(sample_pos_reg)));
|
||||
if (dispatch_width == 16) {
|
||||
int_sample_x.sechalf = true;
|
||||
fs_inst *inst = emit(MOV(int_sample_x,
|
||||
fs_inst *inst = emit(MOV(half(int_sample_x, 1),
|
||||
fs_reg(suboffset(sample_pos_reg, 16))));
|
||||
inst->force_sechalf = true;
|
||||
int_sample_x.sechalf = false;
|
||||
}
|
||||
/* Compute gl_SamplePosition.x */
|
||||
compute_sample_position(pos, int_sample_x);
|
||||
pos.reg_offset++;
|
||||
emit(MOV(int_sample_y, fs_reg(suboffset(sample_pos_reg, 1))));
|
||||
if (dispatch_width == 16) {
|
||||
int_sample_y.sechalf = true;
|
||||
fs_inst *inst = emit(MOV(int_sample_y,
|
||||
fs_inst *inst = emit(MOV(half(int_sample_y, 1),
|
||||
fs_reg(suboffset(sample_pos_reg, 17))));
|
||||
inst->force_sechalf = true;
|
||||
int_sample_y.sechalf = false;
|
||||
}
|
||||
/* Compute gl_SamplePosition.y */
|
||||
compute_sample_position(pos, int_sample_y);
|
||||
|
||||
@@ -105,7 +105,6 @@ public:
|
||||
int type;
|
||||
bool negate;
|
||||
bool abs;
|
||||
bool sechalf;
|
||||
struct brw_reg fixed_hw_reg;
|
||||
|
||||
/** Smear a channel of the reg to all channels. */
|
||||
@@ -138,6 +137,19 @@ byte_offset(fs_reg reg, unsigned delta)
|
||||
return reg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get either of the 8-component halves of a 16-component register.
|
||||
*
|
||||
* Note: this also works if \c reg represents a SIMD16 pair of registers.
|
||||
*/
|
||||
static inline fs_reg
|
||||
half(const fs_reg ®, unsigned idx)
|
||||
{
|
||||
assert(idx < 2);
|
||||
assert(idx == 0 || (reg.file != HW_REG && reg.file != IMM));
|
||||
return byte_offset(reg, 8 * idx * reg.stride * type_sz(reg.type));
|
||||
}
|
||||
|
||||
static const fs_reg reg_undef;
|
||||
static const fs_reg reg_null_f(retype(brw_null_reg(), BRW_REGISTER_TYPE_F));
|
||||
static const fs_reg reg_null_d(retype(brw_null_reg(), BRW_REGISTER_TYPE_D));
|
||||
|
||||
@@ -1038,8 +1038,6 @@ brw_reg_from_fs_reg(fs_reg *reg)
|
||||
}
|
||||
|
||||
brw_reg = retype(brw_reg, reg->type);
|
||||
if (reg->sechalf)
|
||||
brw_reg = sechalf(brw_reg);
|
||||
brw_reg = byte_offset(brw_reg, reg->subreg_offset);
|
||||
break;
|
||||
case IMM:
|
||||
|
||||
@@ -2654,12 +2654,10 @@ fs_visitor::emit_color_write(int target, int index, int first_color_mrf)
|
||||
inst->saturate = c->key.clamp_fragment_color;
|
||||
pop_force_uncompressed();
|
||||
|
||||
color.sechalf = true;
|
||||
inst = emit(MOV(fs_reg(MRF, first_color_mrf + index + 4, color.type),
|
||||
color));
|
||||
half(color, 1)));
|
||||
inst->force_sechalf = true;
|
||||
inst->saturate = c->key.clamp_fragment_color;
|
||||
color.sechalf = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user