pbrook | 714fa30 | 2009-04-01 12:27:59 +0000 | [diff] [blame] | 1 | #ifndef QEMU_FRAMEBUFFER_H |
| 2 | #define QEMU_FRAMEBUFFER_H |
| 3 | |
Paolo Bonzini | 022c62c | 2012-12-17 18:19:49 +0100 | [diff] [blame] | 4 | #include "exec/memory.h" |
Avi Kivity | 75c9d6c | 2011-12-08 16:00:54 +0200 | [diff] [blame] | 5 | |
pbrook | 714fa30 | 2009-04-01 12:27:59 +0000 | [diff] [blame] | 6 | /* Framebuffer device helper routines. */ |
| 7 | |
| 8 | typedef void (*drawfn)(void *, uint8_t *, const uint8_t *, int, int); |
| 9 | |
Paolo Bonzini | c1076c3 | 2015-07-13 12:00:29 +0200 | [diff] [blame] | 10 | /* framebuffer_update_memory_section: Update framebuffer |
| 11 | * #MemoryRegionSection, for example if the framebuffer is switched to |
| 12 | * a different memory area. |
| 13 | * |
| 14 | * @mem_section: Output #MemoryRegionSection, to be passed to |
| 15 | * framebuffer_update_display(). |
| 16 | * @root: #MemoryRegion within which the framebuffer lies |
| 17 | * @base: Base address of the framebuffer within @root. |
| 18 | * @rows: Height of the screen. |
| 19 | * @src_width: Number of bytes in framebuffer memory between two rows. |
| 20 | */ |
| 21 | void framebuffer_update_memory_section( |
| 22 | MemoryRegionSection *mem_section, |
| 23 | MemoryRegion *root, |
| 24 | hwaddr base, |
| 25 | unsigned rows, |
| 26 | unsigned src_width); |
| 27 | |
| 28 | /* framebuffer_update_display: Draw the framebuffer on a surface. |
| 29 | * |
| 30 | * @ds: #DisplaySurface to draw to. |
| 31 | * @mem_section: #MemoryRegionSection provided by |
| 32 | * framebuffer_update_memory_section(). |
| 33 | * @cols: Width the screen. |
| 34 | * @rows: Height of the screen. |
| 35 | * @src_width: Number of bytes in framebuffer memory between two rows. |
| 36 | * @dest_row_pitch: Number of bytes in the surface data between two rows. |
| 37 | * Negative if the framebuffer is stored in the opposite order (e.g. |
| 38 | * bottom-to-top) compared to the framebuffer. |
| 39 | * @dest_col_pitch: Number of bytes in the surface data between two pixels. |
| 40 | * Negative if the framebuffer is stored in the opposite order (e.g. |
| 41 | * right-to-left) compared to the framebuffer. |
| 42 | * @invalidate: True if the function should redraw the whole screen |
| 43 | * without checking the DIRTY_MEMORY_VGA dirty bitmap. |
| 44 | * @fn: Drawing function to be called for each row that has to be drawn. |
| 45 | * @opaque: Opaque pointer passed to @fn. |
| 46 | * @first_row: Pointer to an integer, receives the number of the first row |
| 47 | * that was drawn (either the first dirty row, or 0 if @invalidate is true). |
| 48 | * @last_row: Pointer to an integer, receives the number of the last row that |
| 49 | * was drawn (either the last dirty row, or @rows-1 if @invalidate is true). |
| 50 | */ |
pbrook | 714fa30 | 2009-04-01 12:27:59 +0000 | [diff] [blame] | 51 | void framebuffer_update_display( |
Gerd Hoffmann | c78f713 | 2013-03-05 15:24:14 +0100 | [diff] [blame] | 52 | DisplaySurface *ds, |
Paolo Bonzini | c1076c3 | 2015-07-13 12:00:29 +0200 | [diff] [blame] | 53 | MemoryRegionSection *mem_section, |
pbrook | 714fa30 | 2009-04-01 12:27:59 +0000 | [diff] [blame] | 54 | int cols, |
| 55 | int rows, |
| 56 | int src_width, |
| 57 | int dest_row_pitch, |
| 58 | int dest_col_pitch, |
| 59 | int invalidate, |
| 60 | drawfn fn, |
| 61 | void *opaque, |
| 62 | int *first_row, |
| 63 | int *last_row); |
| 64 | |
| 65 | #endif |