[PATCH V2] Do not assume 64x64 cursor, added support for other sizes (like in AMD Kaveri, 128x128).

Ander Conselvan de Oliveira conselvan2 at gmail.com
Thu Jul 3 05:27:34 PDT 2014


On 06/25/2014 05:09 PM, Alvaro Fernando García wrote:
> Init cursor size to 64x64 if drmGetCap() fails.
>
> Use Mesa GBM_BO_USE_CURSOR define (which removes 64x64 restriction)
>
> Signed-off-by: Alvaro Fernando García <alvarofernandogarcia at gmail.com>
> ---
>   src/compositor-drm.c | 43 ++++++++++++++++++++++++++++++++++++-------
>   1 file changed, 36 insertions(+), 7 deletions(-)
>
> diff --git a/src/compositor-drm.c b/src/compositor-drm.c
> index 7d514e4..61ddea1 100644
> --- a/src/compositor-drm.c
> +++ b/src/compositor-drm.c
> @@ -55,6 +55,14 @@
>   #define DRM_CAP_TIMESTAMP_MONOTONIC 0x6
>   #endif
>
> +#ifndef DRM_CAP_CURSOR_WIDTH
> +#define DRM_CAP_CURSOR_WIDTH 0x8
> +#endif
> +
> +#ifndef DRM_CAP_CURSOR_HEIGHT
> +#define DRM_CAP_CURSOR_HEIGHT 0x9
> +#endif
> +
>   static int option_current_mode = 0;
>
>   enum output_config {

[...]

>
> @@ -1554,15 +1577,21 @@ drm_output_init_egl(struct drm_output *output, struct drm_compositor *ec)
>   		return -1;
>   	}
>
> -	flags = GBM_BO_USE_CURSOR_64X64 | GBM_BO_USE_WRITE;
> +#ifdef GBM_BO_USE_CURSOR
> +	flags = GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE;
> +#else
> +	flags = GBM_BO_USE_WRITE;
> +	if (ec->cursor_width == 64 && ec->cursor_height == 64)
> +		flags = GBM_BO_USE_CURSOR_64X64 | flags;
> +#endif

Do we really need this? GBM_BO_USE_CURSOR has the same value as the old 
_64X64 flag. GBM will check if the dimensions are 64x64 and fail 
otherwise. So this could just be

	flags = GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE;

and a

#ifndef GBM_BO_USE_CURSOR
#define GBM_BO_USE_CURSOR GBM_BO_USE_CURSOR_64X64
#endif

earlier in the file.


Cheers,
Ander


>   	for (i = 0; i < 2; i++) {
>   		if (output->cursor_bo[i])
>   			continue;
>
>   		output->cursor_bo[i] =
> -			gbm_bo_create(ec->gbm, 64, 64, GBM_FORMAT_ARGB8888,
> -				      flags);
> +			gbm_bo_create(ec->gbm, ec->cursor_width, ec->cursor_height,
> +				GBM_FORMAT_ARGB8888, flags);
>   	}
>
>   	if (output->cursor_bo[0] == NULL || output->cursor_bo[1] == NULL) {
>



More information about the wayland-devel mailing list