summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/red_parse_qxl.c18
-rw-r--r--server/red_parse_qxl.h4
-rw-r--r--server/red_worker.c10
3 files changed, 18 insertions, 14 deletions
diff --git a/server/red_parse_qxl.c b/server/red_parse_qxl.c
index e0eba20f..adeadd63 100644
--- a/server/red_parse_qxl.c
+++ b/server/red_parse_qxl.c
@@ -734,8 +734,8 @@ static void red_put_clip(SpiceClip *red)
}
}
-void red_get_drawable(RedMemSlotInfo *slots, int group_id,
- RedDrawable *red, QXLPHYSICAL addr)
+static void red_get_native_drawable(RedMemSlotInfo *slots, int group_id,
+ RedDrawable *red, QXLPHYSICAL addr, uint32_t flags)
{
QXLDrawable *qxl;
int i;
@@ -807,8 +807,8 @@ void red_get_drawable(RedMemSlotInfo *slots, int group_id,
};
}
-void red_get_compat_drawable(RedMemSlotInfo *slots, int group_id,
- RedDrawable *red, QXLPHYSICAL addr)
+static void red_get_compat_drawable(RedMemSlotInfo *slots, int group_id,
+ RedDrawable *red, QXLPHYSICAL addr, uint32_t flags)
{
QXLCompatDrawable *qxl;
@@ -885,6 +885,16 @@ void red_get_compat_drawable(RedMemSlotInfo *slots, int group_id,
};
}
+void red_get_drawable(RedMemSlotInfo *slots, int group_id,
+ RedDrawable *red, QXLPHYSICAL addr, uint32_t flags)
+{
+ if (flags & QXL_COMMAND_FLAG_COMPAT) {
+ red_get_compat_drawable(slots, group_id, red, addr, flags);
+ } else {
+ red_get_native_drawable(slots, group_id, red, addr, flags);
+ }
+}
+
void red_put_drawable(RedDrawable *red)
{
red_put_clip(&red->clip);
diff --git a/server/red_parse_qxl.h b/server/red_parse_qxl.h
index 1d972496..5de03256 100644
--- a/server/red_parse_qxl.h
+++ b/server/red_parse_qxl.h
@@ -113,9 +113,7 @@ typedef struct RedCursorCmd {
void red_get_rect_ptr(SpiceRect *red, QXLRect *qxl);
void red_get_drawable(RedMemSlotInfo *slots, int group_id,
- RedDrawable *red, QXLPHYSICAL addr);
-void red_get_compat_drawable(RedMemSlotInfo *slots, int group_id,
- RedDrawable *red, QXLPHYSICAL addr);
+ RedDrawable *red, QXLPHYSICAL addr, uint32_t flags);
void red_put_drawable(RedDrawable *red);
void red_put_image(SpiceImage *red);
diff --git a/server/red_worker.c b/server/red_worker.c
index 74d26fec..f4e6f7cc 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -4350,13 +4350,9 @@ static int red_process_commands(RedWorker *worker, uint32_t max_pipe_size, int *
switch (ext_cmd.cmd.type) {
case QXL_CMD_DRAW: {
RedDrawable *drawable = spice_new0(RedDrawable, 1);
- if (ext_cmd.flags & QXL_COMMAND_FLAG_COMPAT) {
- red_get_compat_drawable(&worker->mem_slots, ext_cmd.group_id,
- drawable, ext_cmd.cmd.data);
- } else {
- red_get_drawable(&worker->mem_slots, ext_cmd.group_id,
- drawable, ext_cmd.cmd.data);
- }
+
+ red_get_drawable(&worker->mem_slots, ext_cmd.group_id,
+ drawable, ext_cmd.cmd.data, ext_cmd.flags);
red_process_drawable(worker, drawable, ext_cmd.group_id);
break;
}