diff options
author | Francisco Jerez <[email protected]> | 2017-01-13 15:18:07 -0800 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2018-06-28 13:19:38 -0700 |
commit | d996e5b81225e84944b09f1d48b4b16e1ec4ed0c (patch) | |
tree | 150af6e470ed9be5ad01129f088f3cb7644821bc | |
parent | 38aee1a06d595ab4066240a5c04500dacaa01f6b (diff) |
intel/fs: Use fs_regs instead of brw_regs in the unlit centroid workaround
While we're here, we change to using horiz_offset() instead of abusing
half().
v2 (Jason Ekstrand):
- Use horiz_offset() instead of half()
Reviewed-by: Matt Turner <[email protected]>
-rw-r--r-- | src/intel/compiler/brw_fs_visitor.cpp | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/src/intel/compiler/brw_fs_visitor.cpp b/src/intel/compiler/brw_fs_visitor.cpp index 746cbb74213..c165fba5b68 100644 --- a/src/intel/compiler/brw_fs_visitor.cpp +++ b/src/intel/compiler/brw_fs_visitor.cpp @@ -268,32 +268,32 @@ fs_visitor::emit_interpolation_setup_gen6() 1 << BRW_BARYCENTRIC_NONPERSPECTIVE_CENTROID); for (int i = 0; i < BRW_BARYCENTRIC_MODE_COUNT; ++i) { - uint8_t reg = payload.barycentric_coord_reg[i]; - this->delta_xy[i] = fs_reg(brw_vec16_grf(reg, 0)); + this->delta_xy[i] = + fs_reg(brw_vec8_grf(payload.barycentric_coord_reg[i], 0)); if (devinfo->needs_unlit_centroid_workaround && (centroid_modes & (1 << i))) { + const fs_reg &pixel_delta_xy = delta_xy[i - 1]; + /* Get the pixel/sample mask into f0 so that we know which * pixels are lit. Then, for each channel that is unlit, * replace the centroid data with non-centroid data. */ bld.emit(FS_OPCODE_MOV_DISPATCH_TO_FLAGS); - uint8_t pixel_reg = payload.barycentric_coord_reg[i - 1]; - set_predicate_inv(BRW_PREDICATE_NORMAL, true, - bld.half(0).MOV(brw_vec8_grf(reg, 0), - brw_vec8_grf(pixel_reg, 0))); + bld.half(0).MOV(horiz_offset(delta_xy[i], 0), + horiz_offset(pixel_delta_xy, 0))); set_predicate_inv(BRW_PREDICATE_NORMAL, true, - bld.half(0).MOV(brw_vec8_grf(reg + 1, 0), - brw_vec8_grf(pixel_reg + 1, 0))); + bld.half(0).MOV(horiz_offset(delta_xy[i], 8), + horiz_offset(pixel_delta_xy, 8))); if (dispatch_width == 16) { set_predicate_inv(BRW_PREDICATE_NORMAL, true, - bld.half(1).MOV(brw_vec8_grf(reg + 2, 0), - brw_vec8_grf(pixel_reg + 2, 0))); + bld.half(1).MOV(horiz_offset(delta_xy[i], 16), + horiz_offset(pixel_delta_xy, 16))); set_predicate_inv(BRW_PREDICATE_NORMAL, true, - bld.half(1).MOV(brw_vec8_grf(reg + 3, 0), - brw_vec8_grf(pixel_reg + 3, 0))); + bld.half(1).MOV(horiz_offset(delta_xy[i], 24), + horiz_offset(pixel_delta_xy, 24))); } assert(dispatch_width != 32); /* not implemented yet */ } |