diff options
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 8 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.h | 14 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 2 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 4 |
4 files changed, 16 insertions, 12 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index d45d4cf5f0a..4f5558b329c 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -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); diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index 85d06ff214c..c6f4ffb4a19 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ b/src/mesa/drivers/dri/i965/brw_fs.h @@ -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)); diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp index b79fcca01e7..00f19dcac71 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp @@ -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: diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index b67ea302a03..45b053d540e 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -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; } } } |