mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2025-12-30 09:46:50 +00:00
qxl abi: parse QXLUpdateCmd.
This commit is contained in:
parent
b081ec4b04
commit
fada35a173
@ -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 */
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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: {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user