[Spice-devel] [PATCH] miniport/qxl: FillVideoMode: only allow word aligned strides
Alon Levy
alevy at redhat.com
Sun Oct 14 03:57:16 PDT 2012
> On 10/11/2012 12:23 PM, Alon Levy wrote:
> > This is a pixman requirement. If it isn't enforced spice crashes,
> > qemu
> > with it. That should be fixed, but there is no simple way to allow
> > for
> > non word aligned strides, and the only down side is that for 16 bit
> > modes we will require even widths. And we already have the same
> > implementation detail in the X driver, only there it is a multiple
> > of 8,
> > not 4.
> > ---
> > miniport/qxl.c | 9 ++++++++-
> > 1 file changed, 8 insertions(+), 1 deletion(-)
> >
> > diff --git a/miniport/qxl.c b/miniport/qxl.c
> > index 55e55d3..f177d91 100644
> > --- a/miniport/qxl.c
> > +++ b/miniport/qxl.c
> > @@ -469,17 +469,24 @@ VP_STATUS
> > FillVidModeInfo(VIDEO_MODE_INFORMATION *pMode, ULONG xres, ULONG
> > yres,
> > /* Fills given video mode structure */
> > VP_STATUS FillVidModeInfo(VIDEO_MODE_INFORMATION *pMode, ULONG
> > xres, ULONG yres, ULONG bpp, ULONG index)
> > {
> > + unsigned bytes_pp = (bpp + 7) / 8;
> > +
> > if (xres<= 0 || yres<= 0)
> > return ERROR_INVALID_DATA;
> >
> > VideoPortZeroMemory(pMode, sizeof(VIDEO_MODE_INFORMATION));
> >
> > + /* Honor pixmap's stride % 4 == 0 limitation. Pixmap is used
> > by spice-server. */
> > + if (xres * bytes_pp % 4 != 0) {
> > + xres = ((xres * bytes_pp)& ~0x3) / bytes_pp;
> > + }
> > +
>
> Hi Alon,
>
> I think this calculation is wrong. For example assume xres=3 and
> bytes_pp=5
> xres = (15 & ~0x3) / 5 = 12 / 5 = 2
>
> but now xres * bytes_pp = 10
>
> Are there assumptions I'm missing ?
in practice bytes_pp is 2 or 4.
>
> Thanks,
> Uri.
>
>
More information about the Spice-devel
mailing list