[Mesa-dev] [PATCH 3/3] i965: Program 2x MSAA sample positions.

Kenneth Graunke kenneth at whitecape.org
Sun Feb 9 16:56:20 PST 2014


There are only two sensible placements for 2x MSAA samples - and one is
the mirror image of the other.  I chose (0.25, 0.25) and (0.75, 0.75).

Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
---
 src/mesa/drivers/dri/i965/brw_multisample_state.h  | 11 +++++++++++
 src/mesa/drivers/dri/i965/gen6_multisample_state.c |  3 +++
 src/mesa/drivers/dri/i965/gen8_multisample_state.c |  6 ++----
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_multisample_state.h b/src/mesa/drivers/dri/i965/brw_multisample_state.h
index 2e02500..26633e7 100644
--- a/src/mesa/drivers/dri/i965/brw_multisample_state.h
+++ b/src/mesa/drivers/dri/i965/brw_multisample_state.h
@@ -24,6 +24,17 @@
 #include <stdint.h>
 
 /**
+ * 1x MSAA has a single sample at the center: (0.5, 0.5) -> (0x8, 0x8).
+ *
+ * 2x MSAA sample positions are (0.25, 0.25) and (0.75, 0.75):
+ *   4 c
+ * 4 0
+ * c   1
+ */
+static const uint32_t
+brw_multisample_positions_1x_2x = 0x0088cc44;
+
+/**
  * Sample positions:
  *   2 6 a e
  * 2   0
diff --git a/src/mesa/drivers/dri/i965/gen6_multisample_state.c b/src/mesa/drivers/dri/i965/gen6_multisample_state.c
index cdc9ef8..5d65453 100644
--- a/src/mesa/drivers/dri/i965/gen6_multisample_state.c
+++ b/src/mesa/drivers/dri/i965/gen6_multisample_state.c
@@ -38,6 +38,9 @@ gen6_get_sample_position(struct gl_context *ctx,
    case 1:
       result[0] = result[1] = 0.5f;
       return;
+   case 2:
+      bits = brw_multisample_positions_1x_2x >> (8 * index);
+      break;
    case 4:
       bits = brw_multisample_positions_4x >> (8 * index);
       break;
diff --git a/src/mesa/drivers/dri/i965/gen8_multisample_state.c b/src/mesa/drivers/dri/i965/gen8_multisample_state.c
index e137efe..64c7208 100644
--- a/src/mesa/drivers/dri/i965/gen8_multisample_state.c
+++ b/src/mesa/drivers/dri/i965/gen8_multisample_state.c
@@ -87,10 +87,8 @@ gen8_emit_3dstate_sample_pattern(struct brw_context *brw)
    /* 4x MSAA */
    OUT_BATCH(brw_multisample_positions_4x);
 
-   /* 2x and 1x MSAA patterns
-    * XXX: need to program 2x.
-    */
-   OUT_BATCH(0x00880000);
+   /* 1x and 2x MSAA */
+   OUT_BATCH(brw_multisample_positions_1x_2x);
    ADVANCE_BATCH();
 }
 
-- 
1.8.5.2



More information about the mesa-dev mailing list