r300g: implement MSAA copies by resolving and upsampling
authorMarek Olšák <marek.olsak@amd.com>
Wed, 17 Sep 2014 12:34:06 +0000 (14:34 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 24 Sep 2014 12:48:02 +0000 (14:48 +0200)
There's no other way. It will use hw resolve + blit.

src/gallium/drivers/r300/r300_blit.c

index 2320abb9756063c4a09766563ea23b4937f26999..4e7efc560a49e0c6537fb457267598c72121129f 100644 (file)
@@ -679,7 +679,9 @@ static boolean r300_is_simple_msaa_resolve(const struct pipe_blit_info *info)
     unsigned dst_width = u_minify(info->dst.resource->width0, info->dst.level);
     unsigned dst_height = u_minify(info->dst.resource->height0, info->dst.level);
 
-    return info->dst.resource->format == info->src.resource->format &&
+    return info->src.resource->nr_samples > 1 &&
+           info->dst.resource->nr_samples <= 1 &&
+           info->dst.resource->format == info->src.resource->format &&
            info->dst.resource->format == info->dst.format &&
            info->src.resource->format == info->src.format &&
            !info->scissor_enable &&
@@ -803,7 +805,6 @@ static void r300_blit(struct pipe_context *pipe,
 
     /* MSAA resolve. */
     if (info.src.resource->nr_samples > 1 &&
-        info.dst.resource->nr_samples <= 1 &&
         !util_format_is_depth_or_stencil(info.src.resource->format)) {
         r300_msaa_resolve(pipe, &info);
         return;