i965: Prepare up/downsampling for isl based miptrees
authorTopi Pohjolainen <topi.pohjolainen@intel.com>
Mon, 24 Apr 2017 15:10:26 +0000 (18:10 +0300)
committerTopi Pohjolainen <topi.pohjolainen@intel.com>
Mon, 19 Jun 2017 19:41:45 +0000 (22:41 +0300)
Reviewed-by: Nanley Chery <nanley.g.chery@intel.com>
Signed-off-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
src/mesa/drivers/dri/i965/intel_mipmap_tree.c

index 3e22645ab2f07d5491658af9ba04919ae5626e0c..0fdf7117af884371f6fb55c5947aef3b7a194e99 100644 (file)
@@ -2792,27 +2792,57 @@ intel_miptree_updownsample(struct brw_context *brw,
                            struct intel_mipmap_tree *src,
                            struct intel_mipmap_tree *dst)
 {
+   unsigned src_w, src_h, dst_w, dst_h;
+
+   if (src->surf.size > 0) {
+      src_w = src->surf.logical_level0_px.width;
+      src_h = src->surf.logical_level0_px.height;
+   } else {
+      src_w = src->logical_width0;
+      src_h = src->logical_height0;
+   }
+
+   if (dst->surf.size > 0) {
+      dst_w = dst->surf.logical_level0_px.width;
+      dst_h = dst->surf.logical_level0_px.height;
+   } else {
+      dst_w = dst->logical_width0;
+      dst_h = dst->logical_height0;
+   }
+
    brw_blorp_blit_miptrees(brw,
                            src, 0 /* level */, 0 /* layer */,
                            src->format, SWIZZLE_XYZW,
                            dst, 0 /* level */, 0 /* layer */, dst->format,
-                           0, 0,
-                           src->logical_width0, src->logical_height0,
-                           0, 0,
-                           dst->logical_width0, dst->logical_height0,
+                           0, 0, src_w, src_h,
+                           0, 0, dst_w, dst_h,
                            GL_NEAREST, false, false /*mirror x, y*/,
                            false, false);
 
    if (src->stencil_mt) {
+      if (src->stencil_mt->surf.size > 0) {
+         src_w = src->stencil_mt->surf.logical_level0_px.width;
+         src_h = src->stencil_mt->surf.logical_level0_px.height;
+      } else {
+         src_w = src->stencil_mt->logical_width0;
+         src_h = src->stencil_mt->logical_height0;
+      }
+
+      if (dst->stencil_mt->surf.size > 0) {
+         dst_w = dst->stencil_mt->surf.logical_level0_px.width;
+         dst_h = dst->stencil_mt->surf.logical_level0_px.height;
+      } else {
+         dst_w = dst->stencil_mt->logical_width0;
+         dst_h = dst->stencil_mt->logical_height0;
+      }
+
       brw_blorp_blit_miptrees(brw,
                               src->stencil_mt, 0 /* level */, 0 /* layer */,
                               src->stencil_mt->format, SWIZZLE_XYZW,
                               dst->stencil_mt, 0 /* level */, 0 /* layer */,
                               dst->stencil_mt->format,
-                              0, 0,
-                              src->logical_width0, src->logical_height0,
-                              0, 0,
-                              dst->logical_width0, dst->logical_height0,
+                              0, 0, src_w, src_h,
+                              0, 0, dst_w, dst_h,
                               GL_NEAREST, false, false /*mirror x, y*/,
                               false, false /* decode/encode srgb */);
    }