On Thu, 17 Nov 2011 19:58:43 -0800, Chad Versace <chad.vers...@linux.intel.com> 
wrote:
> For depthstencil textures using separate stencil, we embedded a stencil
> buffer in intel_texture_image. The intention was that the embedded stencil
> buffer would be the golden copy of the texture's stencil bits. When
> necessary, we scattered/gathered the stencil bits between the texture
> miptree and the embedded stencil buffer.
> 
> This approach had a serious deficiency for mipmapped or multi-layer
> textures. Any given moment the embedded stencil buffer was consistent with
> exactly one miptree slice, the most recent one to be scattered. This
> permitted tests of type A to pass, but broke tests of type B.
> 
> Test A:
>     1. Create a depthstencil texture.
>     2. Upload data into (level=x1,layer=y1).
>     3. Read and test stencil data at (level=x1, layer=y1).
>     4. Upload data into (level=x2,layer=y2).
>     5. Read and test stencil data at (level=x2, layer=y2).
> 
> Test B:
>     1. Create a depthstencil texture.
>     2. Upload data into (level=x1,layer=y1).
>     3. Upload data into (level=x2,layer=y2).
>     4. Read and test stencil data at (level=x1, layer=y1).
>     5. Read and test stencil data at (level=x2, layer=y2).
> 
> Signed-off-by: Chad Versace <chad.vers...@linux.intel.com>
> ---
>  src/mesa/drivers/dri/intel/intel_fbo.c         |  116 +++++++++++----------
>  src/mesa/drivers/dri/intel/intel_mipmap_tree.c |  134 
> +++++++++++++++++++++++-
>  src/mesa/drivers/dri/intel/intel_mipmap_tree.h |   37 +++++++
>  src/mesa/drivers/dri/intel/intel_tex.c         |   41 +++-----
>  src/mesa/drivers/dri/intel/intel_tex_image.c   |  128 ----------------------
>  src/mesa/drivers/dri/intel/intel_tex_obj.h     |   30 ------
>  6 files changed, 248 insertions(+), 238 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c 
> b/src/mesa/drivers/dri/intel/intel_fbo.c
> index a61c74c..7dc0c53 100644
> --- a/src/mesa/drivers/dri/intel/intel_fbo.c
> +++ b/src/mesa/drivers/dri/intel/intel_fbo.c
>  #ifdef I915
>     (void) intel;
>     if (intel->is_945)
> @@ -103,6 +116,23 @@ intel_miptree_create_internal(struct intel_context 
> *intel,
>     brw_miptree_layout(intel, mt);
>  #endif
>  
> +   if (intel->has_separate_stencil &&
> +       _mesa_is_depthstencil_format(_mesa_get_format_base_format(format))) {

Shouldn't this be must_have_separate_stencil until patch 39/41?

> +      mt->stencil_mt = intel_miptree_create(intel,
> +                                            mt->target,
> +                                            MESA_FORMAT_S8,
> +                                            mt->first_level,
> +                                            mt->last_level,
> +                                            mt->width0,
> +                                            mt->height0,
> +                                            mt->depth0,
> +                                            true);
> +      if (!mt->stencil_mt) {
> +      intel_miptree_release(&mt);
> +      return NULL;
> +      }
> +   }
> +
>     return mt;
>  }

Attachment: pgp6e1Am0F1Cv.pgp
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to