i965/blorp: Add check for supported sample numbers
authorTopi Pohjolainen <topi.pohjolainen@intel.com>
Fri, 1 Apr 2016 09:01:23 +0000 (12:01 +0300)
committerTopi Pohjolainen <topi.pohjolainen@intel.com>
Thu, 21 Apr 2016 07:20:01 +0000 (10:20 +0300)
v2 (Ken): Fix the condition on using meta for stencil blits:
          use_blorp -> !use_blorp

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 00087238ab4b59a39ed5bb3fb107d0144fa067c3..7cf809b4066eb453a69d82fbf2efbaf4c1d92e37 100644 (file)
@@ -251,6 +251,11 @@ 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)
+      return false;
+
    /* BLORP is only supported for Gen6-7. */
    if (brw->gen < 6 || brw->gen > 7)
       return false;
@@ -357,6 +362,11 @@ brw_blorp_framebuffer(struct brw_context *brw,
    if (brw->gen < 6 || brw->gen >= 8)
       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)
+      return mask;
+
    static GLbitfield buffer_bits[] = {
       GL_COLOR_BUFFER_BIT,
       GL_DEPTH_BUFFER_BIT,
index f60e1c368f50a6da5c00f352c152d04bdbb1793a..e2d897a0b37ab5dcf28cb2d62c4a4f8683e0f0bf 100644 (file)
@@ -2164,7 +2164,12 @@ intel_miptree_updownsample(struct brw_context *brw,
                            struct intel_mipmap_tree *src,
                            struct intel_mipmap_tree *dst)
 {
-   if (brw->gen < 8) {
+   /* There is support only for four and eight samples. */
+   const bool use_blorp = brw->gen < 8 &&
+                          src->num_samples != 2 && dst->num_samples != 2 &&
+                          src->num_samples <= 8 && dst->num_samples <= 8;
+
+   if (use_blorp) {
       brw_blorp_blit_miptrees(brw,
                               src, 0 /* level */, 0 /* layer */,
                               src->format, SWIZZLE_XYZW,
@@ -2182,7 +2187,7 @@ intel_miptree_updownsample(struct brw_context *brw,
    }
 
    if (src->stencil_mt) {
-      if (brw->gen >= 8) {
+      if (!use_blorp) {
          brw_meta_stencil_updownsample(brw, src->stencil_mt, dst);
          return;
       }