qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 5/8] vga: optimize horizontal pel panning in 256-color modes


From: Paolo Bonzini
Subject: Re: [PATCH 5/8] vga: optimize horizontal pel panning in 256-color modes
Date: Mon, 1 Jan 2024 20:02:16 +0100

Il dom 31 dic 2023, 17:27 BALATON Zoltan <balaton@eik.bme.hu> ha scritto:
>     palette = vga->last_palette;
>     hpel = (hpel >> 1) & 3;
> +
> +    /* For 256 color modes, we can adjust the source address and write directly
> +     * to the destination, even if horizontal pel panning is active.  However,
> +     * the loop below assumes that the address does not wrap in the middle of a
> +     * plane.  If that happens...
> +     */
> +    if (addr + (width >> 3) * 4 < VGA_VRAM_SIZE) {
> +        addr += hpel * 4;
> +        hpel = 0;
> +    }
> +
> +    /* ... use the panning buffer as in planar modes.  */
>     if (hpel) {
>         width += 8;
>         d = vga->panning_buf;

Is it possible to do these checks once in vga.c and instead of changing
the return value of the draw functions pass panning_buf as d if needed?
Maybe that way the draw funcs could be left unchanged?

As of the previous patch it could, here however the logic for whether to use the panning_buf depends on the drawing function; 8d2 is special and different from the others.

I can remove the optimization, it's not super Important; but it's kind of obvious to do it for the VGA 256-color modes, since they're the only ones with the same bit alignment for all pixels.

Paolo


Regards,
BALATON Zoltan


reply via email to

[Prev in Thread] Current Thread [Next in Thread]