[Mesa-dev] [PATCH 7/8] i965: Add separate stencil/HiZ setup for MESA_FORMAT_Z32_FLOAT_X24S8.

Ian Romanick idr at freedesktop.org
Fri Dec 16 11:05:25 PST 2011


On 12/15/2011 08:43 PM, Eric Anholt wrote:
> This is a little more unusual than the separate MESA_FORMAT_S8_Z24
> support, because in addition to storing the real stencil data in a
> MESA_FORMAT_S8 miptree, we also make the Z miptree be
> MESA_FORMAT_Z32_FLOAT instead of the requested format.
>
> Reviewed-by: Kenneth Graunke<kenneth at whitecape.org>
> ---
>   src/mesa/drivers/dri/i965/brw_misc_state.c     |    2 +-
>   src/mesa/drivers/dri/i965/brw_vtbl.c           |    2 +
>   src/mesa/drivers/dri/intel/intel_mipmap_tree.c |   31 +++++++++++++----------
>   3 files changed, 20 insertions(+), 15 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_misc_state.c b/src/mesa/drivers/dri/i965/brw_misc_state.c
> index 8a6a694..ad49c8f 100644
> --- a/src/mesa/drivers/dri/i965/brw_misc_state.c
> +++ b/src/mesa/drivers/dri/i965/brw_misc_state.c
> @@ -216,7 +216,7 @@ brw_depthbuffer_format(struct brw_context *brw)
>      if (!drb)
>         return BRW_DEPTHFORMAT_D32_FLOAT;
>
> -   switch (drb->Base.Format) {
> +   switch (drb->mt->format) {
>      case MESA_FORMAT_Z16:
>         return BRW_DEPTHFORMAT_D16_UNORM;
>      case MESA_FORMAT_Z32_FLOAT:
> diff --git a/src/mesa/drivers/dri/i965/brw_vtbl.c b/src/mesa/drivers/dri/i965/brw_vtbl.c
> index bc76ec2..d348806 100644
> --- a/src/mesa/drivers/dri/i965/brw_vtbl.c
> +++ b/src/mesa/drivers/dri/i965/brw_vtbl.c
> @@ -202,6 +202,8 @@ static bool brw_is_hiz_depth_format(struct intel_context *intel,
>         return false;
>
>      switch (format) {
> +   case MESA_FORMAT_Z32_FLOAT:
> +   case MESA_FORMAT_Z32_FLOAT_X24S8:
>      case MESA_FORMAT_X8_Z24:
>      case MESA_FORMAT_S8_Z24:
>         return true;
> diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> index 0d49fec..e0f9632 100644
> --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
> @@ -89,9 +89,6 @@ intel_miptree_create_internal(struct intel_context *intel,
>      mt->compressed = compress_byte ? 1 : 0;
>      mt->refcount = 1;
>
> -   intel_get_texture_alignment_unit(intel, format,
> -				&mt->align_w,&mt->align_h);
> -
>      if (target == GL_TEXTURE_CUBE_MAP) {
>         assert(depth0 == 1);
>         mt->depth0 = 6;
> @@ -109,16 +106,6 @@ intel_miptree_create_internal(struct intel_context *intel,
>         mt->cpp = 2;
>      }
>
> -#ifdef I915
> -   (void) intel;
> -   if (intel->is_945)
> -      i945_miptree_layout(mt);
> -   else
> -      i915_miptree_layout(mt);
> -#else
> -   brw_miptree_layout(intel, mt);
> -#endif
> -
>      if (_mesa_is_depthstencil_format(_mesa_get_format_base_format(format))&&
>          (intel->must_use_separate_stencil ||
>   	(intel->has_separate_stencil&&
> @@ -142,12 +129,28 @@ intel_miptree_create_internal(struct intel_context *intel,
>          */
>         if (mt->format == MESA_FORMAT_S8_Z24) {
>   	 mt->format = MESA_FORMAT_X8_Z24;
> +      } else if (mt->format == MESA_FORMAT_Z32_FLOAT_X24S8) {
> +	 mt->format = MESA_FORMAT_Z32_FLOAT;
> +	 mt->cpp = 4;
>         } else {
> -	 _mesa_problem("Unknown format %s in separate stencil\n",
> +	 _mesa_problem(NULL, "Unknown format %s in separate stencil mt\n",
>   		       _mesa_get_format_name(mt->format));
>         }
>      }
>
> +   intel_get_texture_alignment_unit(intel, mt->format,
> +				&mt->align_w,&mt->align_h);
> +
> +#ifdef I915
> +   (void) intel;
> +   if (intel->is_945)
> +      i945_miptree_layout(mt);
> +   else
> +      i915_miptree_layout(mt);
> +#else
> +   brw_miptree_layout(intel, mt);
> +#endif
> +

Did this patch get at least some touch testing on i915?  None of the 
functions that (now) get called first should have any dependency on on 
*_miptree_layout on i915, but still.

>      return mt;
>   }
>


More information about the mesa-dev mailing list