[PATCH i-g-t 2/4] lib/i915/fbc: add fbc frame size check helper

Cavitt, Jonathan jonathan.cavitt at intel.com
Fri Jun 7 20:42:27 UTC 2024


-----Original Message-----
From: igt-dev <igt-dev-bounces at lists.freedesktop.org> On Behalf Of Vinod Govindapillai
Sent: Friday, June 7, 2024 7:58 AM
To: igt-dev at lists.freedesktop.org
Cc: Govindapillai, Vinod <vinod.govindapillai at intel.com>; Heikkila, Juha-pekka <juha-pekka.heikkila at intel.com>; Hogander, Jouni <jouni.hogander at intel.com>
Subject: [PATCH i-g-t 2/4] lib/i915/fbc: add fbc frame size check helper
> 
> Add a helper function to check maximum plane size fbc can be
> supported in a display version.
> 
> Signed-off-by: Vinod Govindapillai <vinod.govindapillai at intel.com>
> ---
>  lib/i915/intel_fbc.c | 36 ++++++++++++++++++++++++++++++++++++
>  lib/i915/intel_fbc.h |  1 +
>  2 files changed, 37 insertions(+)
> 
> diff --git a/lib/i915/intel_fbc.c b/lib/i915/intel_fbc.c
> index 07ed7f469..992e9c4de 100644
> --- a/lib/i915/intel_fbc.c
> +++ b/lib/i915/intel_fbc.c
> @@ -99,3 +99,39 @@ bool intel_fbc_wait_until_enabled(int device, enum pipe pipe)
>  
>  	return enabled;
>  }
> +
> +/**
> + * intel_fbc_plane_size_supported
> + *
> + * @fd: fd of the device
> + * @width: width of the plane
> + * @height: height of the plane
> + *
> + * Checks if the plane size supported for FBC
> + *
> + * Returns:
> + * true if plane size is within the range as per the FBC supported size restrictions per platform
> + */
> +bool intel_fbc_plane_size_supported(int fd, uint32_t width, uint32_t height)
> +{
> +	const uint32_t dev_id = intel_get_drm_devid(fd);
> +	const struct intel_device_info *info = intel_get_device_info(dev_id);
> +	int ver = info->graphics_ver;
> +	unsigned int max_w, max_h;
> +
> +	if (ver >= 10) {
> +		max_w = 5120;
> +		max_h = 4096;
> +	} else if (ver >= 8 || IS_HASWELL(fd)) {
> +		max_w = 4096;
> +		max_h = 4096;
> +	} else if (IS_G4X(fd) || ver >= 5) {
> +		max_w = 4096;
> +		max_h = 2048;
> +	} else {
> +		max_w = 2048;
> +		max_h = 1536;
> +	}
> +
> +	return width <= max_w && height <= max_h;
> +}

It might also be helpful to have a separate function that returns the max fcb
plane size supported as a raw value in case any tests wanted to operate on the
full fcb plane.  Say:

int intel_fbc_max_plane_size(int device, uint32_t *width, uint32_t *height)

This could store the width and height generated above and be used as a helper
function for intel_fbc_plane_size_supported.  I also don't know if fcb could be
unsupported at some point, but the int return value could be used for any errors.

This is just something to consider.  I won't block on it:
Reviewed-by: Jonathan Cavitt <jonathan.cavitt at intel.com>
-Jonathan Cavitt


> diff --git a/lib/i915/intel_fbc.h b/lib/i915/intel_fbc.h
> index 995dc7f1e..f05b351f6 100644
> --- a/lib/i915/intel_fbc.h
> +++ b/lib/i915/intel_fbc.h
> @@ -14,5 +14,6 @@
>  bool intel_fbc_supported_on_chipset(int device, enum pipe pipe);
>  bool intel_fbc_wait_until_enabled(int device, enum pipe pipe);
>  bool intel_fbc_is_enabled(int device, enum pipe pipe, int log_level);
> +bool intel_fbc_plane_size_supported(int device, uint32_t width, uint32_t height);
>  
>  #endif
> -- 
> 2.34.1
> 
> 


More information about the igt-dev mailing list