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. 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); /* since spice 0.14.2 */ -- 2.37.2