mirror of https://github.com/xemu-project/xemu.git
vga: optimize horizontal pel panning in 256-color modes
Do not go through the panning buffer unless the address wraps in the middle of the line. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
973a724eb0
commit
4d6c310502
|
@ -265,6 +265,18 @@ static void *vga_draw_line8d2(VGACommonState *vga, uint8_t *d,
|
||||||
|
|
||||||
palette = vga->last_palette;
|
palette = vga->last_palette;
|
||||||
hpel = (hpel >> 1) & 3;
|
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) {
|
if (hpel) {
|
||||||
width += 8;
|
width += 8;
|
||||||
d = vga->panning_buf;
|
d = vga->panning_buf;
|
||||||
|
|
Loading…
Reference in New Issue