mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 06:43:53 -06:00
Make Pixman an optional dependency
-----BEGIN PGP SIGNATURE----- iQJQBAABCAA6FiEEh6m9kz+HxgbSdvYt2ujhCXWWnOUFAmVKDhkcHG1hcmNhbmRy ZS5sdXJlYXVAcmVkaGF0LmNvbQAKCRDa6OEJdZac5f8CD/0YX5sXR3IwUfTp8B51 iIwgOlVunzcT9oDYegIekaHdvggv3B39+gjC/khcehQ30qV6MDowj3ZagIeLavU2 ZpHJMUkg1YRDHMiJ8aJmDhOyZHINCETWV2YoJX1ACllKOOMSXHC3mWKZd/eIqAPJ EBMlSWBP1rRtwfaX+p1Y65XappJewzzb9SqFn8s5deowEAM3aK7xafHQOBWSVx9z 5adhIWn3HMVnbYolVXlcHsPurfI86sqCl7QAqkFdwAvGIKghhqMT6pFfvu3BalHN nz8GqpSvjlj/WNFABi00piXKx4kkqBJSsYMP8owZQZIeepT5RXuKAB15BA1Cc5N7 wTkuLe7zXLUST32yAHLa2UZY8Gv/a6C+dH1EFRd7vMMczBPrzwuqzWChRTZPQaX6 e4uhXnhuu8Io11TnkmwWeWtrLOf+6EmVOjxNwhUUXOqPXPxd7LGMh/ZIc1SuXh0a k7khpXez4MoBWGftjCEUNlLZ13rcrqnkUWAZeOwjjaqxnYK+Lz32OGS3BtjRYvov WgogC2c2vVHrSHxRxuytCHiM+7NY0Tf2B6PxZJKOQUtfFxvHjWkHghnJWwHH2OP/ lMnJUU+XAaAxsiEiDN4BSd0DSA6jn6/vg8SgXXEDyIDExq5jELVMgw2q1cbQJK1s mOgr8FZZfnxvwYIFvH7PFiDm3A== =bLPz -----END PGP SIGNATURE----- Merge tag 'pixman-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging Make Pixman an optional dependency # -----BEGIN PGP SIGNATURE----- # # iQJQBAABCAA6FiEEh6m9kz+HxgbSdvYt2ujhCXWWnOUFAmVKDhkcHG1hcmNhbmRy # ZS5sdXJlYXVAcmVkaGF0LmNvbQAKCRDa6OEJdZac5f8CD/0YX5sXR3IwUfTp8B51 # iIwgOlVunzcT9oDYegIekaHdvggv3B39+gjC/khcehQ30qV6MDowj3ZagIeLavU2 # ZpHJMUkg1YRDHMiJ8aJmDhOyZHINCETWV2YoJX1ACllKOOMSXHC3mWKZd/eIqAPJ # EBMlSWBP1rRtwfaX+p1Y65XappJewzzb9SqFn8s5deowEAM3aK7xafHQOBWSVx9z # 5adhIWn3HMVnbYolVXlcHsPurfI86sqCl7QAqkFdwAvGIKghhqMT6pFfvu3BalHN # nz8GqpSvjlj/WNFABi00piXKx4kkqBJSsYMP8owZQZIeepT5RXuKAB15BA1Cc5N7 # wTkuLe7zXLUST32yAHLa2UZY8Gv/a6C+dH1EFRd7vMMczBPrzwuqzWChRTZPQaX6 # e4uhXnhuu8Io11TnkmwWeWtrLOf+6EmVOjxNwhUUXOqPXPxd7LGMh/ZIc1SuXh0a # k7khpXez4MoBWGftjCEUNlLZ13rcrqnkUWAZeOwjjaqxnYK+Lz32OGS3BtjRYvov # WgogC2c2vVHrSHxRxuytCHiM+7NY0Tf2B6PxZJKOQUtfFxvHjWkHghnJWwHH2OP/ # lMnJUU+XAaAxsiEiDN4BSd0DSA6jn6/vg8SgXXEDyIDExq5jELVMgw2q1cbQJK1s # mOgr8FZZfnxvwYIFvH7PFiDm3A== # =bLPz # -----END PGP SIGNATURE----- # gpg: Signature made Tue 07 Nov 2023 18:14:49 HKT # gpg: using RSA key 87A9BD933F87C606D276F62DDAE8E10975969CE5 # gpg: issuer "marcandre.lureau@redhat.com" # gpg: Good signature from "Marc-André Lureau <marcandre.lureau@redhat.com>" [full] # gpg: aka "Marc-André Lureau <marcandre.lureau@gmail.com>" [full] # Primary key fingerprint: 87A9 BD93 3F87 C606 D276 F62D DAE8 E109 7596 9CE5 * tag 'pixman-pull-request' of https://gitlab.com/marcandre.lureau/qemu: (25 commits) build-sys: make pixman actually optional hw/display/ati: allow compiling without PIXMAN hw/mips: FULOONG depends on VT82C686 hw/sm501: allow compiling without PIXMAN hw/arm: XLNX_VERSAL depends on XLNX_CSU_DMA arm/kconfig: XLNX_ZYNQMP_ARM depends on PIXMAN ui/dbus: do not require PIXMAN ui/gtk: -display gtk requires PIXMAN ui/spice: SPICE/QXL requires PIXMAN ui/vnc: VNC requires PIXMAN ui/gl: opengl doesn't require PIXMAN vhost-user-gpu: skip VHOST_USER_GPU_UPDATE when !PIXMAN ui/console: when PIXMAN is unavailable, don't draw placeholder msg virtio-gpu: replace PIXMAN for region/rect test qmp/hmp: disable screendump if PIXMAN is missing ui/vc: console-vc requires PIXMAN ui/console: allow to override the default VC vl: move display early init before default devices vl: simplify display_remote logic qemu-options: define -vnc only #ifdef CONFIG_VNC ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
462ad017ed
29 changed files with 560 additions and 139 deletions
|
@ -450,7 +450,7 @@ config STM32F405_SOC
|
|||
|
||||
config XLNX_ZYNQMP_ARM
|
||||
bool
|
||||
default y
|
||||
default y if PIXMAN
|
||||
depends on TCG && AARCH64
|
||||
select AHCI
|
||||
select ARM_GIC
|
||||
|
@ -463,6 +463,7 @@ config XLNX_ZYNQMP_ARM
|
|||
select XILINX_AXI
|
||||
select XILINX_SPIPS
|
||||
select XLNX_CSU_DMA
|
||||
select XLNX_DISPLAYPORT
|
||||
select XLNX_ZYNQMP
|
||||
select XLNX_ZDMA
|
||||
select USB_DWC3
|
||||
|
@ -483,6 +484,7 @@ config XLNX_VERSAL
|
|||
select XLNX_EFUSE_VERSAL
|
||||
select XLNX_USB_SUBSYS
|
||||
select XLNX_VERSAL_TRNG
|
||||
select XLNX_CSU_DMA
|
||||
|
||||
config NPCM7XX
|
||||
bool
|
||||
|
|
|
@ -93,7 +93,7 @@ config VGA
|
|||
|
||||
config QXL
|
||||
bool
|
||||
depends on SPICE && PCI
|
||||
depends on SPICE && PCI && PIXMAN
|
||||
select VGA
|
||||
|
||||
config VIRTIO_GPU
|
||||
|
@ -134,3 +134,8 @@ config MACFB
|
|||
bool
|
||||
select FRAMEBUFFER
|
||||
depends on NUBUS
|
||||
|
||||
config XLNX_DISPLAYPORT
|
||||
bool
|
||||
# defaults to "N", enabled by specific boards
|
||||
depends on PIXMAN
|
||||
|
|
|
@ -32,6 +32,12 @@
|
|||
|
||||
#define ATI_DEBUG_HW_CURSOR 0
|
||||
|
||||
#ifdef CONFIG_PIXMAN
|
||||
#define DEFAULT_X_PIXMAN 3
|
||||
#else
|
||||
#define DEFAULT_X_PIXMAN 0
|
||||
#endif
|
||||
|
||||
static const struct {
|
||||
const char *name;
|
||||
uint16_t dev_id;
|
||||
|
@ -946,6 +952,12 @@ static void ati_vga_realize(PCIDevice *dev, Error **errp)
|
|||
ATIVGAState *s = ATI_VGA(dev);
|
||||
VGACommonState *vga = &s->vga;
|
||||
|
||||
#ifndef CONFIG_PIXMAN
|
||||
if (s->use_pixman != 0) {
|
||||
warn_report("x-pixman != 0, not effective without PIXMAN");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (s->model) {
|
||||
int i;
|
||||
for (i = 0; i < ARRAY_SIZE(ati_model_aliases); i++) {
|
||||
|
@ -1033,7 +1045,8 @@ static Property ati_vga_properties[] = {
|
|||
DEFINE_PROP_UINT16("x-device-id", ATIVGAState, dev_id,
|
||||
PCI_DEVICE_ID_ATI_RAGE128_PF),
|
||||
DEFINE_PROP_BOOL("guest_hwcursor", ATIVGAState, cursor_guest_mode, false),
|
||||
DEFINE_PROP_UINT8("x-pixman", ATIVGAState, use_pixman, 3),
|
||||
/* this is a debug option, prefer PROP_UINT over PROP_BIT for simplicity */
|
||||
DEFINE_PROP_UINT8("x-pixman", ATIVGAState, use_pixman, DEFAULT_X_PIXMAN),
|
||||
DEFINE_PROP_END_OF_LIST()
|
||||
};
|
||||
|
||||
|
|
|
@ -123,6 +123,7 @@ void ati_2d_blt(ATIVGAState *s)
|
|||
src_bits, dst_bits, src_stride, dst_stride, bpp, bpp,
|
||||
src_x, src_y, dst_x, dst_y,
|
||||
s->regs.dst_width, s->regs.dst_height);
|
||||
#ifdef CONFIG_PIXMAN
|
||||
if ((s->use_pixman & BIT(1)) &&
|
||||
s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT &&
|
||||
s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM) {
|
||||
|
@ -147,7 +148,9 @@ void ati_2d_blt(ATIVGAState *s)
|
|||
s->regs.dst_width, s->regs.dst_height);
|
||||
}
|
||||
g_free(tmp);
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
fallback = true;
|
||||
}
|
||||
if (fallback) {
|
||||
|
@ -206,9 +209,12 @@ void ati_2d_blt(ATIVGAState *s)
|
|||
DPRINTF("pixman_fill(%p, %d, %d, %d, %d, %d, %d, %x)\n",
|
||||
dst_bits, dst_stride, bpp, dst_x, dst_y,
|
||||
s->regs.dst_width, s->regs.dst_height, filler);
|
||||
#ifdef CONFIG_PIXMAN
|
||||
if (!(s->use_pixman & BIT(0)) ||
|
||||
!pixman_fill((uint32_t *)dst_bits, dst_stride, bpp, dst_x, dst_y,
|
||||
s->regs.dst_width, s->regs.dst_height, filler)) {
|
||||
s->regs.dst_width, s->regs.dst_height, filler))
|
||||
#endif
|
||||
{
|
||||
/* fallback when pixman failed or we don't want to call it */
|
||||
unsigned int x, y, i, bypp = bpp / 8;
|
||||
unsigned int dst_pitch = dst_stride * sizeof(uint32_t);
|
||||
|
|
|
@ -58,11 +58,11 @@ if config_all_devices.has_key('CONFIG_QXL')
|
|||
endif
|
||||
|
||||
system_ss.add(when: 'CONFIG_DPCD', if_true: files('dpcd.c'))
|
||||
system_ss.add(when: 'CONFIG_XLNX_ZYNQMP_ARM', if_true: files('xlnx_dp.c'))
|
||||
system_ss.add(when: 'CONFIG_XLNX_DISPLAYPORT', if_true: files('xlnx_dp.c'))
|
||||
|
||||
system_ss.add(when: 'CONFIG_ARTIST', if_true: files('artist.c'))
|
||||
|
||||
system_ss.add(when: [pixman, 'CONFIG_ATI_VGA'], if_true: files('ati.c', 'ati_2d.c', 'ati_dbg.c'))
|
||||
system_ss.add(when: 'CONFIG_ATI_VGA', if_true: [files('ati.c', 'ati_2d.c', 'ati_dbg.c'), pixman])
|
||||
|
||||
|
||||
if config_all_devices.has_key('CONFIG_VIRTIO_GPU')
|
||||
|
|
|
@ -438,6 +438,12 @@
|
|||
#define SM501_HWC_WIDTH 64
|
||||
#define SM501_HWC_HEIGHT 64
|
||||
|
||||
#ifdef CONFIG_PIXMAN
|
||||
#define DEFAULT_X_PIXMAN 7
|
||||
#else
|
||||
#define DEFAULT_X_PIXMAN 0
|
||||
#endif
|
||||
|
||||
/* SM501 local memory size taken from "linux/drivers/mfd/sm501.c" */
|
||||
static const uint32_t sm501_mem_local_size[] = {
|
||||
[0] = 4 * MiB,
|
||||
|
@ -730,7 +736,6 @@ static void sm501_2d_operation(SM501State *s)
|
|||
switch (cmd) {
|
||||
case 0: /* BitBlt */
|
||||
{
|
||||
static uint32_t tmp_buf[16384];
|
||||
unsigned int src_x = (s->twoD_source >> 16) & 0x01FFF;
|
||||
unsigned int src_y = s->twoD_source & 0xFFFF;
|
||||
uint32_t src_base = s->twoD_source_base & 0x03FFFFFF;
|
||||
|
@ -828,9 +833,11 @@ static void sm501_2d_operation(SM501State *s)
|
|||
de = db + (width + (height - 1) * dst_pitch) * bypp;
|
||||
overlap = (db < se && sb < de);
|
||||
}
|
||||
#ifdef CONFIG_PIXMAN
|
||||
if (overlap && (s->use_pixman & BIT(2))) {
|
||||
/* pixman can't do reverse blit: copy via temporary */
|
||||
int tmp_stride = DIV_ROUND_UP(width * bypp, sizeof(uint32_t));
|
||||
static uint32_t tmp_buf[16384];
|
||||
uint32_t *tmp = tmp_buf;
|
||||
|
||||
if (tmp_stride * sizeof(uint32_t) * height > sizeof(tmp_buf)) {
|
||||
|
@ -860,7 +867,9 @@ static void sm501_2d_operation(SM501State *s)
|
|||
dst_pitch * bypp / sizeof(uint32_t),
|
||||
8 * bypp, 8 * bypp, src_x, src_y,
|
||||
dst_x, dst_y, width, height);
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
fallback = true;
|
||||
}
|
||||
if (fallback) {
|
||||
|
@ -894,20 +903,23 @@ static void sm501_2d_operation(SM501State *s)
|
|||
color = cpu_to_le16(color);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PIXMAN
|
||||
if (!(s->use_pixman & BIT(0)) || (width == 1 && height == 1) ||
|
||||
!pixman_fill((uint32_t *)&s->local_mem[dst_base],
|
||||
dst_pitch * bypp / sizeof(uint32_t), 8 * bypp,
|
||||
dst_x, dst_y, width, height, color)) {
|
||||
/* fallback when pixman failed or we don't want to call it */
|
||||
uint8_t *d = s->local_mem + dst_base;
|
||||
unsigned int x, y, i;
|
||||
for (y = 0; y < height; y++) {
|
||||
i = (dst_x + (dst_y + y) * dst_pitch) * bypp;
|
||||
for (x = 0; x < width; x++, i += bypp) {
|
||||
stn_he_p(&d[i], bypp, color);
|
||||
dst_x, dst_y, width, height, color))
|
||||
#endif
|
||||
{
|
||||
/* fallback when pixman failed or we don't want to call it */
|
||||
uint8_t *d = s->local_mem + dst_base;
|
||||
unsigned int x, y, i;
|
||||
for (y = 0; y < height; y++) {
|
||||
i = (dst_x + (dst_y + y) * dst_pitch) * bypp;
|
||||
for (x = 0; x < width; x++, i += bypp) {
|
||||
stn_he_p(&d[i], bypp, color);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
@ -1878,6 +1890,12 @@ static void sm501_reset(SM501State *s)
|
|||
static void sm501_init(SM501State *s, DeviceState *dev,
|
||||
uint32_t local_mem_bytes)
|
||||
{
|
||||
#ifndef CONFIG_PIXMAN
|
||||
if (s->use_pixman != 0) {
|
||||
warn_report("x-pixman != 0, not effective without PIXMAN");
|
||||
}
|
||||
#endif
|
||||
|
||||
s->local_mem_size_index = get_local_mem_size_index(local_mem_bytes);
|
||||
|
||||
/* local memory */
|
||||
|
@ -2038,7 +2056,8 @@ static void sm501_realize_sysbus(DeviceState *dev, Error **errp)
|
|||
|
||||
static Property sm501_sysbus_properties[] = {
|
||||
DEFINE_PROP_UINT32("vram-size", SM501SysBusState, vram_size, 0),
|
||||
DEFINE_PROP_UINT8("x-pixman", SM501SysBusState, state.use_pixman, 7),
|
||||
/* this a debug option, prefer PROP_UINT over PROP_BIT for simplicity */
|
||||
DEFINE_PROP_UINT8("x-pixman", SM501SysBusState, state.use_pixman, DEFAULT_X_PIXMAN),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
|
@ -2126,7 +2145,7 @@ static void sm501_realize_pci(PCIDevice *dev, Error **errp)
|
|||
|
||||
static Property sm501_pci_properties[] = {
|
||||
DEFINE_PROP_UINT32("vram-size", SM501PCIState, vram_size, 64 * MiB),
|
||||
DEFINE_PROP_UINT8("x-pixman", SM501PCIState, state.use_pixman, 7),
|
||||
DEFINE_PROP_UINT8("x-pixman", SM501PCIState, state.use_pixman, DEFAULT_X_PIXMAN),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
};
|
||||
|
||||
|
|
|
@ -307,6 +307,7 @@ vhost_user_gpu_handle_display(VhostUserGPU *g, VhostUserGpuMsg *msg)
|
|||
dpy_gl_update(con, m->x, m->y, m->width, m->height);
|
||||
break;
|
||||
}
|
||||
#ifdef CONFIG_PIXMAN
|
||||
case VHOST_USER_GPU_UPDATE: {
|
||||
VhostUserGpuUpdate *m = &msg->payload.update;
|
||||
|
||||
|
@ -334,6 +335,7 @@ vhost_user_gpu_handle_display(VhostUserGPU *g, VhostUserGpuMsg *msg)
|
|||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
default:
|
||||
g_warning("unhandled message %d %d", msg->request, msg->size);
|
||||
}
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "qemu/iov.h"
|
||||
#include "sysemu/cpus.h"
|
||||
#include "ui/console.h"
|
||||
#include "ui/rect.h"
|
||||
#include "trace.h"
|
||||
#include "sysemu/dma.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
|
@ -503,7 +504,7 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
|
|||
struct virtio_gpu_simple_resource *res;
|
||||
struct virtio_gpu_resource_flush rf;
|
||||
struct virtio_gpu_scanout *scanout;
|
||||
pixman_region16_t flush_region;
|
||||
QemuRect flush_rect;
|
||||
bool within_bounds = false;
|
||||
bool update_submitted = false;
|
||||
int i;
|
||||
|
@ -565,34 +566,25 @@ static void virtio_gpu_resource_flush(VirtIOGPU *g,
|
|||
return;
|
||||
}
|
||||
|
||||
pixman_region_init_rect(&flush_region,
|
||||
rf.r.x, rf.r.y, rf.r.width, rf.r.height);
|
||||
qemu_rect_init(&flush_rect, rf.r.x, rf.r.y, rf.r.width, rf.r.height);
|
||||
for (i = 0; i < g->parent_obj.conf.max_outputs; i++) {
|
||||
pixman_region16_t region, finalregion;
|
||||
pixman_box16_t *extents;
|
||||
QemuRect rect;
|
||||
|
||||
if (!(res->scanout_bitmask & (1 << i))) {
|
||||
continue;
|
||||
}
|
||||
scanout = &g->parent_obj.scanout[i];
|
||||
|
||||
pixman_region_init(&finalregion);
|
||||
pixman_region_init_rect(®ion, scanout->x, scanout->y,
|
||||
scanout->width, scanout->height);
|
||||
qemu_rect_init(&rect, scanout->x, scanout->y,
|
||||
scanout->width, scanout->height);
|
||||
|
||||
pixman_region_intersect(&finalregion, &flush_region, ®ion);
|
||||
pixman_region_translate(&finalregion, -scanout->x, -scanout->y);
|
||||
extents = pixman_region_extents(&finalregion);
|
||||
/* work out the area we need to update for each console */
|
||||
dpy_gfx_update(g->parent_obj.scanout[i].con,
|
||||
extents->x1, extents->y1,
|
||||
extents->x2 - extents->x1,
|
||||
extents->y2 - extents->y1);
|
||||
|
||||
pixman_region_fini(®ion);
|
||||
pixman_region_fini(&finalregion);
|
||||
if (qemu_rect_intersect(&flush_rect, &rect, &rect)) {
|
||||
qemu_rect_translate(&rect, -scanout->x, -scanout->y);
|
||||
dpy_gfx_update(g->parent_obj.scanout[i].con,
|
||||
rect.x, rect.y, rect.width, rect.height);
|
||||
}
|
||||
}
|
||||
pixman_region_fini(&flush_region);
|
||||
}
|
||||
|
||||
static void virtio_unref_resource(pixman_image_t *image, void *data)
|
||||
|
|
|
@ -33,6 +33,7 @@ config JAZZ
|
|||
config FULOONG
|
||||
bool
|
||||
select PCI_BONITO
|
||||
select VT82C686
|
||||
|
||||
config LOONGSON3V
|
||||
bool
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue