[Spice-devel] [PATCH] spice: fix simple display on bigendian hosts
Denis Kirjanov
kirjanov at gmail.com
Tue Apr 14 07:47:22 PDT 2015
On 4/14/15, Denis Kirjanov <kirjanov at gmail.com> wrote:
> On 4/14/15, Denis Kirjanov <kirjanov at gmail.com> wrote:
>> On 4/14/15, Gerd Hoffmann <kraxel at redhat.com> wrote:
>>> Denis Kirjanov is busy getting spice run on ppc64 and trapped into this
>>> one. Spice wire format is little endian, so we have to explicitly say
>>> we want little endian when letting pixman convert the data for us.
>>>
>>> Reported-by: Denis Kirjanov <kirjanov at gmail.com>
>>> Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
>>> ---
>> Yeah, that fixes the issue. Thanks Gerd!
>
> Looks like that the patch fixes the half of the problem: the inverted
> colors appear on client reconnect to vm
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff4e10258 in ?? () from /usr/lib/x86_64-linux-gnu/libpixman-1.so.0
(gdb) bt
#0 0x00007ffff4e10258 in ?? () from /usr/lib/x86_64-linux-gnu/libpixman-1.so.0
#1 0x00007ffff4e10239 in pixman_image_unref () from
/usr/lib/x86_64-linux-gnu/libpixman-1.so.0
#2 0x00007ffff78e4117 in canvas_get_quic
(canvas=canvas at entry=0x7ceb80, image=image at entry=0xae2720,
want_original=want_original at entry=0) at
../spice-common/common/canvas_base.c:390
#3 0x00007ffff78e686d in canvas_get_image_internal
(canvas=canvas at entry=0x7ceb80, image=0xae2720,
want_original=want_original at entry=0, real_get=real_get at entry=1) at
../spice-common/common/canvas_base.c:1146
#4 0x00007ffff78e83fd in canvas_get_image (want_original=0,
image=<optimized out>, canvas=0x7ceb80)
at ../spice-common/common/canvas_base.c:1309
#5 canvas_draw_copy (spice_canvas=0x7ceb80, bbox=0xae26c4,
clip=<optimized out>, copy=0xae26e8)
at ../spice-common/common/canvas_base.c:2281
#6 0x00007ffff78c98db in display_handle_draw_copy (channel=0x7c59b0,
in=0x841f00) at channel-display.c:1563
#7 0x00007ffff78bfe7c in spice_channel_handle_msg (channel=0x7c59b0,
msg=0x841f00) at spice-channel.c:2858
#8 0x00007ffff78bce6c in spice_channel_recv_msg (channel=0x7c59b0,
msg_handler=0x7ffff78bfd9f <spice_channel_handle_msg>,
data=0x0) at spice-channel.c:1869
#9 0x00007ffff78bd4f3 in spice_channel_iterate_read
(channel=0x7c59b0) at spice-channel.c:2106
#10 0x00007ffff78bd6fd in spice_channel_iterate (channel=0x7c59b0) at
spice-channel.c:2144
#11 0x00007ffff78be4ad in spice_channel_coroutine (data=0x7c59b0) at
spice-channel.c:2430
#12 0x00007ffff78ea6ff in coroutine_trampoline (cc=0x7c5058) at
coroutine_ucontext.c:63
#13 0x00007ffff78ea4c9 in continuation_trampoline (i0=<optimized out>,
i1=<optimized out>) at continuation.c:55
#14 0x00007ffff63278b0 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#15 0x00000000007c5420 in ?? ()
#16 0x0000000000000000 in ?? ()
>>> include/ui/qemu-pixman.h | 2 ++
>>> ui/spice-display.c | 2 +-
>>> 2 files changed, 3 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h
>>> index 5d7a9ac..e34c4ef 100644
>>> --- a/include/ui/qemu-pixman.h
>>> +++ b/include/ui/qemu-pixman.h
>>> @@ -35,6 +35,7 @@
>>> # define PIXMAN_BE_r8g8b8a8 PIXMAN_r8g8b8a8
>>> # define PIXMAN_BE_x8b8g8r8 PIXMAN_x8b8g8r8
>>> # define PIXMAN_BE_a8b8g8r8 PIXMAN_a8b8g8r8
>>> +# define PIXMAN_LE_x8r8g8b8 PIXMAN_b8g8r8x8
>>> #else
>>> # define PIXMAN_BE_r8g8b8 PIXMAN_b8g8r8
>>> # define PIXMAN_BE_x8r8g8b8 PIXMAN_b8g8r8x8
>>> @@ -45,6 +46,7 @@
>>> # define PIXMAN_BE_r8g8b8a8 PIXMAN_a8b8g8r8
>>> # define PIXMAN_BE_x8b8g8r8 PIXMAN_r8g8b8x8
>>> # define PIXMAN_BE_a8b8g8r8 PIXMAN_r8g8b8a8
>>> +# define PIXMAN_LE_x8r8g8b8 PIXMAN_x8r8g8b8
>>> #endif
>>>
>>> /* --------------------------------------------------------------------
>>> */
>>> diff --git a/ui/spice-display.c b/ui/spice-display.c
>>> index 1644185..1a64e07 100644
>>> --- a/ui/spice-display.c
>>> +++ b/ui/spice-display.c
>>> @@ -178,7 +178,7 @@ static void
>>> qemu_spice_create_one_update(SimpleSpiceDisplay *ssd,
>>> image->bitmap.palette = 0;
>>> image->bitmap.format = SPICE_BITMAP_FMT_32BIT;
>>>
>>> - dest = pixman_image_create_bits(PIXMAN_x8r8g8b8, bw, bh,
>>> + dest = pixman_image_create_bits(PIXMAN_LE_x8r8g8b8, bw, bh,
>>> (void *)update->bitmap, bw * 4);
>>> pixman_image_composite(PIXMAN_OP_SRC, ssd->surface, NULL,
>>> ssd->mirror,
>>> rect->left, rect->top, 0, 0,
>>> --
>>> 1.8.3.1
>>>
>>> _______________________________________________
>>> Spice-devel mailing list
>>> Spice-devel at lists.freedesktop.org
>>> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>>>
>>
>>
>> --
>> Regards,
>> Denis
>>
>
>
> --
> Regards,
> Denis
>
--
Regards,
Denis
More information about the Spice-devel
mailing list