aboutsummaryrefslogtreecommitdiffstats
path: root/src/intel
diff options
context:
space:
mode:
authorFrancisco Jerez <[email protected]>2017-01-13 15:33:45 -0800
committerJason Ekstrand <[email protected]>2018-06-28 13:19:38 -0700
commit40fe108e2b655b22b377ee92b4463a6362ba7b54 (patch)
tree645052df7c63641fb35b63f9d7cfd83ce5b02178 /src/intel
parent1d381731e0db415b71ca898c68d74e0d8758e730 (diff)
intel/fs: Generalize the unlit centroid workaround
This generalizes the unlit centroid workaround so it's less code and now supports SIMD32. Reviewed-by: Jason Ekstrand <[email protected]> Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src/intel')
-rw-r--r--src/intel/compiler/brw_fs_visitor.cpp22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/intel/compiler/brw_fs_visitor.cpp b/src/intel/compiler/brw_fs_visitor.cpp
index a0ebd607e46..ed1348bec00 100644
--- a/src/intel/compiler/brw_fs_visitor.cpp
+++ b/src/intel/compiler/brw_fs_visitor.cpp
@@ -281,21 +281,15 @@ fs_visitor::emit_interpolation_setup_gen6()
*/
bld.emit(FS_OPCODE_MOV_DISPATCH_TO_FLAGS);
- set_predicate_inv(BRW_PREDICATE_NORMAL, true,
- 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(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(horiz_offset(delta_xy[i], 16),
- horiz_offset(pixel_delta_xy, 16)));
- set_predicate_inv(BRW_PREDICATE_NORMAL, true,
- bld.half(1).MOV(horiz_offset(delta_xy[i], 24),
- horiz_offset(pixel_delta_xy, 24)));
+ for (unsigned q = 0; q < dispatch_width / 8; q++) {
+ for (unsigned c = 0; c < 2; c++) {
+ const unsigned idx = c + (q & 2) + (q & 1) * dispatch_width / 8;
+ set_predicate_inv(
+ BRW_PREDICATE_NORMAL, true,
+ bld.half(q).MOV(horiz_offset(delta_xy[i], idx * 8),
+ horiz_offset(pixel_delta_xy, idx * 8)));
+ }
}
- assert(dispatch_width != 32); /* not implemented yet */
}
}
}