<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Aug 31, 2015 at 4:58 PM, Matt Turner <span dir="ltr"><<a href="mailto:mattst88@gmail.com" target="_blank">mattst88@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Mon, Aug 31, 2015 at 4:45 PM, Nanley Chery <<a href="mailto:nanleychery@gmail.com">nanleychery@gmail.com</a>> wrote:<br>
> From: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br>
><br>
> Add modifications necessary to get ASTC functional on Cherryview.<br>
><br>
> Cc: Chad Versace <<a href="mailto:chad.versace@intel.com">chad.versace@intel.com</a>><br>
> Signed-off-by: Nanley Chery <<a href="mailto:nanley.g.chery@intel.com">nanley.g.chery@intel.com</a>><br>
> ---<br>
>  src/mesa/drivers/dri/i965/brw_defines.h        |  1 +<br>
>  src/mesa/drivers/dri/i965/brw_tex_layout.c     | 55 +++++++++++++++++++-------<br>
>  src/mesa/drivers/dri/i965/gen8_surface_state.c |  6 +++<br>
>  src/mesa/drivers/dri/i965/intel_extensions.c   |  4 +-<br>
>  4 files changed, 51 insertions(+), 15 deletions(-)<br>
><br>
> diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h<br>
> index 07fe198..4f3092f 100644<br>
> --- a/src/mesa/drivers/dri/i965/brw_defines.h<br>
> +++ b/src/mesa/drivers/dri/i965/brw_defines.h<br>
> @@ -537,6 +537,7 @@<br>
>  #define BRW_SURFACEFORMAT_ASTC_LDR_2D_12x10_FLT16        0x27E<br>
>  #define BRW_SURFACEFORMAT_ASTC_LDR_2D_12x12_FLT16        0x27F<br>
><br>
> +#define BRW_SURFACE_FORMAT_IS_ASTC(format)   ((format) & 0x200)<br>
>  #define BRW_SURFACE_FORMAT_SHIFT       18<br>
>  #define BRW_SURFACE_FORMAT_MASK                INTEL_MASK(26, 18)<br>
><br>
> diff --git a/src/mesa/drivers/dri/i965/brw_tex_layout.c b/src/mesa/drivers/dri/i965/brw_tex_layout.c<br>
> index 268b995..a08e0ab 100644<br>
> --- a/src/mesa/drivers/dri/i965/brw_tex_layout.c<br>
> +++ b/src/mesa/drivers/dri/i965/brw_tex_layout.c<br>
> @@ -34,6 +34,8 @@<br>
><br>
>  #include "intel_mipmap_tree.h"<br>
>  #include "brw_context.h"<br>
> +#include "brw_defines.h"<br>
> +#include "brw_state.h"<br>
>  #include "main/macros.h"<br>
>  #include "main/glformats.h"<br>
><br>
> @@ -302,8 +304,17 @@ gen9_miptree_layout_1d(struct intel_mipmap_tree *mt)<br>
>     }<br>
>  }<br>
><br>
> +static inline bool<br>
> +is_astc_chv(const struct brw_context *brw,<br>
> +            const struct intel_mipmap_tree *mt)<br>
> +{<br>
> +   return brw->is_cherryview &&<br>
> +          BRW_SURFACE_FORMAT_IS_ASTC(brw_format_for_mesa_format(mt->format));<br>
> +}<br>
> +<br>
>  static void<br>
> -brw_miptree_layout_2d(struct intel_mipmap_tree *mt)<br>
> +brw_miptree_layout_2d(const struct brw_context *brw,<br>
> +                      struct intel_mipmap_tree *mt)<br>
>  {<br>
>     unsigned x = 0;<br>
>     unsigned y = 0;<br>
> @@ -335,6 +346,17 @@ brw_miptree_layout_2d(struct intel_mipmap_tree *mt)<br>
>               minify(mt->physical_width0, 2);<br>
>         }<br>
><br>
> +       /* Cherryview requires that all miplevels get shifted over 3 blocks for<br>
> +        * ASTC formats with block width of 5 and certain mip1 widths.<br>
> +        */<br>
> +       if (is_astc_chv(brw, mt) && bw == 5) {<br>
> +          unsigned int mip1_width_mod = minify(mt->physical_width0, 1) % 10;<br>
> +          if (mip1_width_mod && mip1_width_mod <= bw) {<br>
> +             x = 3;<br>
> +             mip1_width += x*bw;<br>
> +          }<br>
> +       }<br>
> +<br>
>         if (mip1_width > mt->total_width) {<br>
>             mt->total_width = mip1_width;<br>
>         }<br>
> @@ -481,7 +503,7 @@ brw_miptree_layout_texture_array(struct brw_context *brw,<br>
>     if (layout_1d)<br>
>        gen9_miptree_layout_1d(mt);<br>
>     else<br>
> -      brw_miptree_layout_2d(mt);<br>
> +      brw_miptree_layout_2d(brw, mt);<br>
><br>
>     if (layout_1d) {<br>
>        physical_qpitch = 1;<br>
> @@ -492,12 +514,18 @@ brw_miptree_layout_texture_array(struct brw_context *brw,<br>
>         */<br>
>        mt->qpitch = mt->total_width;<br>
>     } else {<br>
> -      mt->qpitch = brw_miptree_get_vertical_slice_pitch(brw, mt, 0);<br>
> +<br>
>        /* Unlike previous generations the qpitch is a multiple of the<br>
>         * compressed block size on Gen9 so physical_qpitch matches mt->qpitch.<br>
>         */<br>
> -      physical_qpitch = (mt->compressed && brw->gen < 9 ? mt->qpitch / 4 :<br>
> -                         mt->qpitch);<br>
> +      physical_qpitch = mt->qpitch = brw_miptree_get_vertical_slice_pitch(brw, mt, 0);<br>
> +<br>
> +      if (mt->compressed && brw->gen < 9) {<br>
> +         unsigned bh, bw;<br>
> +         _mesa_get_format_block_size(mt->format, &bw, &bh);<br>
> +         physical_qpitch /= bh;<br>
> +      }<br>
> +<br>
>     }<br>
><br>
>     for (unsigned level = mt->first_level; level <= mt->last_level; level++) {<br>
> @@ -705,7 +733,7 @@ intel_miptree_set_total_width_height(struct brw_context *brw,<br>
>           if (gen9_use_linear_1d_layout(brw, mt))<br>
>              gen9_miptree_layout_1d(mt);<br>
>           else<br>
> -            brw_miptree_layout_2d(mt);<br>
> +            brw_miptree_layout_2d(brw, mt);<br>
>           break;<br>
>        }<br>
>        break;<br>
> @@ -772,7 +800,10 @@ intel_miptree_set_alignment(struct brw_context *brw,<br>
>        if (brw->gen >= 9) {<br>
>           mt->align_w *= 4;<br>
>           mt->align_h *= 4;<br>
> +      } else if (is_astc_chv(brw, mt)) {<br>
> +         mt->align_h *= 4;<br>
>        }<br>
> +<br>
>     } else if (mt->format == MESA_FORMAT_S_UINT8) {<br>
>        mt->align_w = 8;<br>
>        mt->align_h = brw->gen >= 7 ? 8 : 4;<br>
> @@ -803,14 +834,10 @@ brw_miptree_layout(struct brw_context *brw,<br>
>        return;<br>
>     }<br>
><br>
> -   /* On Gen9+ the alignment values are expressed in multiples of the block<br>
> -    * size<br>
> -    */<br>
> -   if (brw->gen >= 9) {<br>
> -      unsigned int i, j;<br>
> -      _mesa_get_format_block_size(mt->format, &i, &j);<br>
> -      mt->align_w /= i;<br>
> -      mt->align_h /= j;<br>
> +   /* On CHV and Gen9+ scale down the alignment to valid values for HW */<br>
> +   if (mt->compressed && (brw->gen >= 9 || is_astc_chv(brw, mt))) {<br>
> +         mt->align_w = 4;<br>
> +         mt->align_h = 4;<br>
>     }<br>
><br>
>     if ((layout_flags & MIPTREE_LAYOUT_FOR_BO) == 0)<br>
> diff --git a/src/mesa/drivers/dri/i965/gen8_surface_state.c b/src/mesa/drivers/dri/i965/gen8_surface_state.c<br>
> index d2f333f..9fb3569 100644<br>
> --- a/src/mesa/drivers/dri/i965/gen8_surface_state.c<br>
> +++ b/src/mesa/drivers/dri/i965/gen8_surface_state.c<br>
> @@ -273,6 +273,12 @@ gen8_emit_texture_surface_state(struct brw_context *brw,<br>
>        surf[5] |= SET_FIELD(tr_mode, GEN9_SURFACE_TRMODE);<br>
>        /* Disable Mip Tail by setting a large value. */<br>
>        surf[5] |= SET_FIELD(15, GEN9_SURFACE_MIP_TAIL_START_LOD);<br>
> +   } else if (brw->is_cherryview && BRW_SURFACE_FORMAT_IS_ASTC(format)) {<br>
> +      unsigned int bw, bh;<br>
> +      unsigned int mip1_width_mod = minify(mt->physical_width0, 1) % 10;<br>
> +      _mesa_get_format_block_size(mt->format, &bw, &bh);<br>
> +      if (bw == 5 && mip1_width_mod && mip1_width_mod <= bw)<br>
> +         surf[5] |= SET_FIELD(4, BRW_SURFACE_X_OFFSET);<br>
>     }<br>
><br>
>     if (aux_mt) {<br>
> diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/dri/i965/intel_extensions.c<br>
> index 3c764be..18ab048 100644<br>
> --- a/src/mesa/drivers/dri/i965/intel_extensions.c<br>
> +++ b/src/mesa/drivers/dri/i965/intel_extensions.c<br>
> @@ -354,8 +354,10 @@ intelInitExtensions(struct gl_context *ctx)<br>
>        ctx->Extensions.ARB_stencil_texturing = true;<br>
>     }<br>
><br>
> -   if (brw->gen >= 9) {<br>
> +   if (brw->is_cherryview || brw->gen >=9 )<br>
<br>
</div></div>Space between >= and 9<br>
<br></blockquote><div>Will update.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
(what's this patch against? I don't have this in my tree)<br></blockquote><div><br></div><div>This is against mesa master. </div></div><br></div></div>