From: Eric Anholt Date: Tue, 26 Feb 2013 18:50:05 +0000 (-0800) Subject: intel: Add a flag for miptree mapping to disable transcoding. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6d6bd2ac7ccf4e78f857cc114c04a840ba6785dd;p=mesa.git intel: Add a flag for miptree mapping to disable transcoding. I want to reuse intel_miptree_map() to replace some region mapping that's broken for separate stencil, but doing so would result in new demands on ETC transcode that we actually don't want to happen. Reviewed-by: Chad Versace --- diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c index e15050112ed..b36a1eb85ce 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c @@ -1571,9 +1571,10 @@ intel_miptree_map_singlesample(struct intel_context *intel, if (mt->format == MESA_FORMAT_S8) { intel_miptree_map_s8(intel, mt, map, level, slice); - } else if (mt->etc_format != MESA_FORMAT_NONE) { + } else if (mt->etc_format != MESA_FORMAT_NONE && + !(mode & BRW_MAP_DIRECT_BIT)) { intel_miptree_map_etc(intel, mt, map, level, slice); - } else if (mt->stencil_mt) { + } else if (mt->stencil_mt && !(mode & BRW_MAP_DIRECT_BIT)) { intel_miptree_map_depthstencil(intel, mt, map, level, slice); } /* According to the Ivy Bridge PRM, Vol1 Part4, section 1.2.1.2 (Graphics @@ -1629,9 +1630,10 @@ intel_miptree_unmap_singlesample(struct intel_context *intel, if (mt->format == MESA_FORMAT_S8) { intel_miptree_unmap_s8(intel, mt, map, level, slice); - } else if (mt->etc_format != MESA_FORMAT_NONE) { + } else if (mt->etc_format != MESA_FORMAT_NONE && + !(map->mode & BRW_MAP_DIRECT_BIT)) { intel_miptree_unmap_etc(intel, mt, map, level, slice); - } else if (mt->stencil_mt) { + } else if (mt->stencil_mt && !(map->mode & BRW_MAP_DIRECT_BIT)) { intel_miptree_unmap_depthstencil(intel, mt, map, level, slice); } else if (map->bo) { intel_miptree_unmap_blit(intel, mt, map, level, slice); diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h index 2070be7680a..96be87a3598 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h @@ -66,6 +66,17 @@ extern "C" { struct intel_resolve_map; struct intel_texture_image; +/** + * When calling intel_miptree_map() on an ETC-transcoded-to-RGB miptree or a + * depthstencil-split-to-separate-stencil miptree, we'll normally make a + * tmeporary and recreate the kind of data requested by Mesa core, since we're + * satisfying some glGetTexImage() request or something. + * + * However, occasionally you want to actually map the miptree's current data + * without transcoding back. This flag to intel_miptree_map() gets you that. + */ +#define BRW_MAP_DIRECT_BIT 0x80000000 + struct intel_miptree_map { /** Bitfield of GL_MAP_READ_BIT, GL_MAP_WRITE_BIT, GL_MAP_INVALIDATE_BIT */ GLbitfield mode;