diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2010-06-24 11:26:11 +0200 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2010-06-29 12:30:20 +0200 |
commit | fada35a173996ff24aa081112d37cfa7292cabe3 (patch) | |
tree | 640b7566c59614ce65166d62a64d97cce3786743 /server | |
parent | b081ec4b0472b697862f996759e2e406a3af38f9 (diff) | |
download | spice-fada35a173996ff24aa081112d37cfa7292cabe3.tar.gz spice-fada35a173996ff24aa081112d37cfa7292cabe3.tar.xz spice-fada35a173996ff24aa081112d37cfa7292cabe3.zip |
qxl abi: parse QXLUpdateCmd.
Diffstat (limited to 'server')
-rw-r--r-- | server/red_parse_qxl.c | 18 | ||||
-rw-r--r-- | server/red_parse_qxl.h | 11 | ||||
-rw-r--r-- | server/red_worker.c | 18 |
3 files changed, 38 insertions, 9 deletions
diff --git a/server/red_parse_qxl.c b/server/red_parse_qxl.c index 34308c34..f7de6cfe 100644 --- a/server/red_parse_qxl.c +++ b/server/red_parse_qxl.c @@ -312,3 +312,21 @@ void red_put_drawable(RedDrawable *red) { /* nothing yet */ } + +void red_get_update_cmd(RedMemSlotInfo *slots, int group_id, + RedUpdateCmd *red, SPICE_ADDRESS addr) +{ + QXLUpdateCmd *qxl; + + qxl = (QXLUpdateCmd *)get_virt(slots, addr, sizeof(*qxl), group_id); + red->release_info = &qxl->release_info; + + red->area = qxl->area; + red->update_id = qxl->update_id; + red->surface_id = qxl->surface_id; +} + +void red_put_update_cmd(RedUpdateCmd *red) +{ + /* nothing yet */ +} diff --git a/server/red_parse_qxl.h b/server/red_parse_qxl.h index 5737b550..bc2dd4e9 100644 --- a/server/red_parse_qxl.h +++ b/server/red_parse_qxl.h @@ -53,10 +53,21 @@ typedef struct SPICE_ATTR_PACKED RedDrawable { } u; } RedDrawable; +typedef struct SPICE_ATTR_PACKED RedUpdateCmd { + QXLReleaseInfo *release_info; + SpiceRect area; + uint32_t update_id; + uint32_t surface_id; +} RedUpdateCmd; + void red_get_drawable(RedMemSlotInfo *slots, int group_id, RedDrawable *red, SPICE_ADDRESS addr); void red_get_compat_drawable(RedMemSlotInfo *slots, int group_id, RedDrawable *red, SPICE_ADDRESS addr); void red_put_drawable(RedDrawable *red); +void red_get_update_cmd(RedMemSlotInfo *slots, int group_id, + RedUpdateCmd *red, SPICE_ADDRESS addr); +void red_put_update_cmd(RedUpdateCmd *red); + #endif diff --git a/server/red_worker.c b/server/red_worker.c index 72eba108..b90c3f98 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -5042,18 +5042,18 @@ static int red_process_commands(RedWorker *worker, uint32_t max_pipe_size) break; } case QXL_CMD_UPDATE: { - int surface_id; + RedUpdateCmd update; QXLReleaseInfoExt release_info_ext; - QXLUpdateCmd *draw_cmd = (QXLUpdateCmd *)get_virt(&worker->mem_slots, ext_cmd.cmd.data, - sizeof(QXLUpdateCmd), - ext_cmd.group_id); - surface_id = draw_cmd->surface_id; - validate_surface(worker, surface_id); - red_update_area(worker, &draw_cmd->area, draw_cmd->surface_id); - worker->qxl->st->qif->notify_update(worker->qxl, draw_cmd->update_id); + + red_get_update_cmd(&worker->mem_slots, ext_cmd.group_id, + &update, ext_cmd.cmd.data); + validate_surface(worker, update.surface_id); + red_update_area(worker, &update.area, update.surface_id); + worker->qxl->st->qif->notify_update(worker->qxl, update.update_id); release_info_ext.group_id = ext_cmd.group_id; - release_info_ext.info = &draw_cmd->release_info; + release_info_ext.info = update.release_info; worker->qxl->st->qif->release_resource(worker->qxl, release_info_ext); + red_put_update_cmd(&update); break; } case QXL_CMD_MESSAGE: { |