info->src.box.x == 0 &&
info->src.box.y == 0 &&
info->src.box.width == dst_width &&
- info->src.box.height == dst_height;
+ info->src.box.height == dst_height &&
+ (r300_resource(info->dst.resource)->tex.microtile != RADEON_LAYOUT_LINEAR ||
+ r300_resource(info->dst.resource)->tex.macrotile[info->dst.level] != RADEON_LAYOUT_LINEAR);
}
static void r300_simple_msaa_resolve(struct pipe_context *pipe,
templ.depth0 = 1;
templ.array_size = 1;
templ.usage = PIPE_USAGE_STATIC;
+ templ.flags = R300_RESOURCE_FORCE_MICROTILING;
tmp = screen->resource_create(screen, &templ);
#define R300_MAX_TEXTURE_LEVELS 13
#define R300_MAX_DRAW_VBO_SIZE (1024 * 1024)
-#define R300_RESOURCE_FLAG_TRANSFER PIPE_RESOURCE_FLAG_DRV_PRIV
+#define R300_RESOURCE_FLAG_TRANSFER (PIPE_RESOURCE_FLAG_DRV_PRIV << 0)
+#define R300_RESOURCE_FORCE_MICROTILING (PIPE_RESOURCE_FLAG_DRV_PRIV << 1)
#define R300_INVALID_FORMAT 0xffff
boolean rv350_mode = screen->caps.family >= CHIP_R350;
boolean is_zb = util_format_is_depth_or_stencil(format);
boolean dbg_no_tiling = SCREEN_DBG_ON(screen, DBG_NO_TILING);
+ boolean force_microtiling =
+ (tex->b.b.flags & R300_RESOURCE_FORCE_MICROTILING) != 0;
if (tex->b.b.nr_samples > 1) {
tex->tex.microtile = RADEON_LAYOUT_TILED;
}
/* If height == 1, disable microtiling except for zbuffer. */
- if (!is_zb && (tex->b.b.height0 == 1 || dbg_no_tiling)) {
+ if (!force_microtiling && !is_zb &&
+ (tex->b.b.height0 == 1 || dbg_no_tiling)) {
return;
}