[Mesa-dev] [PATCH 1/2] isl: remove the cache line size alignment requirement

Lionel Landwerlin lionel.g.landwerlin at intel.com
Mon Feb 18 15:06:15 UTC 2019


On 15/02/2019 14:43, Samuel Iglesias Gonsálvez wrote:
> There are formats which bpp are not aligned to a power-of-two and
> that can cause problems in the checks we do.
>
> The cacheline size was a requirement for using the BLT engine, which
> we don't use anymore except for a few things on old HW, so we drop it.
>
> Fixes CTS's CL#3500 test:
>
> dEQP-VK.api.image_clearing.core.clear_color_image.2d.linear.single_layer.r8g8b8_unorm
>
> Signed-off-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>


That looks good to me :
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

I'm doing a CI run just to convince myself, so if you can wait for that.

Thanks,

-Lionel


> ---
>   src/intel/isl/isl.c | 21 ++++-----------------
>   1 file changed, 4 insertions(+), 17 deletions(-)
>
> diff --git a/src/intel/isl/isl.c b/src/intel/isl/isl.c
> index eaaa28014a3..7f1f2339931 100644
> --- a/src/intel/isl/isl.c
> +++ b/src/intel/isl/isl.c
> @@ -1381,20 +1381,6 @@ isl_calc_row_pitch(const struct isl_device *dev,
>      uint32_t alignment_B =
>         isl_calc_row_pitch_alignment(surf_info, tile_info);
>   
> -   /* If pitch isn't given and it can be chosen freely, align it by cache line
> -    * allowing one to use blit engine on the surface.
> -    */
> -   if (surf_info->row_pitch_B == 0 && tile_info->tiling == ISL_TILING_LINEAR) {
> -      /* From the Broadwell PRM docs for XY_SRC_COPY_BLT::SourceBaseAddress:
> -       *
> -       *    "Base address of the destination surface: X=0, Y=0. Lower 32bits
> -       *    of the 48bit addressing. When Src Tiling is enabled (Bit_15
> -       *    enabled), this address must be 4KB-aligned. When Tiling is not
> -       *    enabled, this address should be CL (64byte) aligned."
> -       */
> -      alignment_B = MAX2(alignment_B, 64);
> -   }
> -
>      const uint32_t min_row_pitch_B =
>         isl_calc_min_row_pitch(dev, surf_info, tile_info, phys_total_el,
>                                alignment_B);
> @@ -1527,12 +1513,13 @@ isl_surf_init_s(const struct isl_device *dev,
>         base_alignment_B = MAX(1, info->min_alignment_B);
>         if (info->usage & ISL_SURF_USAGE_RENDER_TARGET_BIT) {
>            if (isl_format_is_yuv(info->format)) {
> -            base_alignment_B = MAX(base_alignment_B, fmtl->bpb / 4);
> +            base_alignment_B = isl_align_npot(base_alignment_B, fmtl->bpb / 4);
>            } else {
> -            base_alignment_B = MAX(base_alignment_B, fmtl->bpb / 8);
> +            base_alignment_B = isl_align_npot(base_alignment_B, fmtl->bpb / 8);
>            }
> +      } else {
> +         base_alignment_B = isl_round_up_to_power_of_two(base_alignment_B);
>         }
> -      base_alignment_B = isl_round_up_to_power_of_two(base_alignment_B);
>      } else {
>         const uint32_t total_h_tl =
>            isl_align_div(phys_total_el.h, tile_info.logical_extent_el.height);




More information about the mesa-dev mailing list