[Mesa-dev] [PATCH] i965: Fix gen6, gen7 when used with a non-HiZ capable DDX

Ian Romanick idr at freedesktop.org
Mon Jan 16 16:04:38 PST 2012


On 01/13/2012 04:57 PM, Chad Versace wrote:
> Nothing works if HiZ is enabled and the DDX is incapable of HiZ (that is,
> the DDX version is<  2.16).
>
> The problem is that the refactoring that eliminated
> intel_renderbuffer::stencil_rb broke the recovery path in
> intel_verify_dri2_has_hiz().  Specifically, it broke line
> intel_context.c:1445, which allocates the region for
> DRI_BUFFER_DEPTH_STENCIL. That allocation was creating a separate stencil
> miptree, despite the buffer being a packed depthstencil buffer. Havoc
> ensued.
>
> This patch introduces a bool flag that prevents allocation of that stencil
> miptree.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44103
> CC: Ian Romanick<idr at freedesktop.org>

Tested-by: Ian Romanick <ian.d.romanick at intel.com>

> Note: This is a candidate for the 8.0 branch.
> Signed-off-by: Chad Versace<chad.versace at linux.intel.com>
> ---
>   src/mesa/drivers/dri/intel/intel_mipmap_tree.c |   17 +++++++++++++----
>   1 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> index 4e1a502..eae79c1 100644
> --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> @@ -58,6 +58,11 @@ target_to_target(GLenum target)
>      }
>   }
>
> +/**
> + * @param for_region Indicates that the caller is
> + *        intel_miptree_create_for_region(). If true, then do not create
> + *        \c stencil_mt.
> + */
>   static struct intel_mipmap_tree *
>   intel_miptree_create_internal(struct intel_context *intel,
>   			      GLenum target,
> @@ -66,7 +71,8 @@ intel_miptree_create_internal(struct intel_context *intel,
>   			      GLuint last_level,
>   			      GLuint width0,
>   			      GLuint height0,
> -			      GLuint depth0)
> +			      GLuint depth0,
> +			      bool for_region)
>   {
>      struct intel_mipmap_tree *mt = calloc(sizeof(*mt), 1);
>      int compress_byte = 0;
> @@ -106,7 +112,8 @@ intel_miptree_create_internal(struct intel_context *intel,
>         mt->cpp = 2;
>      }
>
> -   if (_mesa_is_depthstencil_format(_mesa_get_format_base_format(format))&&
> +   if (!for_region&&
> +       _mesa_is_depthstencil_format(_mesa_get_format_base_format(format))&&
>          (intel->must_use_separate_stencil ||
>   	(intel->has_separate_stencil&&
>   	intel->vtbl.is_hiz_depth_format(intel, format)))) {
> @@ -199,7 +206,8 @@ intel_miptree_create(struct intel_context *intel,
>
>      mt = intel_miptree_create_internal(intel, target, format,
>   				      first_level, last_level, width0,
> -				      height0, depth0);
> +				      height0, depth0,
> +				      false);
>      /*
>       * pitch == 0 || height == 0  indicates the null texture
>       */
> @@ -234,7 +242,8 @@ intel_miptree_create_for_region(struct intel_context *intel,
>
>      mt = intel_miptree_create_internal(intel, target, format,
>   				      0, 0,
> -				      region->width, region->height, 1);
> +				      region->width, region->height, 1,
> +				      true);
>      if (!mt)
>         return mt;
>



More information about the mesa-dev mailing list