[igt-dev] [PATCH i-g-t 5/6] lib/i915: Add ADL-P stride restrictions for non-linear buffers
Imre Deak
imre.deak at intel.com
Tue Jun 8 10:45:06 UTC 2021
On Mon, Jun 07, 2021 at 08:34:45PM -0700, Matt Roper wrote:
> On Mon, Jun 07, 2021 at 10:58:21AM +0300, Imre Deak wrote:
> > On Fri, Jun 04, 2021 at 11:51:51PM +0300, Souza, Jose wrote:
> > > Hum we can drop this change, Imre landed changes to make framebuffers
> > > strides power of two for adl_p, so for userspace it should be
> > > transparent.
> >
> > Yes, it should be transparent for CCS framebuffers too, however that's a
> > TODO item. I suspect that kernel would need to recreate the CCS plane if
> > the main surface stride changes (since the layout of each CCS page would
> > change, so we can't just remap the CCS pages), hence left this part for
> > a follow-up.
> >
> > So this patch is needed.
>
> Are there any changes required, or can we consider this r-b?
No changes are needed:
Reviewed-by: Imre Deak <imre.deak at intel.com>
>
> Thanks.
>
>
> Matt
>
> >
> > > On Fri, 2021-06-04 at 13:39 -0700, Matt Roper wrote:
> > > > From: José Roberto de Souza <jose.souza at intel.com>
> > > >
> > > > ADL-P tiled framebuffer strides must be power-of-two aligned and has a
> > > > minimum of 8 tiles. For non-CCS framebuffers the driver supports FBs not
> > > > meeting this requirement by remapping the framebuffer and padding the
> > > > stride as required, but for CCS FBs userspace must ensure the alignment.
> > > > Adding remap support for CCS FBs to the driver is to be done as a
> > > > follow-up.
> > > >
> > > > Cc: Juha-Pekka Heikkilä <juha-pekka.heikkila at intel.com>
> > > > Cc: Anusha Srivatsa <anusha.srivatsa at intel.com>
> > > > Cc: Clinton Taylor <Clinton.A.Taylor at intel.com>
> > > > Cc: Stanislav Lisovskiy <stanislav.lisovskiy at intel.com>
> > > > Cc: Imre Deak <imre.deak at intel.com>
> > > > Signed-off-by: José Roberto de Souza <jose.souza at intel.com>
> > > > Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> > > > ---
> > > > lib/igt_fb.c | 26 +++++++++++++++++++++-----
> > > > 1 file changed, 21 insertions(+), 5 deletions(-)
> > > >
> > > > diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> > > > index 585ede38..ce2aa6ce 100644
> > > > --- a/lib/igt_fb.c
> > > > +++ b/lib/igt_fb.c
> > > > @@ -729,8 +729,16 @@ static uint32_t calc_plane_stride(struct igt_fb *fb, int plane)
> > > > /* clear color always fixed to 64 bytes */
> > > > return 64;
> > > > } else if (is_gen12_ccs_plane(fb, plane)) {
> > > > - /* A main surface using a CCS AUX surface must be 4x4 tiles aligned. */
> > > > - return ALIGN(min_stride, 64);
> > > > + /*
> > > > + * A main surface using a CCS AUX surface must be 4x4 tiles
> > > > + * aligned. On ADL_P the minimum main surface stride is 8
> > > > + * tiles (2 * 64 byte on CCS surface) and it has to be POT
> > > > + * aligned.
> > > > + */
> > > > + if (IS_ALDERLAKE_P(intel_get_drm_devid(fb->fd)))
> > > > + return roundup_power_of_two(max(min_stride, 128u));
> > > > + else
> > > > + return ALIGN(min_stride, 64);
> > > > } else if (!fb->modifier && is_nouveau_device(fb->fd)) {
> > > > int align;
> > > >
> > > > @@ -743,14 +751,22 @@ static uint32_t calc_plane_stride(struct igt_fb *fb, int plane)
> > > > return ALIGN(min_stride, align);
> > > > } else {
> > > > unsigned int tile_width, tile_height;
> > > > + uint32_t stride;
> > > >
> > > > igt_get_fb_tile_size(fb->fd, fb->modifier, fb->plane_bpp[plane],
> > > > &tile_width, &tile_height);
> > > >
> > > > - if (is_gen12_ccs_modifier(fb->modifier))
> > > > - tile_width *= 4;
> > > > + if (is_gen12_ccs_modifier(fb->modifier)) {
> > > > + stride = ALIGN(min_stride, tile_width * 4);
> > > >
> > > > - return ALIGN(min_stride, tile_width);
> > > > + /* TODO: add support to kernel to POT align CCS format strides */
> > > > + if (IS_ALDERLAKE_P(intel_get_drm_devid(fb->fd)))
> > > > + stride = roundup_power_of_two(max(stride, tile_width * 8));
> > > > + } else {
> > > > + stride = ALIGN(min_stride, tile_width);
> > > > + }
> > > > +
> > > > + return stride;
> > > > }
> > > > }
> > > >
> > >
>
> --
> Matt Roper
> Graphics Software Engineer
> VTT-OSGC Platform Enablement
> Intel Corporation
> (916) 356-2795
More information about the igt-dev
mailing list