[Mesa-dev] [PATCH 11/15] intel: Downsample during glReadPixels

Chad Versace chad.versace at linux.intel.com
Thu Jul 26 17:36:33 PDT 2012


On 07/23/2012 03:49 PM, Paul Berry wrote:
> On 21 July 2012 17:36, Chad Versace <chad.versace at linux.intel.com
> <mailto:chad.versace at linux.intel.com>> wrote:
> 
>     Actually, this patch forces an automatic downsample during
>     intel_miptree_map.  And this should occur only due to glReadPixels.
> 
>     CC: Eric Anholt <eric at anholt.net <mailto:eric at anholt.net>>
>     CC: Paul Berry <stereotype441 at gmail.com <mailto:stereotype441 at gmail.com>>
>     Signed-off-by: Chad Versace <chad.versace at linux.intel.com
>     <mailto:chad.versace at linux.intel.com>>
>     ---
>      src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 10 ++++++++++
>      1 file changed, 10 insertions(+)
> 
>     diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
>     b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
>     index c4496ea..26002c2 100644
>     --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
>     +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
>     @@ -1339,6 +1339,15 @@ intel_miptree_map(struct intel_context *intel,
>      {
>         struct intel_miptree_map *map;
> 
>     +   if (mt->num_samples > 0 && (mode & GL_MAP_WRITE_BIT)) {
>     +      /* We choose not support swrast on multisample buffers because
>     +       * it would require an upsample on unmap. As of 2012-07-20, this
>     +       * warning occurs only on glDrawPixels(GL_STENCIL_INDEX).
>     +       */
>     +      _mesa_warning(&intel->ctx, "unsupported fallback to software "
>     +                    "rasterization on a multisample buffer");
>     +   }
>     +
>         map = calloc(1, sizeof(struct intel_miptree_map));
>         if (!map){
>            *out_ptr = NULL;
>     @@ -1354,6 +1363,7 @@ intel_miptree_map(struct intel_context *intel,
>         map->w = w;
>         map->h = h;
> 
>     +   intel_miptree_downsample(intel, mt);
>         intel_miptree_slice_resolve_depth(intel, mt, level, slice);
>         if (map->mode & GL_MAP_WRITE_BIT) {
>            intel_miptree_slice_set_needs_hiz_resolve(mt, level, slice);
>     --
>     1.7.11.2
> 
> 
> It seems to me that we also need to write some code to ensure that
> glReadPixels() reads from mt->singlesample_mt rather than mt.  (Otherwise, on
> Gen6, glReadPixels() will see something awful, and on Gen7, glReadPixels() will
> read from the first slice of the UMS/CMS buffer, which will look ok like no
> multisampled occurred).  Or am I missing something?

Oops. That may explain some oglconform failures. I'll fix this and resubmit.



More information about the mesa-dev mailing list