[Spice-devel] RFC: Render support in the protocol
Soeren Sandmann
sandmann at cs.au.dk
Wed Jul 6 06:38:19 PDT 2011
RENDER is a very commonly used X extension that currently is not
supported very well in SPICE. This leads to the QXL X driver having to
read back pixels from the device, render in software, then transmit an
image. This is currently the biggest performance issue with SPICE for X.
The specification for this extension can be found here:
http://cgit.freedesktop.org/xorg/proto/renderproto/tree/renderproto.txt
Pixman is essentially a software implementation of Render, so there
should be no issues getting the client to draw it. The issue is how to
add support to the SPICE protocol
A straightforward way to is to add a new draw command, "Composite"
containing all of the required attributes for render pictures:
RED_DISPLAY_DRAW_COMPOSITE:
OPERATOR op
ADDRESS source_image
POINT src_x, src_y
TRANSFORM src_transform
REPEAT src_repeat
FILTER src_filter
ADDRESS mask_iamge
POINT mask_x, mask_y,
TRANSFORM mask_transform,
REPEAT mask_repeat
FILTER mask_filter
where:
TRANSFORM is 6 fixpoint numbers describing an affine transform
REPEAT is one of { NONE, NORMAL, REFLECT, PAD }
FILTER is one of { NEAREST, BILINEAR }
This is quite a lot of data to send for each request though. There are
some way to reduce the amount of data:
- REPEAT, FILTER could be stored in the same field since they have to
few possible values
- If transform is identity, it could be represented as a NULL address
instead of as six numbers.
- The fields for op, source and mask could be combined
The result would be this new command:
RED_DISPLAY_DRAW_COMPOSITE:
UINT32_T info
ADDRESS source_image
ADDRESS source_transform [ may be NULL ]
POINT16 src_origin
ADDRESS mask_image [ may be NULL ]
ADDRESS mask_transform [ may be NULL ]
POINT16 mask_origin
where info is a bitfield:
[ operator : 8
src_filter : 2
mask_filter : 2
src_repeat : 2
mask_repeat : 2
component_alpha : 1
padding : 15 // must be zero
]
Comments appreciated.
Soren
More information about the Spice-devel
mailing list