summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/brw_context.c10
-rw-r--r--src/mesa/drivers/dri/i965/brw_device_info.c9
-rw-r--r--src/mesa/drivers/dri/i965/brw_device_info.h16
3 files changed, 27 insertions, 8 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 41df547ce82..f60da501878 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -366,6 +366,9 @@ brwCreateContext(gl_api api,
brw->has_llc = devinfo->has_llc;
brw->has_hiz = devinfo->has_hiz_and_separate_stencil;
brw->has_separate_stencil = devinfo->has_hiz_and_separate_stencil;
+ brw->has_negative_rhw_bug = devinfo->has_negative_rhw_bug;
+ brw->needs_unlit_centroid_workaround =
+ devinfo->needs_unlit_centroid_workaround;
brw->must_use_separate_stencil = screen->hw_must_use_separate_stencil;
brw->has_swizzling = screen->hw_has_swizzling;
@@ -455,13 +458,6 @@ brwCreateContext(gl_api api,
if (brw->gen == 6)
brw->urb.gen6_gs_previously_active = false;
- if (brw->gen == 4 && !brw->is_g4x)
- brw->has_negative_rhw_bug = true;
-
- if (brw->gen <= 7) {
- brw->needs_unlit_centroid_workaround = true;
- }
-
brw->prim_restart.in_progress = false;
brw->prim_restart.enable_cut_index = false;
diff --git a/src/mesa/drivers/dri/i965/brw_device_info.c b/src/mesa/drivers/dri/i965/brw_device_info.c
index 7dad8ba85e7..a215917d4b3 100644
--- a/src/mesa/drivers/dri/i965/brw_device_info.c
+++ b/src/mesa/drivers/dri/i965/brw_device_info.c
@@ -27,6 +27,8 @@
static const struct brw_device_info brw_device_info_i965 = {
.gen = 4,
+ .has_negative_rhw_bug = true,
+ .needs_unlit_centroid_workaround = true,
.max_vs_threads = 16,
.max_gs_threads = 2,
.max_wm_threads = 8 * 4,
@@ -37,6 +39,7 @@ static const struct brw_device_info brw_device_info_i965 = {
static const struct brw_device_info brw_device_info_g4x = {
.gen = 4,
+ .needs_unlit_centroid_workaround = true,
.is_g4x = true,
.max_vs_threads = 32,
.max_gs_threads = 2,
@@ -48,6 +51,7 @@ static const struct brw_device_info brw_device_info_g4x = {
static const struct brw_device_info brw_device_info_ilk = {
.gen = 5,
+ .needs_unlit_centroid_workaround = true,
.max_vs_threads = 72,
.max_gs_threads = 32,
.max_wm_threads = 12 * 6,
@@ -61,6 +65,7 @@ static const struct brw_device_info brw_device_info_snb_gt1 = {
.gt = 2,
.has_hiz_and_separate_stencil = true,
.has_llc = true,
+ .needs_unlit_centroid_workaround = true,
.max_vs_threads = 24,
.max_gs_threads = 21, /* conservative; 24 if rendering disabled. */
.max_wm_threads = 40,
@@ -77,6 +82,7 @@ static const struct brw_device_info brw_device_info_snb_gt2 = {
.gt = 2,
.has_hiz_and_separate_stencil = true,
.has_llc = true,
+ .needs_unlit_centroid_workaround = true,
.max_vs_threads = 60,
.max_gs_threads = 60,
.max_wm_threads = 80,
@@ -92,7 +98,8 @@ static const struct brw_device_info brw_device_info_snb_gt2 = {
.gen = 7, \
.has_hiz_and_separate_stencil = true, \
.must_use_separate_stencil = true, \
- .has_llc = true
+ .has_llc = true, \
+ .needs_unlit_centroid_workaround = true
static const struct brw_device_info brw_device_info_ivb_gt1 = {
GEN7_FEATURES, .is_ivybridge = true, .gt = 1,
diff --git a/src/mesa/drivers/dri/i965/brw_device_info.h b/src/mesa/drivers/dri/i965/brw_device_info.h
index 0f4c282e336..39f4d5733e3 100644
--- a/src/mesa/drivers/dri/i965/brw_device_info.h
+++ b/src/mesa/drivers/dri/i965/brw_device_info.h
@@ -41,6 +41,22 @@ struct brw_device_info
bool has_llc;
/**
+ * Quirks:
+ * @{
+ */
+ bool has_negative_rhw_bug;
+
+ /**
+ * Some versions of Gen hardware don't do centroid interpolation correctly
+ * on unlit pixels, causing incorrect values for derivatives near triangle
+ * edges. Enabling this flag causes the fragment shader to use
+ * non-centroid interpolation for unlit pixels, at the expense of two extra
+ * fragment shader instructions.
+ */
+ bool needs_unlit_centroid_workaround;
+ /** @} */
+
+ /**
* GPU Limits:
* @{
*/