i965: Program 2x MSAA sample positions.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 10 Feb 2014 00:41:30 +0000 (16:41 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 10 Feb 2014 16:18:29 +0000 (08:18 -0800)
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@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
src/mesa/drivers/dri/i965/brw_multisample_state.h
src/mesa/drivers/dri/i965/gen6_multisample_state.c
src/mesa/drivers/dri/i965/gen8_multisample_state.c

index 2e0250004da5f25a629cc26bcad9d8d23bc8cc47..26633e729837a93edc5c4110dbed5354fab5af44 100644 (file)
 
 #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
index cdc9ef8f075f0a9391f6964504921a017fe42af8..5d65453a675184051108a18de3e4ffc24a61e686 100644 (file)
@@ -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;
index e137efe0d30a4a1484b877d8262362978529cedb..64c720807d24328cfbc7ad4443eaa1a07c77a2e2 100644 (file)
@@ -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();
 }