diff options
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_context.c | 10 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_device_info.c | 9 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_device_info.h | 16 |
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: * @{ */ |