Couple thoughs. First, we need to also update drm_output_prepare_cursor_view to check against the size coming from GBM instead of against the hard-coded 64x64 it's currently checking against. Without changing that, we are still restricted to 64x64 regardless of the GBM checking.
Other questions below. On Mon, Jul 28, 2014 at 2:30 PM, Alvaro Fernando García < alvarofernandogar...@gmail.com> 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 <alvarofernandogar...@gmail.com> > --- > src/compositor-drm.c | 41 ++++++++++++++++++++++++++++++++++------- > 1 file changed, 34 insertions(+), 7 deletions(-) > > diff --git a/src/compositor-drm.c b/src/compositor-drm.c > index 7d514e4..9c83b1a 100644 > --- a/src/compositor-drm.c > +++ b/src/compositor-drm.c > @@ -55,6 +55,18 @@ > #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 > + > +#ifndef GBM_BO_USE_CURSOR > +#define GBM_BO_USE_CURSOR GBM_BO_USE_CURSOR_64X64 > +#endif > Is GBM_BO_USE_CURSOR a valid vallback for GBM_BO_USE_CURSOR_64x64? What happens if drmGetCap fails but GBM_BO_USE_CURSOR is defined? Is that going to be ok? > + > static int option_current_mode = 0; > > enum output_config { > @@ -108,6 +120,9 @@ struct drm_compositor { > > clockid_t clock; > struct udev_input input; > + > + uint32_t cursor_width; > + uint32_t cursor_height; > }; > > struct drm_mode { > @@ -987,7 +1002,7 @@ drm_output_set_cursor(struct drm_output *output) > (struct drm_compositor *) output->base.compositor; > EGLint handle, stride; > struct gbm_bo *bo; > - uint32_t buf[64 * 64]; > + uint32_t buf[c->cursor_width * c->cursor_height]; > unsigned char *s; > int i, x, y; > > @@ -1010,7 +1025,7 @@ drm_output_set_cursor(struct drm_output *output) > s = wl_shm_buffer_get_data(buffer->shm_buffer); > wl_shm_buffer_begin_access(buffer->shm_buffer); > for (i = 0; i < ev->surface->height; i++) > - memcpy(buf + i * 64, s + i * stride, > + memcpy(buf + i * c->cursor_width, s + i * stride, > ev->surface->width * 4); > wl_shm_buffer_end_access(buffer->shm_buffer); > > @@ -1018,8 +1033,8 @@ drm_output_set_cursor(struct drm_output *output) > weston_log("failed update cursor: %m\n"); > > handle = gbm_bo_get_handle(bo).s32; > - if (drmModeSetCursor(c->drm.fd, > - output->crtc_id, handle, 64, 64)) { > + if (drmModeSetCursor(c->drm.fd, output->crtc_id, handle, > + c->cursor_width, c->cursor_height)) { > weston_log("failed to set cursor: %m\n"); > c->cursors_are_broken = 1; > } > @@ -1296,6 +1311,18 @@ init_drm(struct drm_compositor *ec, struct > udev_device *device) > else > ec->clock = CLOCK_REALTIME; > > + ret = drmGetCap(fd, DRM_CAP_CURSOR_WIDTH, &cap); > + if (ret == 0) > + ec->cursor_width = cap; > + else > + ec->cursor_width = 64; > + > + ret = drmGetCap(fd, DRM_CAP_CURSOR_HEIGHT, &cap); > + if (ret == 0) > + ec->cursor_height = cap; > + else > + ec->cursor_height = 64; > + > I think this was asked before, but never answered. Do we have known bounds on these values? I guess they come from GBM so we can probably trust that they're reasonable, but what are the guarantees? return 0; > } > > @@ -1554,15 +1581,15 @@ drm_output_init_egl(struct drm_output *output, > struct drm_compositor *ec) > return -1; > } > > - flags = GBM_BO_USE_CURSOR_64X64 | GBM_BO_USE_WRITE; > + flags = GBM_BO_USE_CURSOR | GBM_BO_USE_WRITE; > > 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) { > -- > 2.0.3 > > _______________________________________________ > wayland-devel mailing list > wayland-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/wayland-devel >
_______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel