diff options
author | Kenneth Graunke <[email protected]> | 2014-07-10 17:48:39 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2014-07-15 22:10:06 -0700 |
commit | e5adc560cc8544200faa3e04504202839626ab37 (patch) | |
tree | b308b637dd6492d3b2d48987cb811ed95bb546f1 /src/mesa/drivers/dri | |
parent | 2eaf3f670fea4ce4466340141244e41a45542c13 (diff) |
i965/fs: Set force_uncompressed and force_sechalf on samplepos setup.
gen8_fs_generator uses these to decide whether to set the execution size
to 8 or 16, so we incorrectly made both of these MOVs the full width in
SIMD16 shaders. (It happened to work out on Gen4-7.)
Setting them should also help inform optimization passes what's really
going on, which could help avoid bugs.
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Reviewed-by: Chris Forbes <[email protected]>
Cc: [email protected]
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 56a0183a739..53bd91b3180 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -1256,19 +1256,21 @@ fs_visitor::emit_samplepos_setup(ir_variable *ir) stride(retype(brw_vec1_grf(payload.sample_pos_reg, 0), BRW_REGISTER_TYPE_B), 16, 8, 2); - emit(MOV(int_sample_x, fs_reg(sample_pos_reg))); + fs_inst *inst = emit(MOV(int_sample_x, fs_reg(sample_pos_reg))); if (dispatch_width == 16) { - fs_inst *inst = emit(MOV(half(int_sample_x, 1), - fs_reg(suboffset(sample_pos_reg, 16)))); + inst->force_uncompressed = true; + inst = emit(MOV(half(int_sample_x, 1), + fs_reg(suboffset(sample_pos_reg, 16)))); inst->force_sechalf = true; } /* 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)))); + inst = emit(MOV(int_sample_y, fs_reg(suboffset(sample_pos_reg, 1)))); if (dispatch_width == 16) { - fs_inst *inst = emit(MOV(half(int_sample_y, 1), - fs_reg(suboffset(sample_pos_reg, 17)))); + inst->force_uncompressed = true; + inst = emit(MOV(half(int_sample_y, 1), + fs_reg(suboffset(sample_pos_reg, 17)))); inst->force_sechalf = true; } /* Compute gl_SamplePosition.y */ |