i965/blorp: Add support for 2x msaa
authorTopi Pohjolainen <topi.pohjolainen@intel.com>
Sat, 16 Apr 2016 17:03:34 +0000 (20:03 +0300)
committerTopi Pohjolainen <topi.pohjolainen@intel.com>
Fri, 22 Apr 2016 14:02:29 +0000 (17:02 +0300)
Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_blorp_blit.cpp
src/mesa/drivers/dri/i965/intel_mipmap_tree.c

index 40b9135e531945832ebae746255fda19aeeb6c61..7556d6a2b27de981681f8891508407d02d18cb92 100644 (file)
@@ -251,9 +251,8 @@ brw_blorp_copytexsubimage(struct brw_context *brw,
    struct intel_mipmap_tree *src_mt = src_irb->mt;
    struct intel_mipmap_tree *dst_mt = intel_image->mt;
 
-   /* There is support only for four and eight samples. */
-   if (src_mt->num_samples == 2 || dst_mt->num_samples == 2 ||
-       src_mt->num_samples > 8 || dst_mt->num_samples > 8)
+   /* There is support for only up to eight samples. */
+   if (src_mt->num_samples > 8 || dst_mt->num_samples > 8)
       return false;
 
    /* BLORP is only supported from Gen6 onwards. */
@@ -362,9 +361,8 @@ brw_blorp_framebuffer(struct brw_context *brw,
    if (brw->gen < 6)
       return mask;
 
-   /* There is support only for four and eight samples. */
-   if (readFb->Visual.samples == 2 || drawFb->Visual.samples == 2 ||
-       readFb->Visual.samples > 8 || drawFb->Visual.samples > 8)
+   /* There is support for only up to eight samples. */
+   if (readFb->Visual.samples > 8 || drawFb->Visual.samples > 8)
       return mask;
 
    static GLbitfield buffer_bits[] = {
@@ -964,6 +962,7 @@ brw_blorp_blit_program::compute_frag_coords()
 
    if (key->persample_msaa_dispatch) {
       switch (key->rt_samples) {
+      case 2:
       case 4: {
          /* The WM will be run in MSDISPMODE_PERSAMPLE with num_samples == 4.
           * Therefore, subspan 0 will represent sample 0, subspan 1 will
@@ -975,7 +974,8 @@ brw_blorp_blit_program::compute_frag_coords()
           * then copy from it using vstride=1, width=4, hstride=0.
           */
          struct brw_reg t1_uw1 = retype(t1, BRW_REGISTER_TYPE_UW);
-         emit_mov(vec16(t1_uw1), brw_imm_v(0x3210));
+         emit_mov(vec16(t1_uw1), key->rt_samples == 4 ?
+                                    brw_imm_v(0x3210) : brw_imm_v(0x1010));
          /* Move to UD sample_index register. */
          emit_mov_8(S, stride(t1_uw1, 1, 4, 0));
          emit_mov_8(offset(S, 1), suboffset(stride(t1_uw1, 1, 4, 0), 2));
index 8099ea717bb5f1c21fbe1c1bd52148d688ae0713..29be037511bb5cb6f7092bfac21d53e6c89e92ff 100644 (file)
@@ -2170,9 +2170,8 @@ intel_miptree_updownsample(struct brw_context *brw,
                            struct intel_mipmap_tree *src,
                            struct intel_mipmap_tree *dst)
 {
-   /* There is support only for four and eight samples. */
-   const bool use_blorp = src->num_samples != 2 && dst->num_samples != 2 &&
-                          src->num_samples <= 8 && dst->num_samples <= 8;
+   /* There is support for only up to eight samples. */
+   const bool use_blorp = src->num_samples <= 8 && dst->num_samples <= 8;
 
    if (use_blorp) {
       brw_blorp_blit_miptrees(brw,