Add group_id to RedDrawable

Storing a QXLReleaseInfoExt rather than a QXLReleaseInfo in RedDrawable
gives us a place to store group_id for free. Since we are building a
QXLReleaseInfoExt from QXLReleaseInfo and group_id when destroying a
RedDrawable instance, this is a move in the right direction.

Acked-by: Frediano Ziglio <fziglio@redhat.com>
This commit is contained in:
Christophe Fergeau 2016-02-12 18:51:03 +01:00 committed by Frediano Ziglio
parent 7b3bdbfdda
commit 650ef63782
3 changed files with 7 additions and 8 deletions

View File

@ -1027,7 +1027,8 @@ static int red_get_native_drawable(RedMemSlotInfo *slots, int group_id,
if (error) {
return error;
}
red->release_info = &qxl->release_info;
red->release_info_ext.info = &qxl->release_info;
red->release_info_ext.group_id = group_id;
red_get_rect_ptr(&red->bbox, &qxl->bbox);
red_get_clip_ptr(slots, group_id, &red->clip, &qxl->clip);
@ -1110,7 +1111,8 @@ static int red_get_compat_drawable(RedMemSlotInfo *slots, int group_id,
if (error) {
return error;
}
red->release_info = &qxl->release_info;
red->release_info_ext.info = &qxl->release_info;
red->release_info_ext.group_id = group_id;
red_get_rect_ptr(&red->bbox, &qxl->bbox);
red_get_clip_ptr(slots, group_id, &red->clip, &qxl->clip);

View File

@ -26,7 +26,7 @@
typedef struct RedDrawable {
int refs;
QXLInstance *qxl;
QXLReleaseInfo *release_info;
QXLReleaseInfoExt release_info_ext;
uint32_t surface_id;
uint8_t effect;
uint8_t type;

View File

@ -132,14 +132,11 @@ static void common_release_recv_buf(RedChannelClient *rcc, uint16_t type, uint32
void red_drawable_unref(DisplayChannel *display, RedDrawable *red_drawable,
uint32_t group_id)
{
QXLReleaseInfoExt release_info_ext;
if (--red_drawable->refs) {
return;
}
release_info_ext.group_id = group_id;
release_info_ext.info = red_drawable->release_info;
red_drawable->qxl->st->qif->release_resource(red_drawable->qxl, release_info_ext);
red_drawable->qxl->st->qif->release_resource(red_drawable->qxl,
red_drawable->release_info_ext);
red_put_drawable(red_drawable);
free(red_drawable);
}