[igt-dev] [PATCH i-g-t 06/25] lib/igt_fb: Respect the users choice of stride
Paulo Zanoni
paulo.r.zanoni at intel.com
Fri Sep 21 00:04:59 UTC 2018
Em Qui, 2018-07-19 às 18:03 +0300, Ville Syrjala escreveu:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> We prented to allow the caller to specify the stride explicitly for
> the
> fb. But we don't actually use that user specified stride when we
> calculate the require bo size. Fix that oversight.
>
Requires simple rebase.
Reviewed-by: Paulo Zanoni <paulo.r.zanoni at intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
> lib/igt_fb.c | 37 ++++++++++++++++++++++---------------
> 1 file changed, 22 insertions(+), 15 deletions(-)
>
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index ae71d9673228..6748357ad16b 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -215,11 +215,12 @@ static unsigned planar_height(struct
> format_desc_struct *format, unsigned height
>
> static void calc_fb_size_planar(int fd, int width, int height,
> struct format_desc_struct *format,
> - uint64_t tiling, unsigned *size_ret,
> - unsigned *stride_ret, unsigned
> *offsets)
> + uint64_t tiling, unsigned stride,
> + unsigned *size_ret, unsigned
> *stride_ret,
> + unsigned *offsets)
> {
> int plane;
> - unsigned stride = 0, tile_width, tile_height;
> + unsigned max_stride = 0, tile_width, tile_height;
>
> *size_ret = 0;
>
> @@ -229,10 +230,13 @@ static void calc_fb_size_planar(int fd, int
> width, int height,
> igt_get_fb_tile_size(fd, tiling, format-
> >plane_bpp[plane], &tile_width, &tile_height);
>
> plane_stride = ALIGN(planar_stride(format, width,
> plane), tile_width);
> - if (stride < plane_stride)
> - stride = plane_stride;
> + if (max_stride < plane_stride)
> + max_stride = plane_stride;
> }
>
> + if (!stride)
> + stride = max_stride;
> +
> for (plane = 0; plane < format->num_planes; plane++) {
> if (offsets)
> offsets[plane] = *size_ret;
> @@ -251,9 +255,9 @@ static void calc_fb_size_planar(int fd, int
> width, int height,
>
> static void calc_fb_size_packed(int fd, int width, int height,
> struct format_desc_struct *format,
> uint64_t tiling,
> - unsigned *size_ret, unsigned
> *stride_ret)
> + unsigned stride, unsigned *size_ret,
> unsigned *stride_ret)
> {
> - unsigned int tile_width, tile_height, stride, size;
> + unsigned int tile_width, tile_height, size;
> int byte_width = width * (format->plane_bpp[0] / 8);
>
> igt_get_fb_tile_size(fd, tiling, format->plane_bpp[0],
> &tile_width, &tile_height);
> @@ -270,15 +274,18 @@ static void calc_fb_size_packed(int fd, int
> width, int height,
> * tiled. But then that failure is expected.
> */
>
> - v = byte_width;
> - for (stride = 512; stride < v; stride *= 2)
> - ;
> + if (!stride) {
> + v = byte_width;
> + for (stride = 512; stride < v; stride *= 2)
> + ;
> + }
>
> v = stride * height;
> for (size = 1024*1024; size < v; size *= 2)
> ;
> } else {
> - stride = ALIGN(byte_width, tile_width);
> + if (!stride)
> + stride = ALIGN(byte_width, tile_width);
> size = stride * ALIGN(height, tile_height);
> }
>
> @@ -306,9 +313,9 @@ void igt_calc_fb_size(int fd, int width, int
> height, uint32_t drm_format, uint64
> igt_assert(format);
>
> if (format->num_planes > 1)
> - calc_fb_size_planar(fd, width, height, format,
> tiling, size_ret, stride_ret, NULL);
> + calc_fb_size_planar(fd, width, height, format,
> tiling, 0, size_ret, stride_ret, NULL);
> else
> - calc_fb_size_packed(fd, width, height, format,
> tiling, size_ret, stride_ret);
> + calc_fb_size_packed(fd, width, height, format,
> tiling, 0, size_ret, stride_ret);
> }
>
> /**
> @@ -383,10 +390,10 @@ static int create_bo_for_fb(int fd, int width,
> int height,
> unsigned calculated_size, calculated_stride;
>
> if (format->num_planes > 1)
> - calc_fb_size_planar(fd, width, height,
> format, tiling,
> + calc_fb_size_planar(fd, width, height,
> format, tiling, stride,
> &calculated_size,
> &calculated_stride, offsets);
> else
> - calc_fb_size_packed(fd, width, height,
> format, tiling,
> + calc_fb_size_packed(fd, width, height,
> format, tiling, stride,
> &calculated_size,
> &calculated_stride);
>
> if (stride == 0)
More information about the igt-dev
mailing list