[PATCH V2] Do not assume 64x64 cursor, added support for other sizes (like in AMD Kaveri, 128x128).
Michel Dänzer
michel at daenzer.net
Fri Jul 4 02:17:34 PDT 2014
On 04.07.2014 17:51, Ander Conselvan de Oliveira wrote:
> On 07/04/2014 04:13 AM, Michel Dänzer wrote:
>> On 03.07.2014 21:27, Ander Conselvan de Oliveira wrote:
>>> 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.
>>
>> No, that check was removed when adding GBM_BO_USE_CURSOR.
>>
>>
>>> 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.
>>
>> No, if GBM doesn't define GBM_BO_USE_CURSOR, it will likely fail if the
>> dimensions are not 64x64.
>
> And that is what we expect. We shouldn't rely on a buffer allocated with
> only GBM_BO_USE_WRITE to use as a hardware cursor.
>
> My point is that the code I proposed should work with both old and new
> GBM. For old GBM, if cursor is not 64x64, gbm won't allocate the bo and
> the check that follows the allocation will disable hardware cursors. If
> GBM is new enough, everything works. On top of that, it avoids the ifdef
> in the middle of a function.
Hmm, yes, that makes sense.
--
Earthling Michel Dänzer | http://www.amd.com
Libre software enthusiast | Mesa and X developer
More information about the wayland-devel
mailing list