Il giorno lun 23 gen 2023 alle ore 09:01 Vivek Kasireddy <vivek.kasireddy@xxxxxxxxx> ha scritto: > > This new parameter (named local_display) can be used by applications > to indicate whether they are dealing with a local or remote client. > This can be useful to ensure that gl_draw or other associated > messages are only sent to local clients. > It's spice server that knows if the client are local or remote, there's no need to have a configuration in Qemu. > Cc: Gerd Hoffmann <kraxel@xxxxxxxxxx> > Cc: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> > Cc: Dongwon Kim <dongwon.kim@xxxxxxxxx> > Signed-off-by: Vivek Kasireddy <vivek.kasireddy@xxxxxxxxx> > --- > server/red-qxl.cpp | 14 ++++++++++---- > server/spice-qxl.h | 4 ++-- > 2 files changed, 12 insertions(+), 6 deletions(-) > > diff --git a/server/red-qxl.cpp b/server/red-qxl.cpp > index 48c293ae..14380a60 100644 > --- a/server/red-qxl.cpp > +++ b/server/red-qxl.cpp > @@ -426,7 +426,8 @@ void spice_qxl_gl_scanout(QXLInstance *qxl, > int fd, > uint32_t width, uint32_t height, > uint32_t stride, uint32_t format, > - int y_0_top) > + int y_0_top, > + uint32_t local_display) > { > RedWorkerMessageGlScanout payload = { /* empty */ }; > spice_return_if_fail(qxl != nullptr); > @@ -452,7 +453,9 @@ void spice_qxl_gl_scanout(QXLInstance *qxl, > pthread_mutex_unlock(&qxl_state->scanout_mutex); > > /* FIXME: find a way to coallesce all pending SCANOUTs */ > - qxl_state->send_message(payload); > + if (local_display) { > + qxl_state->send_message(payload); > + } > reds_update_client_mouse_allowed(qxl_state->reds); > } > > @@ -460,7 +463,8 @@ SPICE_GNUC_VISIBLE > void spice_qxl_gl_draw_async(QXLInstance *qxl, > uint32_t x, uint32_t y, > uint32_t w, uint32_t h, > - uint64_t cookie) > + uint64_t cookie, > + uint32_t local_display) > { > QXLState *qxl_state; > RedWorkerMessageGlDraw draw = { > @@ -482,7 +486,9 @@ void spice_qxl_gl_draw_async(QXLInstance *qxl, > spice_return_if_fail(qxl_state->gl_draw_cookie == GL_DRAW_COOKIE_INVALID); > > qxl_state->gl_draw_cookie = cookie; > - qxl_state->send_message(draw); > + if (local_display) { > + qxl_state->send_message(draw); > + } > } > > void red_qxl_gl_draw_async_complete(QXLInstance *qxl) > diff --git a/server/spice-qxl.h b/server/spice-qxl.h > index bf17476b..2749f1c9 100644 > --- a/server/spice-qxl.h > +++ b/server/spice-qxl.h > @@ -87,11 +87,11 @@ void spice_qxl_gl_scanout(QXLInstance *qxl, > int fd, > uint32_t width, uint32_t height, > uint32_t stride, uint32_t format, > - int y_0_top); > + int y_0_top, uint32_t local_display); > void spice_qxl_gl_draw_async(QXLInstance *qxl, > uint32_t x, uint32_t y, > uint32_t w, uint32_t h, > - uint64_t cookie); > + uint64_t cookie, uint32_t local_display); > You cannot add a parameter, this will break both API and ABI. > /* since spice 0.14.2 */ > Frediano