aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2012-06-18 11:23:01 -0700
committerPaul Berry <[email protected]>2012-06-25 11:03:26 -0700
commit6d7ebb21f8848a4a407e458e2772a45f9c3bd28a (patch)
tree01bceae63607e816b738fd9a1594b50732bc92fd
parentbebb0438113efdcc1c2aaed95c70ba87de1d3053 (diff)
i965/msaa: Adapt clip setup for centroid noperspective interpolation.
To save time, we only instruct the clip stage of the pipeline to compute noperspective barycentric coordinates if those coordinates are needed by the fragment shader. Previously, we would determine whether the coordinates were needed by seeing whether the fragment shader used the BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC interpolation mode. However, with MSAA, it's possible that the fragment shader might use BRW_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC instead. In the future, when we support ARB_sample_shading, it might use BRW_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC. This patch modifies the upload_clip_state() functions to check for all three possible noperspective interpolation modes. Reviewed-by: Eric Anholt <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_defines.h4
-rw-r--r--src/mesa/drivers/dri/i965/gen6_clip_state.c2
-rw-r--r--src/mesa/drivers/dri/i965/gen7_clip_state.c2
3 files changed, 6 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index ff6cc6e27d6..73a8c906692 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -1257,6 +1257,10 @@ enum brw_wm_barycentric_interp_mode {
BRW_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC = 5,
BRW_WM_BARYCENTRIC_INTERP_MODE_COUNT = 6
};
+#define BRW_WM_NONPERSPECTIVE_BARYCENTRIC_BITS \
+ ((1 << BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC) | \
+ (1 << BRW_WM_NONPERSPECTIVE_CENTROID_BARYCENTRIC) | \
+ (1 << BRW_WM_NONPERSPECTIVE_SAMPLE_BARYCENTRIC))
#define _3DSTATE_WM 0x7814 /* GEN6+ */
/* DW1: kernel pointer */
diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c b/src/mesa/drivers/dri/i965/gen6_clip_state.c
index 5d889784b40..c34d87e29f3 100644
--- a/src/mesa/drivers/dri/i965/gen6_clip_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c
@@ -42,7 +42,7 @@ upload_clip_state(struct brw_context *brw)
/* CACHE_NEW_WM_PROG */
if (brw->wm.prog_data->barycentric_interp_modes &
- (1 << BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC)) {
+ BRW_WM_NONPERSPECTIVE_BARYCENTRIC_BITS) {
nonperspective_barycentric_enable_flag =
GEN6_CLIP_NON_PERSPECTIVE_BARYCENTRIC_ENABLE;
}
diff --git a/src/mesa/drivers/dri/i965/gen7_clip_state.c b/src/mesa/drivers/dri/i965/gen7_clip_state.c
index 8ff31a8b42e..3bc6de05393 100644
--- a/src/mesa/drivers/dri/i965/gen7_clip_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_clip_state.c
@@ -43,7 +43,7 @@ upload_clip_state(struct brw_context *brw)
/* CACHE_NEW_WM_PROG */
if (brw->wm.prog_data->barycentric_interp_modes &
- (1 << BRW_WM_NONPERSPECTIVE_PIXEL_BARYCENTRIC)) {
+ BRW_WM_NONPERSPECTIVE_BARYCENTRIC_BITS) {
nonperspective_barycentric_enable_flag =
GEN6_CLIP_NON_PERSPECTIVE_BARYCENTRIC_ENABLE;
}