[Spice-devel] [PATCH 1/6] qxl abi: parse QXLDrawable.
Gerd Hoffmann
kraxel at redhat.com
Wed Jun 23 04:03:42 PDT 2010
---
server/Makefile.am | 2 +
server/red_parse_qxl.c | 88 +++++++++++++
server/red_parse_qxl.h | 60 +++++++++
server/red_worker.c | 325 ++++++++++++++++++++++++------------------------
4 files changed, 314 insertions(+), 161 deletions(-)
create mode 100644 server/red_parse_qxl.c
create mode 100644 server/red_parse_qxl.h
diff --git a/server/Makefile.am b/server/Makefile.am
index f87e3f4..b629cc4 100644
--- a/server/Makefile.am
+++ b/server/Makefile.am
@@ -92,6 +92,8 @@ libspice_server_la_SOURCES = \
red_dispatcher.h \
red_memslots.c \
red_memslots.h \
+ red_parse_qxl.c \
+ red_parse_qxl.h \
reds.c \
reds.h \
stat.h \
diff --git a/server/red_parse_qxl.c b/server/red_parse_qxl.c
new file mode 100644
index 0000000..b22cb83
--- /dev/null
+++ b/server/red_parse_qxl.c
@@ -0,0 +1,88 @@
+/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/*
+ Copyright (C) 2009,2010 Red Hat, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "red_common.h"
+#include "red_memslots.h"
+#include "red_parse_qxl.h"
+
+void red_get_drawable(RedMemSlotInfo *slots, int group_id,
+ RedDrawable *red, SPICE_ADDRESS addr)
+{
+ QXLDrawable *qxl;
+ int i;
+
+ qxl = (QXLDrawable *)get_virt(slots, addr, sizeof(*qxl), group_id);
+ red->release_info = &qxl->release_info;
+
+ red->bbox = qxl->bbox;
+ 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->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->type = qxl->type;
+ switch (red->type) {
+ case QXL_DRAW_ALPHA_BLEND:
+ red->u.alpha_blend = qxl->u.alpha_blend;
+ break;
+ case QXL_DRAW_BLACKNESS:
+ red->u.blackness = qxl->u.blackness;
+ break;
+ case QXL_DRAW_BLEND:
+ red->u.blend = qxl->u.blend;
+ break;
+ case QXL_DRAW_COPY:
+ red->u.copy = qxl->u.copy;
+ break;
+ case QXL_DRAW_FILL:
+ red->u.fill = qxl->u.fill;
+ break;
+ case QXL_DRAW_INVERS:
+ red->u.invers = qxl->u.invers;
+ break;
+ case QXL_DRAW_NOP:
+ break;
+ case QXL_DRAW_ROP3:
+ red->u.rop3 = qxl->u.rop3;
+ break;
+ case QXL_DRAW_STROKE:
+ red->u.stroke = qxl->u.stroke;
+ break;
+ case QXL_DRAW_TEXT:
+ red->u.text = qxl->u.text;
+ break;
+ case QXL_DRAW_TRANSPARENT:
+ red->u.transparent = qxl->u.transparent;
+ break;
+ case QXL_DRAW_WHITENESS:
+ red->u.whiteness = qxl->u.whiteness;
+ break;
+ };
+}
+
+void red_put_drawable(RedDrawable *red)
+{
+ /* nothing yet */
+}
diff --git a/server/red_parse_qxl.h b/server/red_parse_qxl.h
new file mode 100644
index 0000000..d8955d2
--- /dev/null
+++ b/server/red_parse_qxl.h
@@ -0,0 +1,60 @@
+/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
+/*
+ Copyright (C) 2009,2010 Red Hat, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef RED_ABI_TRANSLATE_H
+#define RED_ABI_TRANSLATE_H
+
+#include <spice/qxl_dev.h>
+#include <spice/start-packed.h>
+#include "red_common.h"
+#include "red_memslots.h"
+
+typedef struct SPICE_ATTR_PACKED RedDrawable {
+ QXLReleaseInfo *release_info;
+ uint32_t surface_id;
+ uint8_t effect;
+ uint8_t type;
+ uint8_t self_bitmap;
+ SpiceRect self_bitmap_area;
+ SpiceRect bbox;
+ SpiceClip clip;
+ uint32_t mm_time;
+ int32_t surfaces_dest[3];
+ SpiceRect surfaces_rects[3];
+ union {
+ SpiceFill fill;
+ SpiceOpaque opaque;
+ SpiceCopy copy;
+ SpiceTransparent transparent;
+ SpiceAlphaBlnd alpha_blend;
+ QXLCopyBits copy_bits;
+ SpiceBlend blend;
+ SpiceRop3 rop3;
+ SpiceStroke stroke;
+ SpiceText text;
+ SpiceBlackness blackness;
+ SpiceInvers invers;
+ SpiceWhiteness whiteness;
+ } u;
+} RedDrawable;
+
+void red_get_drawable(RedMemSlotInfo *slots, int group_id,
+ RedDrawable *red, SPICE_ADDRESS addr);
+void red_put_drawable(RedDrawable *red);
+
+#endif
diff --git a/server/red_worker.c b/server/red_worker.c
index b9ada15..3cea558 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -48,6 +48,7 @@
#include "ring.h"
#include "mjpeg_encoder.h"
#include "red_memslots.h"
+#include "red_parse_qxl.h"
#include "jpeg_encoder.h"
#include "rect.h"
#include "marshaller.h"
@@ -621,7 +622,7 @@ typedef struct GlzDrawableInstanceItem {
struct RedGlzDrawable {
RingItem link; // ordered by the time it was encoded
RingItem surface_link;
- QXLDrawable *qxl_drawable;
+ RedDrawable *red_drawable;
Drawable *drawable;
uint32_t group_id;
int32_t surface_id;
@@ -805,7 +806,7 @@ struct Drawable {
#ifdef UPDATE_AREA_BY_TREE
RingItem collect_link;
#endif
- QXLDrawable *qxl_drawable;
+ RedDrawable *red_drawable;
RedGlzDrawable *red_glz_drawable;
@@ -1195,7 +1196,7 @@ char *draw_type_to_str(uint8_t type)
}
}
-static void show_qxl_drawable(RedWorker *worker, QXLDrawable *drawable, const char *prefix)
+static void show_red_drawable(RedWorker *worker, RedDrawable *drawable, const char *prefix)
{
if (prefix) {
printf("%s: ", prefix);
@@ -1602,7 +1603,7 @@ static inline void set_surface_release_info(RedWorker *worker, uint32_t surface_
}
}
-static inline void free_qxl_drawable(RedWorker *worker, QXLDrawable *drawable, uint32_t group_id,
+static inline void free_red_drawable(RedWorker *worker, RedDrawable *drawable, uint32_t group_id,
uint8_t *self_bitmap, int surface_id)
{
QXLReleaseInfoExt release_info_ext;
@@ -1612,8 +1613,9 @@ static inline void free_qxl_drawable(RedWorker *worker, QXLDrawable *drawable, u
free(self_bitmap);
}
release_info_ext.group_id = group_id;
- release_info_ext.info = &drawable->release_info;
+ release_info_ext.info = drawable->release_info;
worker->qxl->st->qif->release_resource(worker->qxl, release_info_ext);
+ red_put_drawable(drawable);
}
static void remove_depended_item(DependItem *item)
@@ -1670,7 +1672,7 @@ static inline void release_drawable(RedWorker *worker, Drawable *item)
if (item->red_glz_drawable) {
item->red_glz_drawable->drawable = NULL;
} else { // no reference to the qxl drawable left
- free_qxl_drawable(worker, item->qxl_drawable, item->group_id, item->self_bitmap,
+ free_red_drawable(worker, item->red_drawable, item->group_id, item->self_bitmap,
item->surface_id);
}
free_drawable(worker, item);
@@ -1731,10 +1733,10 @@ static inline void red_add_item_trace(RedWorker *worker, Drawable *item)
trace->frames_count = item->frames_count;
trace->gradual_frames_count = item->gradual_frames_count;
trace->last_gradual_frame = item->last_gradual_frame;
- SpiceRect* src_area = &item->qxl_drawable->u.copy.src_area;
+ SpiceRect* src_area = &item->red_drawable->u.copy.src_area;
trace->width = src_area->right - src_area->left;
trace->height = src_area->bottom - src_area->top;
- trace->dest_area = item->qxl_drawable->bbox;
+ trace->dest_area = item->red_drawable->bbox;
}
#endif
@@ -1753,7 +1755,7 @@ static void red_flush_source_surfaces(RedWorker *worker, Drawable *drawable)
surface_id = drawable->surfaces_dest[x];
if (surface_id != -1 && drawable->depend_items[x].drawable) {
remove_depended_item(&drawable->depend_items[x]);
- surface_flush(worker, surface_id, &drawable->qxl_drawable->surfaces_rects[x]);
+ surface_flush(worker, surface_id, &drawable->red_drawable->surfaces_rects[x]);
}
}
}
@@ -2366,19 +2368,19 @@ static int is_equal_line_attr(SpiceLineAttr *a1, SpiceLineAttr *a2)
// partial imp
static int is_same_geometry(RedWorker *worker, Drawable *d1, Drawable *d2)
{
- if (d1->qxl_drawable->type != d2->qxl_drawable->type) {
+ if (d1->red_drawable->type != d2->red_drawable->type) {
return FALSE;
}
- switch (d1->qxl_drawable->type) {
+ switch (d1->red_drawable->type) {
case QXL_DRAW_STROKE:
- return is_equal_line_attr(&d1->qxl_drawable->u.stroke.attr,
- &d2->qxl_drawable->u.stroke.attr) &&
- is_equal_path(worker, d1->qxl_drawable->u.stroke.path,
- d2->qxl_drawable->u.stroke.path, d1->group_id,
+ return is_equal_line_attr(&d1->red_drawable->u.stroke.attr,
+ &d2->red_drawable->u.stroke.attr) &&
+ is_equal_path(worker, d1->red_drawable->u.stroke.path,
+ d2->red_drawable->u.stroke.path, d1->group_id,
d2->group_id);
case QXL_DRAW_FILL:
- return rect_is_equal(&d1->qxl_drawable->bbox, &d2->qxl_drawable->bbox);
+ return rect_is_equal(&d1->red_drawable->bbox, &d2->red_drawable->bbox);
default:
return FALSE;
}
@@ -2390,11 +2392,11 @@ static int is_same_drawable(RedWorker *worker, Drawable *d1, Drawable *d2)
return FALSE;
}
- switch (d1->qxl_drawable->type) {
+ switch (d1->red_drawable->type) {
case QXL_DRAW_STROKE:
- return is_equal_brush(&d1->qxl_drawable->u.stroke.brush, &d2->qxl_drawable->u.stroke.brush);
+ return is_equal_brush(&d1->red_drawable->u.stroke.brush, &d2->red_drawable->u.stroke.brush);
case QXL_DRAW_FILL:
- return is_equal_brush(&d1->qxl_drawable->u.fill.brush, &d2->qxl_drawable->u.fill.brush);
+ return is_equal_brush(&d1->red_drawable->u.fill.brush, &d2->red_drawable->u.fill.brush);
default:
return FALSE;
}
@@ -2449,7 +2451,7 @@ static void push_stream_clip_by_drawable(DisplayChannel* channel, StreamAgent *a
PANIC("alloc failed");
}
- if (drawable->qxl_drawable->clip.type == SPICE_CLIP_TYPE_NONE) {
+ if (drawable->red_drawable->clip.type == SPICE_CLIP_TYPE_NONE) {
item->n_rects = 0;
item->rects = NULL;
item->clip_type = SPICE_CLIP_TYPE_NONE;
@@ -2769,8 +2771,8 @@ static void red_create_stream(RedWorker *worker, Drawable *drawable)
return;
}
- ASSERT(drawable->qxl_drawable->type == QXL_DRAW_COPY);
- src_rect = &drawable->qxl_drawable->u.copy.src_area;
+ ASSERT(drawable->red_drawable->type == QXL_DRAW_COPY);
+ src_rect = &drawable->red_drawable->u.copy.src_area;
stream_width = SPICE_ALIGN(src_rect->right - src_rect->left, 2);
stream_height = SPICE_ALIGN(src_rect->bottom - src_rect->top, 2);
@@ -2782,11 +2784,11 @@ static void red_create_stream(RedWorker *worker, Drawable *drawable)
stream->last_time = drawable->creation_time;
stream->width = src_rect->right - src_rect->left;
stream->height = src_rect->bottom - src_rect->top;
- stream->dest_area = drawable->qxl_drawable->bbox;
+ stream->dest_area = drawable->red_drawable->bbox;
#endif
stream->refs = 1;
stream->bit_rate = get_bit_rate(stream_width, stream_height);
- QXLImage *qxl_image = (QXLImage *)get_virt(&worker->mem_slots, drawable->qxl_drawable->u.copy.src_bitmap,
+ QXLImage *qxl_image = (QXLImage *)get_virt(&worker->mem_slots, drawable->red_drawable->u.copy.src_bitmap,
sizeof(QXLImage), drawable->group_id);
stream->top_down = !!(qxl_image->bitmap.flags & SPICE_BITMAP_FLAGS_TOP_DOWN);
drawable->stream = stream;
@@ -2853,27 +2855,27 @@ static inline int __red_is_next_stream_frame(RedWorker *worker,
const red_time_t other_time,
const Stream *stream)
{
- QXLDrawable *qxl_drawable;
+ RedDrawable *red_drawable;
if (candidate->creation_time - other_time >
(stream ? RED_STREAM_CONTINUS_MAX_DELTA : RED_STREAM_DETACTION_MAX_DELTA)) {
return FALSE;
}
- qxl_drawable = candidate->qxl_drawable;
+ red_drawable = candidate->red_drawable;
- if (!rect_is_equal(&qxl_drawable->bbox, other_dest)) {
+ if (!rect_is_equal(&red_drawable->bbox, other_dest)) {
return FALSE;
}
- SpiceRect* candidate_src = &qxl_drawable->u.copy.src_area;
+ SpiceRect* candidate_src = &red_drawable->u.copy.src_area;
if (candidate_src->right - candidate_src->left != other_src_width ||
candidate_src->bottom - candidate_src->top != other_src_height) {
return FALSE;
}
if (stream) {
- QXLImage *qxl_image = (QXLImage *)get_virt(&worker->mem_slots, qxl_drawable->u.copy.src_bitmap,
+ QXLImage *qxl_image = (QXLImage *)get_virt(&worker->mem_slots, red_drawable->u.copy.src_bitmap,
sizeof(QXLImage), candidate->group_id);
if (stream->top_down != !!(qxl_image->bitmap.flags & SPICE_BITMAP_FLAGS_TOP_DOWN)) {
return FALSE;
@@ -2889,10 +2891,10 @@ static inline int red_is_next_stream_frame(RedWorker *worker, const Drawable *ca
return FALSE;
}
- SpiceRect* prev_src = &prev->qxl_drawable->u.copy.src_area;
+ SpiceRect* prev_src = &prev->red_drawable->u.copy.src_area;
return __red_is_next_stream_frame(worker, candidate, prev_src->right - prev_src->left,
prev_src->bottom - prev_src->top,
- &prev->qxl_drawable->bbox, prev->creation_time,
+ &prev->red_drawable->bbox, prev->creation_time,
prev->stream);
}
@@ -2901,16 +2903,16 @@ static inline int red_is_next_stream_frame(RedWorker *worker, const Drawable *ca
static inline int red_is_next_stream_frame(RedWorker *worker, Drawable *candidate, Drawable *prev)
{
QXLImage *qxl_image;
- QXLDrawable *qxl_drawable;
- QXLDrawable *prev_qxl_drawable;
+ RedDrawable *red_drawable;
+ RedDrawable *prev_red_drawable;
if (candidate->creation_time - prev->creation_time >
((prev->stream) ? RED_STREAM_CONTINUS_MAX_DELTA : RED_STREAM_DETACTION_MAX_DELTA)) {
return FALSE;
}
- qxl_drawable = candidate->qxl_drawable;
- prev_qxl_drawable = prev->qxl_drawable;
+ qxl_drawable = candidate->red_drawable;
+ prev_qxl_drawable = prev->red_drawable;
if (qxl_drawable->type != QXL_DRAW_COPY || prev_qxl_drawable->type != QXL_DRAW_COPY) {
return FALSE;
}
@@ -2995,7 +2997,7 @@ static inline void pre_stream_item_swap(RedWorker *worker, Stream *stream)
static inline void red_update_copy_graduality(RedWorker* worker, Drawable *drawable)
{
QXLImage *qxl_image;
- ASSERT(drawable->qxl_drawable->type == QXL_DRAW_COPY);
+ ASSERT(drawable->red_drawable->type == QXL_DRAW_COPY);
if (worker->streaming_video != STREAM_VIDEO_FILTER) {
drawable->copy_bitmap_graduality = BITMAP_GRADUAL_INVALID;
@@ -3006,7 +3008,7 @@ static inline void red_update_copy_graduality(RedWorker* worker, Drawable *drawa
return; // already set
}
- qxl_image = (QXLImage *)get_virt(&worker->mem_slots, drawable->qxl_drawable->u.copy.src_bitmap,
+ qxl_image = (QXLImage *)get_virt(&worker->mem_slots, drawable->red_drawable->u.copy.src_bitmap,
sizeof(QXLImage), drawable->group_id);
if (!BITMAP_FMT_IS_RGB[qxl_image->bitmap.format] || _stride_is_extra(&qxl_image->bitmap) ||
@@ -3530,14 +3532,14 @@ static inline int red_current_add_with_shadow(RedWorker *worker, Ring *ring, Dra
return TRUE;
}
-static inline int has_shadow(QXLDrawable *drawable)
+static inline int has_shadow(RedDrawable *drawable)
{
return drawable->type == QXL_COPY_BITS;
}
#ifdef STREAM_TRACE
static inline void red_update_streamable(RedWorker *worker, Drawable *drawable,
- QXLDrawable *qxl_drawable)
+ RedDrawable *red_drawable)
{
QXLImage *qxl_image;
@@ -3546,12 +3548,12 @@ static inline void red_update_streamable(RedWorker *worker, Drawable *drawable,
}
if (drawable->tree_item.effect != QXL_EFFECT_OPAQUE ||
- qxl_drawable->type != QXL_DRAW_COPY ||
- qxl_drawable->u.copy.rop_decriptor != SPICE_ROPD_OP_PUT) {
+ red_drawable->type != QXL_DRAW_COPY ||
+ red_drawable->u.copy.rop_decriptor != SPICE_ROPD_OP_PUT) {
return;
}
- qxl_image = (QXLImage *)get_virt(&worker->mem_slots, qxl_drawable->u.copy.src_bitmap, sizeof(QXLImage),
+ qxl_image = (QXLImage *)get_virt(&worker->mem_slots, red_drawable->u.copy.src_bitmap, sizeof(QXLImage),
drawable->group_id);
if (qxl_image->descriptor.type != SPICE_IMAGE_TYPE_BITMAP) {
return;
@@ -3561,7 +3563,7 @@ static inline void red_update_streamable(RedWorker *worker, Drawable *drawable,
SpiceRect* rect;
int size;
- rect = &drawable->qxl_drawable->u.copy.src_area;
+ rect = &drawable->red_drawable->u.copy.src_area;
size = (rect->right - rect->left) * (rect->bottom - rect->top);
if (size < RED_STREAM_MIN_SIZE) {
return;
@@ -3574,22 +3576,22 @@ static inline void red_update_streamable(RedWorker *worker, Drawable *drawable,
#endif
static inline int red_current_add_qxl(RedWorker *worker, Ring *ring, Drawable *drawable,
- QXLDrawable *qxl_drawable)
+ RedDrawable *red_drawable)
{
int ret;
- if (has_shadow(qxl_drawable)) {
+ if (has_shadow(red_drawable)) {
SpicePoint delta;
#ifdef RED_WORKER_STAT
++worker->add_with_shadow_count;
#endif
- delta.x = qxl_drawable->u.copy_bits.src_pos.x - qxl_drawable->bbox.left;
- delta.y = qxl_drawable->u.copy_bits.src_pos.y - qxl_drawable->bbox.top;
+ delta.x = red_drawable->u.copy_bits.src_pos.x - red_drawable->bbox.left;
+ delta.y = red_drawable->u.copy_bits.src_pos.y - red_drawable->bbox.top;
ret = red_current_add_with_shadow(worker, ring, drawable, &delta);
} else {
#ifdef STREAM_TRACE
- red_update_streamable(worker, drawable, qxl_drawable);
+ red_update_streamable(worker, drawable, red_drawable);
#endif
ret = red_current_add(worker, ring, drawable);
}
@@ -3689,7 +3691,7 @@ static inline int red_handle_self_bitmap(RedWorker *worker, Drawable *drawable)
int bpp;
int all_set;
- if (!drawable->qxl_drawable->self_bitmap) {
+ if (!drawable->red_drawable->self_bitmap) {
return TRUE;
}
@@ -3698,8 +3700,8 @@ static inline int red_handle_self_bitmap(RedWorker *worker, Drawable *drawable)
bpp = SPICE_SURFACE_FMT_DEPTH(surface->context.format) / 8;
- width = drawable->qxl_drawable->bbox.right - drawable->qxl_drawable->bbox.left;
- height = drawable->qxl_drawable->bbox.bottom - drawable->qxl_drawable->bbox.top;
+ width = drawable->red_drawable->bbox.right - drawable->red_drawable->bbox.left;
+ height = drawable->red_drawable->bbox.bottom - drawable->red_drawable->bbox.top;
dest_stride = SPICE_ALIGN(width * bpp, 4);
image = spice_malloc_n_m(height, dest_stride, sizeof(QXLImage));
@@ -3719,7 +3721,7 @@ static inline int red_handle_self_bitmap(RedWorker *worker, Drawable *drawable)
image->bitmap.palette = 0;
red_get_area(worker, drawable->surface_id,
- &drawable->qxl_drawable->self_bitmap_area, dest, dest_stride, TRUE);
+ &drawable->red_drawable->self_bitmap_area, dest, dest_stride, TRUE);
/* For 32bit non-primary surfaces we need to keep any non-zero
high bytes as the surface may be used as source to an alpha_blend */
@@ -3756,7 +3758,7 @@ static void free_one_drawable(RedWorker *worker, int force_glz_free)
container_cleanup(worker, container);
}
-static Drawable *get_drawable(RedWorker *worker, uint8_t effect, QXLDrawable *qxl_drawable,
+static Drawable *get_drawable(RedWorker *worker, uint8_t effect, RedDrawable *red_drawable,
uint32_t group_id) {
Drawable *drawable;
struct timespec time;
@@ -3782,13 +3784,13 @@ static Drawable *get_drawable(RedWorker *worker, uint8_t effect, QXLDrawable *qx
region_init(&drawable->tree_item.base.rgn);
drawable->tree_item.effect = effect;
red_pipe_item_init(&drawable->pipe_item, PIPE_ITEM_TYPE_DRAW);
- drawable->qxl_drawable = qxl_drawable;
+ drawable->red_drawable = red_drawable;
drawable->group_id = group_id;
- drawable->surface_id = qxl_drawable->surface_id;
+ drawable->surface_id = red_drawable->surface_id;
validate_surface(worker, drawable->surface_id);
for (x = 0; x < 3; ++x) {
- drawable->surfaces_dest[x] = qxl_drawable->surfaces_dest[x];
+ drawable->surfaces_dest[x] = red_drawable->surfaces_dest[x];
if (drawable->surfaces_dest[x] != -1) {
validate_surface(worker, drawable->surfaces_dest[x]);
}
@@ -3808,7 +3810,7 @@ static inline int red_handle_depends_on_target_surface(RedWorker *worker, uint32
Drawable *drawable;
DependItem *depended_item = SPICE_CONTAINEROF(ring_item, DependItem, ring_item);
drawable = depended_item->drawable;
- surface_flush(worker, drawable->surface_id, &drawable->qxl_drawable->bbox);
+ surface_flush(worker, drawable->surface_id, &drawable->red_drawable->bbox);
}
return TRUE;
@@ -3862,7 +3864,7 @@ static inline void red_inc_surfaces_drawable_dependencies(RedWorker *worker, Dra
}
}
-static inline void red_process_drawable(RedWorker *worker, QXLDrawable *drawable, uint32_t group_id)
+static inline void red_process_drawable(RedWorker *worker, RedDrawable *drawable, uint32_t group_id)
{
int surface_id;
Drawable *item = get_drawable(worker, drawable->effect, drawable, group_id);
@@ -4448,7 +4450,7 @@ static void red_draw_qxl_drawable(RedWorker *worker, Drawable *drawable)
{
RedSurface *surface;
SpiceCanvas *canvas;
- SpiceClip clip = drawable->qxl_drawable->clip;
+ SpiceClip clip = drawable->red_drawable->clip;
surface = &worker->surfaces[drawable->surface_id];
canvas = surface->context.canvas;
@@ -4458,124 +4460,124 @@ static void red_draw_qxl_drawable(RedWorker *worker, Drawable *drawable)
worker->preload_group_id = drawable->group_id;
- region_add(&surface->draw_dirty_region, &drawable->qxl_drawable->bbox);
+ region_add(&surface->draw_dirty_region, &drawable->red_drawable->bbox);
localize_clip(worker, &clip, drawable->group_id);
- switch (drawable->qxl_drawable->type) {
+ switch (drawable->red_drawable->type) {
case QXL_DRAW_FILL: {
- SpiceFill fill = drawable->qxl_drawable->u.fill;
+ SpiceFill fill = drawable->red_drawable->u.fill;
localize_brush(worker, &fill.brush, drawable->group_id);
localize_mask(worker, &fill.mask, drawable->group_id);
- canvas->ops->draw_fill(canvas, &drawable->qxl_drawable->bbox,
+ canvas->ops->draw_fill(canvas, &drawable->red_drawable->bbox,
&clip, &fill); unlocalize_mask(&fill.mask);
unlocalize_brush(&fill.brush);
break;
}
case QXL_DRAW_OPAQUE: {
- SpiceOpaque opaque = drawable->qxl_drawable->u.opaque;
+ SpiceOpaque opaque = drawable->red_drawable->u.opaque;
localize_brush(worker, &opaque.brush, drawable->group_id);
localize_bitmap(worker, &opaque.src_bitmap, drawable->group_id);
localize_mask(worker, &opaque.mask, drawable->group_id);
- canvas->ops->draw_opaque(canvas, &drawable->qxl_drawable->bbox, &clip, &opaque);
+ canvas->ops->draw_opaque(canvas, &drawable->red_drawable->bbox, &clip, &opaque);
unlocalize_mask(&opaque.mask);
unlocalize_bitmap(&opaque.src_bitmap);
unlocalize_brush(&opaque.brush);
break;
}
case QXL_DRAW_COPY: {
- SpiceCopy copy = drawable->qxl_drawable->u.copy;
+ SpiceCopy copy = drawable->red_drawable->u.copy;
localize_bitmap(worker, ©.src_bitmap, drawable->group_id);
localize_mask(worker, ©.mask, drawable->group_id);
- canvas->ops->draw_copy(canvas, &drawable->qxl_drawable->bbox,
+ canvas->ops->draw_copy(canvas, &drawable->red_drawable->bbox,
&clip, ©);
unlocalize_mask(©.mask);
unlocalize_bitmap(©.src_bitmap);
break;
}
case QXL_DRAW_TRANSPARENT: {
- SpiceTransparent transparent = drawable->qxl_drawable->u.transparent;
+ SpiceTransparent transparent = drawable->red_drawable->u.transparent;
localize_bitmap(worker, &transparent.src_bitmap, drawable->group_id);
canvas->ops->draw_transparent(canvas,
- &drawable->qxl_drawable->bbox, &clip, &transparent);
+ &drawable->red_drawable->bbox, &clip, &transparent);
unlocalize_bitmap(&transparent.src_bitmap);
break;
}
case QXL_DRAW_ALPHA_BLEND: {
- SpiceAlphaBlnd alpha_blend = drawable->qxl_drawable->u.alpha_blend;
+ SpiceAlphaBlnd alpha_blend = drawable->red_drawable->u.alpha_blend;
localize_bitmap(worker, &alpha_blend.src_bitmap, drawable->group_id);
canvas->ops->draw_alpha_blend(canvas,
- &drawable->qxl_drawable->bbox, &clip, &alpha_blend);
+ &drawable->red_drawable->bbox, &clip, &alpha_blend);
unlocalize_bitmap(&alpha_blend.src_bitmap);
break;
}
case QXL_COPY_BITS: {
- canvas->ops->copy_bits(canvas, &drawable->qxl_drawable->bbox,
- &clip, &drawable->qxl_drawable->u.copy_bits.src_pos);
+ canvas->ops->copy_bits(canvas, &drawable->red_drawable->bbox,
+ &clip, &drawable->red_drawable->u.copy_bits.src_pos);
break;
}
case QXL_DRAW_BLEND: {
- SpiceBlend blend = drawable->qxl_drawable->u.blend;
+ SpiceBlend blend = drawable->red_drawable->u.blend;
localize_bitmap(worker, &blend.src_bitmap, drawable->group_id);
localize_mask(worker, &blend.mask, drawable->group_id);
- canvas->ops->draw_blend(canvas, &drawable->qxl_drawable->bbox,
+ canvas->ops->draw_blend(canvas, &drawable->red_drawable->bbox,
&clip, &blend);
unlocalize_mask(&blend.mask);
unlocalize_bitmap(&blend.src_bitmap);
break;
}
case QXL_DRAW_BLACKNESS: {
- SpiceBlackness blackness = drawable->qxl_drawable->u.blackness;
+ SpiceBlackness blackness = drawable->red_drawable->u.blackness;
localize_mask(worker, &blackness.mask, drawable->group_id);
canvas->ops->draw_blackness(canvas,
- &drawable->qxl_drawable->bbox, &clip, &blackness);
+ &drawable->red_drawable->bbox, &clip, &blackness);
unlocalize_mask(&blackness.mask);
break;
}
case QXL_DRAW_WHITENESS: {
- SpiceWhiteness whiteness = drawable->qxl_drawable->u.whiteness;
+ SpiceWhiteness whiteness = drawable->red_drawable->u.whiteness;
localize_mask(worker, &whiteness.mask, drawable->group_id);
canvas->ops->draw_whiteness(canvas,
- &drawable->qxl_drawable->bbox, &clip, &whiteness);
+ &drawable->red_drawable->bbox, &clip, &whiteness);
unlocalize_mask(&whiteness.mask);
break;
}
case QXL_DRAW_INVERS: {
- SpiceInvers invers = drawable->qxl_drawable->u.invers;
+ SpiceInvers invers = drawable->red_drawable->u.invers;
localize_mask(worker, &invers.mask, drawable->group_id);
canvas->ops->draw_invers(canvas,
- &drawable->qxl_drawable->bbox, &clip, &invers);
+ &drawable->red_drawable->bbox, &clip, &invers);
unlocalize_mask(&invers.mask);
break;
}
case QXL_DRAW_ROP3: {
- SpiceRop3 rop3 = drawable->qxl_drawable->u.rop3;
+ SpiceRop3 rop3 = drawable->red_drawable->u.rop3;
localize_brush(worker, &rop3.brush, drawable->group_id);
localize_bitmap(worker, &rop3.src_bitmap, drawable->group_id);
localize_mask(worker, &rop3.mask, drawable->group_id);
- canvas->ops->draw_rop3(canvas, &drawable->qxl_drawable->bbox,
+ canvas->ops->draw_rop3(canvas, &drawable->red_drawable->bbox,
&clip, &rop3); unlocalize_mask(&rop3.mask);
unlocalize_bitmap(&rop3.src_bitmap);
unlocalize_brush(&rop3.brush);
break;
}
case QXL_DRAW_STROKE: {
- SpiceStroke stroke = drawable->qxl_drawable->u.stroke;
+ SpiceStroke stroke = drawable->red_drawable->u.stroke;
localize_brush(worker, &stroke.brush, drawable->group_id);
localize_path(worker, &stroke.path, drawable->group_id);
localize_attr(worker, &stroke.attr, drawable->group_id);
canvas->ops->draw_stroke(canvas,
- &drawable->qxl_drawable->bbox, &clip, &stroke);
+ &drawable->red_drawable->bbox, &clip, &stroke);
unlocalize_attr(&stroke.attr);
unlocalize_path(&stroke.path);
unlocalize_brush(&stroke.brush);
break;
}
case QXL_DRAW_TEXT: {
- SpiceText text = drawable->qxl_drawable->u.text;
+ SpiceText text = drawable->red_drawable->u.text;
localize_brush(worker, &text.fore_brush, drawable->group_id);
localize_brush(worker, &text.back_brush, drawable->group_id);
localize_str(worker, &text.str, drawable->group_id);
- canvas->ops->draw_text(canvas, &drawable->qxl_drawable->bbox,
+ canvas->ops->draw_text(canvas, &drawable->red_drawable->bbox,
&clip, &text);
unlocalize_str(&text.str);
unlocalize_brush(&text.back_brush);
@@ -5038,8 +5040,9 @@ static int red_process_commands(RedWorker *worker, uint32_t max_pipe_size)
worker->repoll_cmd_ring = 0;
switch (ext_cmd.cmd.type) {
case QXL_CMD_DRAW: {
- QXLDrawable *drawable = (QXLDrawable *)get_virt(&worker->mem_slots, ext_cmd.cmd.data,
- sizeof(QXLDrawable), ext_cmd.group_id);
+ RedDrawable *drawable = spice_new0(RedDrawable, 1);
+ red_get_drawable(&worker->mem_slots, ext_cmd.group_id,
+ drawable, ext_cmd.cmd.data);
red_process_drawable(worker, drawable, ext_cmd.group_id);
break;
}
@@ -5396,8 +5399,8 @@ static void fill_base(DisplayChannel *display_channel, Drawable *drawable)
SpiceMarshaller *cliprects_data_out, *clippath_data_out;
base.surface_id = drawable->surface_id;
- base.box = drawable->qxl_drawable->bbox;
- base.clip = drawable->qxl_drawable->clip;
+ base.box = drawable->red_drawable->bbox;
+ base.clip = drawable->red_drawable->clip;
spice_marshall_DisplayBase(channel->send_data.marshaller, &base,
&cliprects_data_out, &clippath_data_out);
@@ -5503,7 +5506,7 @@ static RedGlzDrawable *red_display_get_glz_drawable(DisplayChannel *channel, Dra
ret = spice_new(RedGlzDrawable, 1);
ret->display_channel = channel;
- ret->qxl_drawable = drawable->qxl_drawable;
+ ret->red_drawable = drawable->red_drawable;
ret->drawable = drawable;
ret->group_id = drawable->group_id;
ret->surface_id = drawable->surface_id;
@@ -5572,7 +5575,7 @@ static void red_display_free_glz_drawable_instance(DisplayChannel *channel,
if (drawable) {
drawable->red_glz_drawable = NULL;
} else { // no reference to the qxl drawable left
- free_qxl_drawable(channel->base.worker, glz_drawable->qxl_drawable,
+ free_red_drawable(channel->base.worker, glz_drawable->red_drawable,
glz_drawable->group_id, glz_drawable->self_bitmap,
glz_drawable->surface_id);
}
@@ -7345,14 +7348,14 @@ static void surface_lossy_region_update(RedWorker *worker, DisplayChannel *displ
Drawable *item, int has_mask, int lossy)
{
QRegion *surface_lossy_region;
- QXLDrawable *drawable;
+ RedDrawable *drawable;
if (has_mask && !lossy) {
return;
}
surface_lossy_region = &display_channel->surface_client_lossy_region[item->surface_id];
- drawable = item->qxl_drawable;
+ drawable = item->red_drawable;
if ((drawable->clip.type == SPICE_CLIP_TYPE_NONE) ||
((drawable->clip.type == SPICE_CLIP_TYPE_PATH) && lossy)) {
@@ -7388,8 +7391,8 @@ static inline int drawable_intersects_with_areas(Drawable *drawable, int surface
{
int i;
for (i = 0; i < num_surfaces; i++) {
- if (surface_ids[i] == drawable->qxl_drawable->surface_id) {
- if (rect_intersects(surface_areas[i], &drawable->qxl_drawable->bbox)) {
+ if (surface_ids[i] == drawable->red_drawable->surface_id) {
+ if (rect_intersects(surface_areas[i], &drawable->red_drawable->bbox)) {
return TRUE;
}
}
@@ -7403,21 +7406,21 @@ static inline int drawable_depends_on_areas(Drawable *drawable,
int num_surfaces)
{
int i;
- QXLDrawable *qxl_drawable;
+ RedDrawable *red_drawable;
int drawable_has_shadow;
SpiceRect shadow_rect;
- qxl_drawable = drawable->qxl_drawable;
- drawable_has_shadow = has_shadow(qxl_drawable);
+ red_drawable = drawable->red_drawable;
+ drawable_has_shadow = has_shadow(red_drawable);
if (drawable_has_shadow) {
- int delta_x = qxl_drawable->u.copy_bits.src_pos.x - qxl_drawable->bbox.left;
- int delta_y = qxl_drawable->u.copy_bits.src_pos.y - qxl_drawable->bbox.top;
+ int delta_x = red_drawable->u.copy_bits.src_pos.x - red_drawable->bbox.left;
+ int delta_y = red_drawable->u.copy_bits.src_pos.y - red_drawable->bbox.top;
- shadow_rect.left = qxl_drawable->u.copy_bits.src_pos.x;
- shadow_rect.top = qxl_drawable->u.copy_bits.src_pos.y;
- shadow_rect.right = qxl_drawable->bbox.right + delta_x;
- shadow_rect.bottom = qxl_drawable->bbox.bottom + delta_y;
+ shadow_rect.left = red_drawable->u.copy_bits.src_pos.x;
+ shadow_rect.top = red_drawable->u.copy_bits.src_pos.y;
+ shadow_rect.right = red_drawable->bbox.right + delta_x;
+ shadow_rect.bottom = red_drawable->bbox.bottom + delta_y;
}
for (i = 0; i < num_surfaces; i++) {
@@ -7427,13 +7430,13 @@ static inline int drawable_depends_on_areas(Drawable *drawable,
for (x = 0; x < 3; ++x) {
dep_surface_id = drawable->surfaces_dest[x];
if (dep_surface_id == surface_ids[i]) {
- if (rect_intersects(&surface_areas[i], &qxl_drawable->surfaces_rects[x])) {
+ if (rect_intersects(&surface_areas[i], &red_drawable->surfaces_rects[x])) {
return TRUE;
}
}
}
- if (surface_ids[i] == qxl_drawable->surface_id) {
+ if (surface_ids[i] == red_drawable->surface_id) {
if (drawable_has_shadow) {
if (rect_intersects(&surface_areas[i], &shadow_rect)) {
return TRUE;
@@ -7441,11 +7444,11 @@ static inline int drawable_depends_on_areas(Drawable *drawable,
}
// not dependent on dest
- if (qxl_drawable->effect == QXL_EFFECT_OPAQUE) {
+ if (red_drawable->effect == QXL_EFFECT_OPAQUE) {
continue;
}
- if (rect_intersects(&surface_areas[i], &qxl_drawable->bbox)) {
+ if (rect_intersects(&surface_areas[i], &red_drawable->bbox)) {
return TRUE;
}
}
@@ -7528,10 +7531,10 @@ static void red_pipe_replace_rendered_drawables_with_images(RedWorker *worker,
continue;
}
- image = red_add_surface_area_image(worker, drawable->qxl_drawable->surface_id,
- &drawable->qxl_drawable->bbox, pipe_item, TRUE);
- resent_surface_ids[num_resent] = drawable->qxl_drawable->surface_id;
- resent_areas[num_resent] = drawable->qxl_drawable->bbox;
+ image = red_add_surface_area_image(worker, drawable->red_drawable->surface_id,
+ &drawable->red_drawable->bbox, pipe_item, TRUE);
+ resent_surface_ids[num_resent] = drawable->red_drawable->surface_id;
+ resent_areas[num_resent] = drawable->red_drawable->bbox;
num_resent++;
ASSERT(image);
@@ -7547,7 +7550,7 @@ static void red_add_lossless_drawable_dependencies(RedWorker *worker,
SpiceRect *deps_areas[],
int num_deps)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int sync_rendered = FALSE;
int i;
@@ -7615,7 +7618,7 @@ static void red_send_qxl_draw_fill(RedWorker *worker,
Drawable *item)
{
RedChannel *channel = &display_channel->base;
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
SpiceMarshaller *brush_pat_out;
SpiceMarshaller *mask_bitmap_out;
SpiceFill fill;
@@ -7641,7 +7644,7 @@ static void red_lossy_send_qxl_draw_fill(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int dest_allowed_lossy = FALSE;
int dest_is_lossy = FALSE;
@@ -7698,7 +7701,7 @@ static FillBitsType red_send_qxl_draw_opaque(RedWorker *worker,
Drawable *item, int src_allowed_lossy)
{
RedChannel *channel = &display_channel->base;
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
SpiceMarshaller *brush_pat_out;
SpiceMarshaller *src_bitmap_out;
SpiceMarshaller *mask_bitmap_out;
@@ -7730,7 +7733,7 @@ static void red_lossy_send_qxl_draw_opaque(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int src_allowed_lossy;
int rop;
@@ -7795,7 +7798,7 @@ static FillBitsType red_send_qxl_draw_copy(RedWorker *worker,
Drawable *item, int src_allowed_lossy)
{
RedChannel *channel = &display_channel->base;
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
SpiceMarshaller *src_bitmap_out;
SpiceMarshaller *mask_bitmap_out;
SpiceCopy copy;
@@ -7821,7 +7824,7 @@ static void red_lossy_send_qxl_draw_copy(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int has_mask = !!drawable->u.copy.mask.bitmap;
int src_is_lossy;
BitmapData src_bitmap_data;
@@ -7847,7 +7850,7 @@ static void red_send_qxl_draw_transparent(RedWorker *worker,
Drawable *item)
{
RedChannel *channel = &display_channel->base;
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
SpiceMarshaller *src_bitmap_out;
SpiceTransparent transparent;
@@ -7864,7 +7867,7 @@ static void red_lossy_send_qxl_draw_transparent(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int src_is_lossy;
BitmapData src_bitmap_data;
@@ -7893,7 +7896,7 @@ static FillBitsType red_send_qxl_draw_alpha_blend(RedWorker *worker,
int src_allowed_lossy)
{
RedChannel *channel = &display_channel->base;
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
SpiceMarshaller *src_bitmap_out;
SpiceAlphaBlnd alpha_blend;
FillBitsType src_send_type;
@@ -7913,7 +7916,7 @@ static void red_lossy_send_qxl_draw_alpha_blend(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int src_is_lossy;
BitmapData src_bitmap_data;
FillBitsType src_send_type;
@@ -7939,7 +7942,7 @@ static void red_send_qxl_copy_bits(RedWorker *worker,
Drawable *item)
{
RedChannel *channel = &display_channel->base;
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
SpicePoint copy_bits;
fill_base(display_channel, item);
@@ -7953,7 +7956,7 @@ static void red_lossy_send_qxl_copy_bits(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
SpiceRect src_rect;
int horz_offset;
int vert_offset;
@@ -7982,7 +7985,7 @@ static void red_send_qxl_draw_blend(RedWorker *worker,
Drawable *item)
{
RedChannel *channel = &display_channel->base;
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
SpiceMarshaller *src_bitmap_out;
SpiceMarshaller *mask_bitmap_out;
SpiceBlend blend;
@@ -8004,7 +8007,7 @@ static void red_lossy_send_qxl_draw_blend(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int src_is_lossy;
BitmapData src_bitmap_data;
int dest_is_lossy;
@@ -8045,7 +8048,7 @@ static void red_send_qxl_draw_blackness(RedWorker *worker,
Drawable *item)
{
RedChannel *channel = &display_channel->base;
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
SpiceMarshaller *mask_bitmap_out;
SpiceBlackness blackness;
@@ -8064,7 +8067,7 @@ static void red_lossy_send_qxl_draw_blackness(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int has_mask = !!drawable->u.blackness.mask.bitmap;
red_send_qxl_draw_blackness(worker, display_channel, item);
@@ -8077,7 +8080,7 @@ static void red_send_qxl_draw_whiteness(RedWorker *worker,
Drawable *item)
{
RedChannel *channel = &display_channel->base;
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
SpiceMarshaller *mask_bitmap_out;
SpiceWhiteness whiteness;
@@ -8096,7 +8099,7 @@ static void red_lossy_send_qxl_draw_whiteness(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int has_mask = !!drawable->u.whiteness.mask.bitmap;
red_send_qxl_draw_whiteness(worker, display_channel, item);
@@ -8108,7 +8111,7 @@ static void red_send_qxl_draw_inverse(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
SpiceMarshaller *mask_bitmap_out;
RedChannel *channel = &display_channel->base;
SpiceInvers inverse;
@@ -8135,7 +8138,7 @@ static void red_send_qxl_draw_rop3(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
RedChannel *channel = &display_channel->base;
SpiceRop3 rop3;
SpiceMarshaller *src_bitmap_out;
@@ -8163,7 +8166,7 @@ static void red_lossy_send_qxl_draw_rop3(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int src_is_lossy;
BitmapData src_bitmap_data;
int brush_is_lossy;
@@ -8217,7 +8220,7 @@ static void red_send_qxl_draw_stroke(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
RedChannel *channel = &display_channel->base;
SpiceStroke stroke;
SpiceMarshaller *brush_pat_out;
@@ -8245,7 +8248,7 @@ static void red_lossy_send_qxl_draw_stroke(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int brush_is_lossy;
BitmapData brush_bitmap_data;
int dest_is_lossy = FALSE;
@@ -8299,7 +8302,7 @@ static void red_send_qxl_draw_text(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
RedChannel *channel = &display_channel->base;
SpiceText text;
SpiceMarshaller *brush_pat_out;
@@ -8330,7 +8333,7 @@ static void red_lossy_send_qxl_draw_text(RedWorker *worker,
DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
int fg_is_lossy;
BitmapData fg_bitmap_data;
int bg_is_lossy;
@@ -8394,7 +8397,7 @@ static void red_lossy_send_qxl_draw_text(RedWorker *worker,
static void red_lossy_send_qxl_drawable(RedWorker *worker, DisplayChannel *display_channel,
Drawable *item)
{
- switch (item->qxl_drawable->type) {
+ switch (item->red_drawable->type) {
case QXL_DRAW_FILL:
red_lossy_send_qxl_draw_fill(worker, display_channel, item);
break;
@@ -8447,7 +8450,7 @@ static void red_lossy_send_qxl_drawable(RedWorker *worker, DisplayChannel *displ
static inline void red_send_qxl_drawable(RedWorker *worker, DisplayChannel *display_channel,
Drawable *item)
{
- QXLDrawable *drawable = item->qxl_drawable;
+ RedDrawable *drawable = item->red_drawable;
switch (drawable->type) {
case QXL_DRAW_FILL:
@@ -8844,11 +8847,11 @@ static inline int red_send_stream_data(DisplayChannel *display_channel, Drawable
int n;
ASSERT(stream);
- ASSERT(drawable->qxl_drawable->type == QXL_DRAW_COPY);
+ ASSERT(drawable->red_drawable->type == QXL_DRAW_COPY);
channel = &display_channel->base;
worker = channel->worker;
- qxl_image = (QXLImage *)get_virt(&worker->mem_slots, drawable->qxl_drawable->u.copy.src_bitmap,
+ qxl_image = (QXLImage *)get_virt(&worker->mem_slots, drawable->red_drawable->u.copy.src_bitmap,
sizeof(QXLImage), drawable->group_id);
if (qxl_image->descriptor.type != SPICE_IMAGE_TYPE_BITMAP ||
@@ -8869,7 +8872,7 @@ static inline int red_send_stream_data(DisplayChannel *display_channel, Drawable
switch (qxl_image->bitmap.format) {
case SPICE_BITMAP_FMT_32BIT:
- if (!red_rgb32bpp_to_24(worker, &drawable->qxl_drawable->u.copy.src_area,
+ if (!red_rgb32bpp_to_24(worker, &drawable->red_drawable->u.copy.src_area,
&qxl_image->bitmap, frame, frame_stride,
get_virt_delta(&worker->mem_slots, data, drawable->group_id),
get_memslot_id(&worker->mem_slots, data),
@@ -8878,7 +8881,7 @@ static inline int red_send_stream_data(DisplayChannel *display_channel, Drawable
}
break;
case SPICE_BITMAP_FMT_16BIT:
- if (!red_rgb16bpp_to_24(worker, &drawable->qxl_drawable->u.copy.src_area,
+ if (!red_rgb16bpp_to_24(worker, &drawable->red_drawable->u.copy.src_area,
&qxl_image->bitmap, frame, frame_stride,
get_virt_delta(&worker->mem_slots, data, drawable->group_id),
get_memslot_id(&worker->mem_slots, data),
@@ -8887,7 +8890,7 @@ static inline int red_send_stream_data(DisplayChannel *display_channel, Drawable
}
break;
case SPICE_BITMAP_FMT_24BIT:
- if (!red_rgb24bpp_to_24(worker, &drawable->qxl_drawable->u.copy.src_area,
+ if (!red_rgb24bpp_to_24(worker, &drawable->red_drawable->u.copy.src_area,
&qxl_image->bitmap, frame, frame_stride,
get_virt_delta(&worker->mem_slots, data, drawable->group_id),
get_memslot_id(&worker->mem_slots, data),
@@ -8921,7 +8924,7 @@ static inline int red_send_stream_data(DisplayChannel *display_channel, Drawable
SpiceMsgDisplayStreamData stream_data;
stream_data.id = stream - worker->streams_buf;
- stream_data.multi_media_time = drawable->qxl_drawable->mm_time;
+ stream_data.multi_media_time = drawable->red_drawable->mm_time;
stream_data.data_size = n;
stream_data.pad_size = PADDING;
spice_marshall_msg_display_stream_data(channel->send_data.marshaller, &stream_data);
@@ -9215,7 +9218,7 @@ static void red_send_image(DisplayChannel *display_channel, ImageItem *item)
static void red_display_send_upgrade(DisplayChannel *display_channel, UpgradeItem *item)
{
RedChannel *channel;
- QXLDrawable *qxl_drawable;
+ RedDrawable *red_drawable;
SpiceMsgDisplayDrawCopy copy;
SpiceMarshaller *cliprects_data_out, *clippath_data_out, *src_bitmap_out, *mask_bitmap_out;
int i;
@@ -9225,16 +9228,16 @@ static void red_display_send_upgrade(DisplayChannel *display_channel, UpgradeIte
channel->send_data.header->type = SPICE_MSG_DISPLAY_DRAW_COPY;
- qxl_drawable = item->drawable->qxl_drawable;
- ASSERT(qxl_drawable->type == QXL_DRAW_COPY);
- ASSERT(qxl_drawable->u.copy.rop_decriptor == SPICE_ROPD_OP_PUT);
- ASSERT(qxl_drawable->u.copy.mask.bitmap == 0);
+ red_drawable = item->drawable->red_drawable;
+ ASSERT(red_drawable->type == QXL_DRAW_COPY);
+ ASSERT(red_drawable->u.copy.rop_decriptor == SPICE_ROPD_OP_PUT);
+ ASSERT(red_drawable->u.copy.mask.bitmap == 0);
copy.base.surface_id = 0;
- copy.base.box = qxl_drawable->bbox;
+ copy.base.box = red_drawable->bbox;
copy.base.clip.type = SPICE_CLIP_TYPE_RECTS;
copy.base.clip.data = 0;
- copy.data = qxl_drawable->u.copy;
+ copy.data = red_drawable->u.copy;
SpiceMarshaller *m = channel->send_data.marshaller;
@@ -9274,8 +9277,8 @@ static void red_display_send_stream_start(DisplayChannel *display_channel, Strea
stream_create.dest = stream->dest_area;
if (stream->current) {
- QXLDrawable *qxl_drawable = stream->current->qxl_drawable;
- stream_create.clip = qxl_drawable->clip;
+ RedDrawable *red_drawable = stream->current->red_drawable;
+ stream_create.clip = red_drawable->clip;
} else {
stream_create.clip.type = SPICE_CLIP_TYPE_RECTS;
stream_create.clip.data = 0;
@@ -9286,12 +9289,12 @@ static void red_display_send_stream_start(DisplayChannel *display_channel, Strea
if (stream->current) {
- QXLDrawable *qxl_drawable = stream->current->qxl_drawable;
- if (qxl_drawable->clip.type == SPICE_CLIP_TYPE_RECTS) {
+ RedDrawable *red_drawable = stream->current->red_drawable;
+ if (red_drawable->clip.type == SPICE_CLIP_TYPE_RECTS) {
fill_rects_clip(channel, cliprects_data_out, stream_create.clip.data,
stream->current->group_id);
} else {
- ASSERT(qxl_drawable->clip.type == SPICE_CLIP_TYPE_NONE);
+ ASSERT(red_drawable->clip.type == SPICE_CLIP_TYPE_NONE);
}
display_begin_send_massage(display_channel, &stream->current->pipe_item);
} else {
@@ -9694,7 +9697,7 @@ static void __show_tree_call(TreeItem *item, void *data)
printf(" ");
}
printf(item_prefix, 0);
- show_qxl_drawable(tree_data->worker, drawable->qxl_drawable, NULL);
+ show_red_drawable(tree_data->worker, drawable->red_drawable, NULL);
for (i = 0; i < tree_data->level; i++) {
printf(" ");
}
--
1.6.5.2
More information about the Spice-devel
mailing list