spice 0.6 uses 32bpp values unconditionally for brush and palette
colors.
spice 0.4 used to use 16 bpp or 32 bpp depending on the video mode.
The qxl parser needs to know the guest video mode depth to correctly
interpret these values in spice 0.4 compat mode. Add a flag to pass
on this informartion.
Also, this changes the SpiceImage types to be more useful
as internal types, with real typed pointers. It also
adds a SpiceChunk iovec type for easy representation of
chunked data.
Add SET_MODE IO port back in.
Add QXLRom offset fields back in.
I/O ports, RAM and ROM layout are binary compatible now.
With these changes merged it should be possible to create *one* qxl
device which supports *both* 0.4 and unstable spice commands.
Everything the guest touches before entering native mode is binary
compatible. Old (0.4) guests drivers enter native mode via SET_MODE,
new (unstqable) guest drivers enter native mode using CREATE_PRIMARY,
so when we see spice commands from the guest come in we know
whenever we have to interpret them as 0.4 or unstable ones.
Added commends to structs which need care wrt. compatibility when
updating.
Added some QXLCompat* structs for the 0.4 struct versions.
Added a flags field to QXLCommandEx so qxl can signal whenever commands
are compat or not.
Moved QXLRom->n_surfaces to make QXLRom->flags 64bit aligned.
Add padding to QXLRom to ensure future elements are 32bit aligned.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
We will switch back to 0x101 when things settle down and we guarantee
backwards compatibility. For now we will keep breaking it, bumping
revision each time this happens.