i965/msaa: Enable 4x MSAA on Gen7.
authorPaul Berry <stereotype441@gmail.com>
Wed, 9 May 2012 22:51:11 +0000 (15:51 -0700)
committerPaul Berry <stereotype441@gmail.com>
Fri, 25 May 2012 15:45:11 +0000 (08:45 -0700)
Basic 4x MSAA support now works on Gen7.  This patch enables it.

As with Gen6, MSAA support is still fairly preliminary.  In
particular, the following are not yet supported:
- 8x oversampling (Gen7 has hardware support for this, but we do not
  yet expose it).
- Fully general blits between MSAA and non-MSAA buffers.
- Formats other than RGBA8, DEPTH24, and STENCIL8.
- Centrold interpolation.
- Coverage parameters (glSampleCoverage, GL_SAMPLE_ALPHA_TO_COVERAGE,
  GL_SAMPLE_ALPHA_TO_ONE, GL_SAMPLE_COVERAGE, GL_SAMPLE_COVERAGE_VALUE,
  GL_SAMPLE_COVERAGE_INVERT).

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/gen6_multisample_state.c
src/mesa/drivers/dri/intel/intel_fbo.c

index e01ead10522c9a0cfae25c4d498e8f0b74227321..3cf94f68bdb2eeda83b16d9cb902d480af78bcc6 100644 (file)
@@ -36,10 +36,8 @@ gen6_emit_3dstate_multisample(struct brw_context *brw,
 {
    struct intel_context *intel = &brw->intel;
 
-   /* TODO: MSAA only implemented on Gen6 */
-   if (intel->gen != 6) {
-      assert(num_samples == 0);
-   }
+   /* TODO: 8x MSAA not implemented */
+   assert(num_samples <= 4);
 
    int len = intel->gen >= 7 ? 4 : 3;
    BEGIN_BATCH(len);
@@ -62,10 +60,8 @@ gen6_emit_3dstate_sample_mask(struct brw_context *brw,
 {
    struct intel_context *intel = &brw->intel;
 
-   /* TODO: MSAA only implemented on Gen6 */
-   if (intel->gen != 6) {
-      assert(num_samples == 0);
-   }
+   /* TODO: 8x MSAA not implemented */
+   assert(num_samples <= 4);
 
    BEGIN_BATCH(2);
    OUT_BATCH(_3DSTATE_SAMPLE_MASK << 16 | (2 - 2));
index bbd5f6652e90c42ef335bd7c657aa50876ee1c92..a801bb74c7ec69430f8a6bd6a70d0ea15ad99250 100644 (file)
@@ -202,7 +202,11 @@ quantize_num_samples(struct intel_context *intel, unsigned num_samples)
       else
          return 0;
    case 7:
-      /* TODO: MSAA only implemented on Gen6 */
+      /* TODO: Gen7 supports only 4x multisampling at the moment. */
+      if (num_samples > 0)
+         return 4;
+      else
+         return 0;
       return 0;
    default:
       /* MSAA unsupported */