summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2010-06-24 16:12:17 +0200
committerGerd Hoffmann <kraxel@redhat.com>2010-06-24 16:12:17 +0200
commitc2f8301e19b4fd656be81dd9ee99cd3073858da9 (patch)
treea7dbfcb7fd06e562e44b27151964a040610287f2
parent52a9a6d80b06400c002cb486f3c6ed19b43e0b99 (diff)
qxl abi: parse QXLRect.qxl-abi.easy
-rw-r--r--server/red_dispatcher.c15
-rw-r--r--server/red_parse_qxl.c34
-rw-r--r--server/red_parse_qxl.h2
-rw-r--r--server/spice.h6
4 files changed, 39 insertions, 18 deletions
diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c
index 4368cf6..4e2fcc8 100644
--- a/server/red_dispatcher.c
+++ b/server/red_dispatcher.c
@@ -32,6 +32,7 @@
#include "gl_canvas.h"
#include "reds.h"
#include "red_dispatcher.h"
+#include "red_parse_qxl.h"
static int num_active_workers = 0;
@@ -200,11 +201,16 @@ static void update_client_mouse_allowed()
}
static void qxl_worker_update_area(QXLWorker *qxl_worker, uint32_t surface_id,
- SpiceRect *area, SpiceRect *dirty_rects,
+ QXLRect *qxl_area, QXLRect *qxl_dirty_rects,
uint32_t num_dirty_rects, uint32_t clear_dirty_region)
{
RedDispatcher *dispatcher = (RedDispatcher *)qxl_worker;
RedWorkerMessage message = RED_WORKER_MESSAGE_UPDATE;
+ SpiceRect *dirty_rects = spice_new0(SpiceRect, num_dirty_rects);
+ SpiceRect *area = spice_new0(SpiceRect, 1);
+ int i;
+
+ red_get_rect_ptr(area, qxl_area);
write_message(dispatcher->channel, &message);
send_data(dispatcher->channel, &surface_id, sizeof(uint32_t));
@@ -214,6 +220,13 @@ static void qxl_worker_update_area(QXLWorker *qxl_worker, uint32_t surface_id,
send_data(dispatcher->channel, &clear_dirty_region, sizeof(uint32_t));
read_message(dispatcher->channel, &message);
ASSERT(message == RED_WORKER_MESSAGE_READY);
+
+ for (i = 0; i < num_dirty_rects; i++) {
+ qxl_dirty_rects[i].top = dirty_rects[i].top;
+ qxl_dirty_rects[i].left = dirty_rects[i].left;
+ qxl_dirty_rects[i].bottom = dirty_rects[i].bottom;
+ qxl_dirty_rects[i].right = dirty_rects[i].right;
+ }
}
static void qxl_worker_add_memslot(QXLWorker *qxl_worker, QXLDevMemSlot *mem_slot)
diff --git a/server/red_parse_qxl.c b/server/red_parse_qxl.c
index b5362f4..c5a8f56 100644
--- a/server/red_parse_qxl.c
+++ b/server/red_parse_qxl.c
@@ -32,6 +32,14 @@ static void red_get_point16_ptr(SpicePoint16 *red, QXLPoint16 *qxl)
red->y = qxl->y;
}
+void red_get_rect_ptr(SpiceRect *red, QXLRect *qxl)
+{
+ red->top = qxl->top;
+ red->left = qxl->left;
+ red->bottom = qxl->bottom;
+ red->right = qxl->right;
+}
+
static void red_get_brush_ptr(RedMemSlotInfo *slots, int group_id,
SpiceBrush *red, QXLBrush *qxl)
{
@@ -67,7 +75,7 @@ static void red_get_opaque_ptr(RedMemSlotInfo *slots, int group_id,
SpiceOpaque *red, QXLOpaque *qxl)
{
red->src_bitmap = qxl->src_bitmap;
- red->src_area = qxl->src_area;
+ red_get_rect_ptr(&red->src_area, &qxl->src_area);
red_get_brush_ptr(slots, group_id, &red->brush, &qxl->brush);
red->rop_descriptor = qxl->rop_descriptor;
red->scale_mode = qxl->scale_mode;
@@ -78,7 +86,7 @@ static void red_get_copy_ptr(RedMemSlotInfo *slots, int group_id,
SpiceCopy *red, QXLCopy *qxl)
{
red->src_bitmap = qxl->src_bitmap;
- red->src_area = qxl->src_area;
+ red_get_rect_ptr(&red->src_area, &qxl->src_area);
red->rop_descriptor = qxl->rop_descriptor;
red->scale_mode = qxl->scale_mode;
red_get_qmask_ptr(slots, group_id, &red->mask, &qxl->mask);
@@ -88,7 +96,7 @@ static void red_get_blend_ptr(RedMemSlotInfo *slots, int group_id,
SpiceBlend *red, QXLBlend *qxl)
{
red->src_bitmap = qxl->src_bitmap;
- red->src_area = qxl->src_area;
+ red_get_rect_ptr(&red->src_area, &qxl->src_area);
red->rop_descriptor = qxl->rop_descriptor;
red->scale_mode = qxl->scale_mode;
red_get_qmask_ptr(slots, group_id, &red->mask, &qxl->mask);
@@ -98,7 +106,7 @@ static void red_get_transparent_ptr(RedMemSlotInfo *slots, int group_id,
SpiceTransparent *red, QXLTransparent *qxl)
{
red->src_bitmap = qxl->src_bitmap;
- red->src_area = qxl->src_area;
+ red_get_rect_ptr(&red->src_area, &qxl->src_area);
red->src_color = qxl->src_color;
red->true_color = qxl->true_color;
}
@@ -109,7 +117,7 @@ static void red_get_alpha_blend_ptr(RedMemSlotInfo *slots, int group_id,
red->alpha_flags = qxl->alpha_flags;
red->alpha = qxl->alpha;
red->src_bitmap = qxl->src_bitmap;
- red->src_area = qxl->src_area;
+ red_get_rect_ptr(&red->src_area, &qxl->src_area);
}
static void red_get_alpha_blend_ptr_compat(RedMemSlotInfo *slots, int group_id,
@@ -117,14 +125,14 @@ static void red_get_alpha_blend_ptr_compat(RedMemSlotInfo *slots, int group_id,
{
red->alpha = qxl->alpha;
red->src_bitmap = qxl->src_bitmap;
- red->src_area = qxl->src_area;
+ red_get_rect_ptr(&red->src_area, &qxl->src_area);
}
static void red_get_rop3_ptr(RedMemSlotInfo *slots, int group_id,
SpiceRop3 *red, QXLRop3 *qxl)
{
red->src_bitmap = qxl->src_bitmap;
- red->src_area = qxl->src_area;
+ red_get_rect_ptr(&red->src_area, &qxl->src_area);
red_get_brush_ptr(slots, group_id, &red->brush, &qxl->brush);
red->rop3 = qxl->rop3;
red->scale_mode = qxl->scale_mode;
@@ -151,7 +159,7 @@ static void red_get_text_ptr(RedMemSlotInfo *slots, int group_id,
SpiceText *red, QXLText *qxl)
{
red->str = qxl->str;
- red->back_area = qxl->back_area;
+ red_get_rect_ptr(&red->back_area, &qxl->back_area);
red_get_brush_ptr(slots, group_id, &red->fore_brush, &qxl->fore_brush);
red_get_brush_ptr(slots, group_id, &red->back_brush, &qxl->back_brush);
red->fore_mode = qxl->fore_mode;
@@ -192,17 +200,17 @@ void red_get_drawable(RedMemSlotInfo *slots, int group_id,
qxl = (QXLDrawable *)get_virt(slots, addr, sizeof(*qxl), group_id);
red->release_info = &qxl->release_info;
- red->bbox = qxl->bbox;
+ red_get_rect_ptr(&red->bbox, &qxl->bbox);
red_get_clip_ptr(slots, group_id, &red->clip, &qxl->clip);
red->effect = qxl->effect;
red->mm_time = qxl->mm_time;
red->self_bitmap = qxl->self_bitmap;
- red->self_bitmap_area = qxl->self_bitmap_area;
+ red_get_rect_ptr(&red->self_bitmap_area, &qxl->self_bitmap_area);
red->surface_id = qxl->surface_id;
for (i = 0; i < 3; i++) {
red->surfaces_dest[i] = qxl->surfaces_dest[i];
- red->surfaces_rects[i] = qxl->surfaces_rects[i];
+ red_get_rect_ptr(&red->surfaces_rects[i], &qxl->surfaces_rects[i]);
}
red->type = qxl->type;
@@ -264,7 +272,7 @@ void red_get_compat_drawable(RedMemSlotInfo *slots, int group_id,
qxl = (QXLCompatDrawable *)get_virt(slots, addr, sizeof(*qxl), group_id);
red->release_info = &qxl->release_info;
- red->bbox = qxl->bbox;
+ red_get_rect_ptr(&red->bbox, &qxl->bbox);
red_get_clip_ptr(slots, group_id, &red->clip, &qxl->clip);
red->effect = qxl->effect;
red->mm_time = qxl->mm_time;
@@ -333,7 +341,7 @@ void red_get_update_cmd(RedMemSlotInfo *slots, int group_id,
qxl = (QXLUpdateCmd *)get_virt(slots, addr, sizeof(*qxl), group_id);
red->release_info = &qxl->release_info;
- red->area = qxl->area;
+ red_get_rect_ptr(&red->area, &qxl->area);
red->update_id = qxl->update_id;
red->surface_id = qxl->surface_id;
}
diff --git a/server/red_parse_qxl.h b/server/red_parse_qxl.h
index b96a393..aece6a9 100644
--- a/server/red_parse_qxl.h
+++ b/server/red_parse_qxl.h
@@ -103,6 +103,8 @@ typedef struct SPICE_ATTR_PACKED RedCursorCmd {
uint8_t *device_data;
} RedCursorCmd;
+void red_get_rect_ptr(SpiceRect *red, QXLRect *qxl);
+
void red_get_drawable(RedMemSlotInfo *slots, int group_id,
RedDrawable *red, SPICE_ADDRESS addr);
void red_get_compat_drawable(RedMemSlotInfo *slots, int group_id,
diff --git a/server/spice.h b/server/spice.h
index 6c5853d..07bbeef 100644
--- a/server/spice.h
+++ b/server/spice.h
@@ -81,7 +81,7 @@ union QXLReleaseInfo;
struct QXLReleaseInfoExt;
struct QXLCommand;
struct QXLCommandExt;
-struct SpiceRect;
+struct QXLRect;
struct QXLWorker {
uint32_t minor_version;
uint32_t major_version;
@@ -90,7 +90,7 @@ struct QXLWorker {
void (*start)(QXLWorker *worker);
void (*stop)(QXLWorker *worker);
void (*update_area)(QXLWorker *qxl_worker, uint32_t surface_id,
- struct SpiceRect *area, struct SpiceRect *dirty_rects,
+ struct QXLRect *area, struct QXLRect *dirty_rects,
uint32_t num_dirty_rects, uint32_t clear_dirty_region);
void (*add_memslot)(QXLWorker *worker, QXLDevMemSlot *slot);
void (*del_memslot)(QXLWorker *worker, uint32_t slot_group_id, uint32_t slot_id);
@@ -158,8 +158,6 @@ struct QXLDevSurfaceCreate {
uint32_t group_id;
};
-struct SpiceRect;
-
struct QXLInterface {
SpiceBaseInterface base;