[Spice-devel] [PATCH v2 11/12] spice: add & use qemu_spice_gl_monitor_config

Marc-André Lureau marcandre.lureau at gmail.com
Thu Apr 28 17:21:52 UTC 2016


Hi Gerd

On Fri, Feb 19, 2016 at 1:32 PM, Marc-André Lureau
<marcandre.lureau at gmail.com> wrote:
> Hi
>
> On Fri, Feb 19, 2016 at 10:14 AM, Gerd Hoffmann <kraxel at redhat.com> wrote:
>> Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
>> ---
>>  include/ui/spice-display.h |  1 +
>>  ui/spice-display.c         | 30 ++++++++++++++++++++++++++++++
>>  2 files changed, 31 insertions(+)
>>
>
> Could eventually be squashed with "add opengl/virgl/dmabuf support" patch
>
> Reviewed-by: Marc-André Lureau <marcandre.lureau at redhat.com>

Sigh, too bad this wasn't actually picked or squashed with the series.
This is required for the spice client to know the area of the GL
surface to draw. (currently it also receives monitor config from
2d/QXL, which it associates to GL scanout when enabled, which results
in some clipping visible in virt-manager). Imho it would be worth to
include in 2.6.

>
>> diff --git a/include/ui/spice-display.h b/include/ui/spice-display.h
>> index dd9cf6f..f9388c2 100644
>> --- a/include/ui/spice-display.h
>> +++ b/include/ui/spice-display.h
>> @@ -71,6 +71,7 @@ typedef struct QXLCookie {
>>              QXLRect area;
>>              int redraw;
>>          } render;
>> +        void *data;
>>      } u;
>>  } QXLCookie;
>>
>> diff --git a/ui/spice-display.c b/ui/spice-display.c
>> index 96beb02..34e6d51 100644
>> --- a/ui/spice-display.c
>> +++ b/ui/spice-display.c
>> @@ -660,6 +660,11 @@ static void interface_async_complete(QXLInstance *sin, uint64_t cookie_token)
>>          qemu_bh_schedule(ssd->gl_unblock_bh);
>>          break;
>>      }
>> +    case QXL_COOKIE_TYPE_IO:
>> +        if (cookie->io == QXL_IO_MONITORS_CONFIG_ASYNC) {
>> +            g_free(cookie->u.data);
>> +        }
>> +        break;
>>  #endif
>>      default:
>>          /* should never be called, used in qxl native mode only */
>> @@ -795,6 +800,29 @@ static const DisplayChangeListenerOps display_listener_ops = {
>>
>>  #ifdef HAVE_SPICE_GL
>>
>> +static void qemu_spice_gl_monitor_config(SimpleSpiceDisplay *ssd,
>> +                                         int x, int y, int w, int h)
>> +{
>> +    QXLMonitorsConfig *config;
>> +    QXLCookie *cookie;
>> +
>> +    config = g_malloc0(sizeof(QXLMonitorsConfig) + sizeof(QXLHead));
>> +    config->count = 1;
>> +    config->max_allowed = 1;
>> +    config->heads[0].x = x;
>> +    config->heads[0].y = y;
>> +    config->heads[0].width = w;
>> +    config->heads[0].height = h;
>> +    cookie = qxl_cookie_new(QXL_COOKIE_TYPE_IO,
>> +                            QXL_IO_MONITORS_CONFIG_ASYNC);
>> +    cookie->u.data = config;
>> +
>> +    spice_qxl_monitors_config_async(&ssd->qxl,
>> +                                    (uintptr_t)config,
>> +                                    MEMSLOT_GROUP_HOST,
>> +                                    (uintptr_t)cookie);
>> +}
>> +
>>  static void qemu_spice_gl_block(SimpleSpiceDisplay *ssd, bool block)
>>  {
>>      uint64_t timeout;
>> @@ -934,6 +962,8 @@ static void qemu_spice_gl_scanout(DisplayChangeListener *dcl,
>>                           surface_width(ssd->ds),
>>                           surface_height(ssd->ds),
>>                           stride, fourcc, y_0_top);
>> +
>> +    qemu_spice_gl_monitor_config(ssd, x, y, w, h);
>>  }
>>
>>  static void qemu_spice_gl_update(DisplayChangeListener *dcl,
>> --
>> 1.8.3.1
>>
>
>
>
> --
> Marc-André Lureau



-- 
Marc-André Lureau


More information about the Spice-devel mailing list