mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-26 21:10:42 +00:00
vga: fix qxl modular build.
vga: add support for virtio-gpu modular builds. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABCgAGBQJfYLzlAAoJEEy22O7T6HE4vN0P/0c4XugdxErBoiO+1ZDQ9u6Y C2B1rGilpyWfVAEIrTFLtt8gUEfY5buZna8ztAP2put0dh+rygpehbQio1VrfGCU 3NjvRocVRGutHXAhMI8hVPeb1r3Dq9wJlAIwVhllxJvfDuG6sQkC5bsBFQLjMC3/ KAYlXr+vyNlCKU1nQH9pgGuNzi+43508GV8ZHLg6U+K7UDErBFUT/j3yVi23IWED j8QAdSdZHv93Tggvsg11ydY6jTfJM3IQtDKSYzTx4kwLPeJ297zaGRchku/+KreQ vwNlJ93qWTbXTQFJ3DeEuYVXQuCSs+I0P9eMQJFlMkYTwBtUaHvLYkyHN8cOmfGV 9TdVswdTSFYsLEBHY6ZotzBUEEmhOpcoM7AxRCzmgC/JLE6NVqAv9flVF8TpcbS0 cdiTaoc86nYqNfPjuZG8TCklo4XHQdluSW0VxvCtwyU8HK54sWs4TO25OwVTr/rP VSZWOwkJLSM0k8QrkK4dtmLhLefpd/B91qrD3MUdhKkSPXlK8VZtCwPiTLRr8tbA 1aPuxxkniEb3miYjjnR7rQcP9CWI4ulLaDgY1js2yX31PJRAGf2emZ0eQEc7nbVI yFnEVBElsCeHLbMoLRBMxZMhbD5ICUqudzkKFrmaR2yV66l5qoehhDGziKePQTD6 CqT9I9SORBVlpAvFJQNs =SYNP -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kraxel/tags/vga-20200915-pull-request' into staging vga: fix qxl modular build. vga: add support for virtio-gpu modular builds. # gpg: Signature made Tue 15 Sep 2020 14:08:53 BST # gpg: using RSA key 4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full] # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full] # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full] # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/vga-20200915-pull-request: virtio-gpu: build modular virtio-gpu: make virtio_gpu_ops static object_initialize: try module load meson: remove duplicate qxl sources meson: fix module config meson: fix qxl dependencies Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
de39a045bd
@ -41,12 +41,11 @@ specific_ss.add(when: 'CONFIG_VGA', if_true: files('vga.c'))
|
||||
|
||||
if config_all_devices.has_key('CONFIG_QXL')
|
||||
qxl_ss = ss.source_set()
|
||||
qxl_ss.add(when: 'CONFIG_QXL', if_true: files('qxl.c', 'qxl-logger.c', 'qxl-render.c'))
|
||||
qxl_ss.add(when: 'CONFIG_QXL', if_true: [files('qxl.c', 'qxl-logger.c', 'qxl-render.c'),
|
||||
pixman, spice])
|
||||
hw_display_modules += {'qxl': qxl_ss}
|
||||
endif
|
||||
|
||||
softmmu_ss.add(when: 'CONFIG_QXL', if_true: files('qxl.c', 'qxl-logger.c', 'qxl-render.c'))
|
||||
|
||||
softmmu_ss.add(when: 'CONFIG_DPCD', if_true: files('dpcd.c'))
|
||||
softmmu_ss.add(when: 'CONFIG_XLNX_ZYNQMP_ARM', if_true: files('xlnx_dp.c'))
|
||||
|
||||
@ -60,24 +59,14 @@ if config_all_devices.has_key('CONFIG_VIRTIO_GPU')
|
||||
virtio_gpu_ss.add(when: 'CONFIG_VIRTIO_GPU',
|
||||
if_true: [files('virtio-gpu-base.c', 'virtio-gpu.c', 'virtio-gpu-3d.c'), pixman, virgl])
|
||||
virtio_gpu_ss.add(when: 'CONFIG_VHOST_USER_GPU', if_true: files('vhost-user-gpu.c'))
|
||||
virtio_gpu_ss.add(when: ['CONFIG_VIRTIO_GPU', 'CONFIG_VIRTIO_PCI'], if_true: files('virtio-gpu-pci.c'))
|
||||
virtio_gpu_ss.add(when: ['CONFIG_VHOST_USER_GPU', 'CONFIG_VIRTIO_PCI'], if_true: files('vhost-user-gpu-pci.c'))
|
||||
virtio_gpu_ss.add(when: 'CONFIG_VIRTIO_VGA', if_true: files('virtio-vga.c'))
|
||||
virtio_gpu_ss.add(when: 'CONFIG_VHOST_USER_VGA', if_true: files('vhost-user-vga.c'))
|
||||
|
||||
# FIXME: this was attempted in the Makefile build system; it was then reverted
|
||||
# as it would try to load all devices when the module is loaded, even if
|
||||
# config_devices for this target only has some of them. Since virtio-gpu-pci
|
||||
# and virtio-vga both instantiate a virtio-gpu-device, fixing it probably does
|
||||
# not even require a dependency system, just splitting the module in three
|
||||
# for CONFIG_VIRTIO_GPU/CONFIG_VHOST_USER_GPU, CONFIG_VIRTIO_PCI and
|
||||
# CONFIG_VIRTIO_VGA/CONFIG_VHOST_USER_VGA.
|
||||
# Sourcesets are a dime a dozen, so keep it and just disable module builds.
|
||||
|
||||
#hw_display_modules += {'virtio-gpu': virtio_gpu_ss}
|
||||
softmmu_ss.add_all(virtio_gpu_ss)
|
||||
hw_display_modules += {'virtio-gpu': virtio_gpu_ss}
|
||||
endif
|
||||
|
||||
softmmu_ss.add(when: ['CONFIG_VIRTIO_GPU', 'CONFIG_VIRTIO_PCI'], if_true: files('virtio-gpu-pci.c'))
|
||||
softmmu_ss.add(when: ['CONFIG_VHOST_USER_GPU', 'CONFIG_VIRTIO_PCI'], if_true: files('vhost-user-gpu-pci.c'))
|
||||
softmmu_ss.add(when: 'CONFIG_VIRTIO_VGA', if_true: files('virtio-vga.c'))
|
||||
softmmu_ss.add(when: 'CONFIG_VHOST_USER_VGA', if_true: files('vhost-user-vga.c'))
|
||||
|
||||
specific_ss.add(when: [x11, opengl, 'CONFIG_MILKYMIST_TMU2'], if_true: files('milkymist-tmu2.c'))
|
||||
specific_ss.add(when: 'CONFIG_OMAP', if_true: files('omap_lcdc.c'))
|
||||
|
||||
|
@ -112,7 +112,7 @@ virtio_gpu_gl_block(void *opaque, bool block)
|
||||
}
|
||||
}
|
||||
|
||||
const GraphicHwOps virtio_gpu_ops = {
|
||||
static const GraphicHwOps virtio_gpu_ops = {
|
||||
.invalidate = virtio_gpu_invalidate_display,
|
||||
.gfx_update = virtio_gpu_update_display,
|
||||
.text_update = virtio_gpu_text_update,
|
||||
@ -162,6 +162,7 @@ virtio_gpu_base_device_realize(DeviceState *qdev,
|
||||
g->req_state[0].width = g->conf.xres;
|
||||
g->req_state[0].height = g->conf.yres;
|
||||
|
||||
g->hw_ops = &virtio_gpu_ops;
|
||||
for (i = 0; i < g->conf.max_outputs; i++) {
|
||||
g->scanout[i].con =
|
||||
graphic_console_init(DEVICE(g), i, &virtio_gpu_ops, g);
|
||||
|
@ -13,7 +13,7 @@ static void virtio_vga_base_invalidate_display(void *opaque)
|
||||
VirtIOGPUBase *g = vvga->vgpu;
|
||||
|
||||
if (g->enable) {
|
||||
virtio_gpu_ops.invalidate(g);
|
||||
g->hw_ops->invalidate(g);
|
||||
} else {
|
||||
vvga->vga.hw_ops->invalidate(&vvga->vga);
|
||||
}
|
||||
@ -25,7 +25,7 @@ static void virtio_vga_base_update_display(void *opaque)
|
||||
VirtIOGPUBase *g = vvga->vgpu;
|
||||
|
||||
if (g->enable) {
|
||||
virtio_gpu_ops.gfx_update(g);
|
||||
g->hw_ops->gfx_update(g);
|
||||
} else {
|
||||
vvga->vga.hw_ops->gfx_update(&vvga->vga);
|
||||
}
|
||||
@ -37,8 +37,8 @@ static void virtio_vga_base_text_update(void *opaque, console_ch_t *chardata)
|
||||
VirtIOGPUBase *g = vvga->vgpu;
|
||||
|
||||
if (g->enable) {
|
||||
if (virtio_gpu_ops.text_update) {
|
||||
virtio_gpu_ops.text_update(g, chardata);
|
||||
if (g->hw_ops->text_update) {
|
||||
g->hw_ops->text_update(g, chardata);
|
||||
}
|
||||
} else {
|
||||
if (vvga->vga.hw_ops->text_update) {
|
||||
@ -52,8 +52,8 @@ static int virtio_vga_base_ui_info(void *opaque, uint32_t idx, QemuUIInfo *info)
|
||||
VirtIOVGABase *vvga = opaque;
|
||||
VirtIOGPUBase *g = vvga->vgpu;
|
||||
|
||||
if (virtio_gpu_ops.ui_info) {
|
||||
return virtio_gpu_ops.ui_info(g, idx, info);
|
||||
if (g->hw_ops->ui_info) {
|
||||
return g->hw_ops->ui_info(g, idx, info);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
@ -63,8 +63,8 @@ static void virtio_vga_base_gl_block(void *opaque, bool block)
|
||||
VirtIOVGABase *vvga = opaque;
|
||||
VirtIOGPUBase *g = vvga->vgpu;
|
||||
|
||||
if (virtio_gpu_ops.gl_block) {
|
||||
virtio_gpu_ops.gl_block(g, block);
|
||||
if (g->hw_ops->gl_block) {
|
||||
g->hw_ops->gl_block(g, block);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -106,6 +106,7 @@ struct VirtIOGPUBase {
|
||||
|
||||
struct virtio_gpu_base_conf conf;
|
||||
struct virtio_gpu_config virtio_config;
|
||||
const GraphicHwOps *hw_ops;
|
||||
|
||||
bool use_virgl_renderer;
|
||||
int renderer_blocked;
|
||||
@ -171,8 +172,6 @@ struct VhostUserGPU {
|
||||
bool backend_blocked;
|
||||
};
|
||||
|
||||
extern const GraphicHwOps virtio_gpu_ops;
|
||||
|
||||
#define VIRTIO_GPU_FILL_CMD(out) do { \
|
||||
size_t s; \
|
||||
s = iov_to_buf(cmd->elem.out_sg, cmd->elem.out_num, 0, \
|
||||
|
@ -913,7 +913,7 @@ softmmu_mods = []
|
||||
foreach d, list : modules
|
||||
foreach m, module_ss : list
|
||||
if enable_modules and targetos != 'windows'
|
||||
module_ss = module_ss.apply(config_host, strict: false)
|
||||
module_ss = module_ss.apply(config_all, strict: false)
|
||||
sl = static_library(d + '-' + m, [genh, module_ss.sources()],
|
||||
dependencies: [modulecommon, module_ss.dependencies()], pic: true)
|
||||
if d == 'block'
|
||||
|
@ -518,6 +518,12 @@ void object_initialize(void *data, size_t size, const char *typename)
|
||||
{
|
||||
TypeImpl *type = type_get_by_name(typename);
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
if (!type) {
|
||||
module_load_qom_one(typename);
|
||||
type = type_get_by_name(typename);
|
||||
}
|
||||
#endif
|
||||
if (!type) {
|
||||
error_report("missing object type '%s'", typename);
|
||||
abort();
|
||||
|
@ -265,6 +265,8 @@ static struct {
|
||||
{ "usb-redir", "hw-", "usb-redirect" },
|
||||
{ "qxl-vga", "hw-", "display-qxl" },
|
||||
{ "qxl", "hw-", "display-qxl" },
|
||||
{ "virtio-gpu-device", "hw-", "display-virtio-gpu" },
|
||||
{ "vhost-user-gpu", "hw-", "display-virtio-gpu" },
|
||||
{ "chardev-braille", "chardev-", "baum" },
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user