i965: Move device quirks to brw_device_info.
authorKenneth Graunke <kenneth@whitecape.org>
Thu, 26 Sep 2013 18:36:42 +0000 (11:36 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Sun, 13 Oct 2013 07:10:43 +0000 (00:10 -0700)
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/mesa/drivers/dri/i965/brw_context.c
src/mesa/drivers/dri/i965/brw_device_info.c
src/mesa/drivers/dri/i965/brw_device_info.h

index 41df547ce828d6ab82cec04686353ea9387d647e..f60da501878b8bfe1ab031cc364803cf39a70843 100644 (file)
@@ -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;
 
index 7dad8ba85e70764d1e4f92b5d15f8dc8f4c7533c..a215917d4b3dd3997b99d1baf7ddc8634246f4b4 100644 (file)
@@ -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,
index 0f4c282e336394c00d70f5dd3e6c0bf13a4bb7b0..39f4d5733e360562380cceeda8971b0ed103999b 100644 (file)
@@ -40,6 +40,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:
     *  @{