#include "qemu/osdep.h"
#include "qemu/units.h"
-#include "qemu-common.h"
#include "qemu/iov.h"
#include "ui/console.h"
#include "hw/virtio/virtio-gpu.h"
*virtio_gpu_create_dmabuf(VirtIOGPU *g,
uint32_t scanout_id,
struct virtio_gpu_simple_resource *res,
- struct virtio_gpu_framebuffer *fb)
+ struct virtio_gpu_framebuffer *fb,
+ struct virtio_gpu_rect *r)
{
VGPUDMABuf *dmabuf;
dmabuf->buf.width = fb->width;
dmabuf->buf.height = fb->height;
dmabuf->buf.stride = fb->stride;
+ dmabuf->buf.x = r->x;
+ dmabuf->buf.y = r->y;
+ dmabuf->buf.scanout_width = r->width;
+ dmabuf->buf.scanout_height = r->height;
dmabuf->buf.fourcc = qemu_pixman_to_drm_format(fb->format);
dmabuf->buf.fd = res->dmabuf_fd;
dmabuf->buf.allow_fences = true;
-
+ dmabuf->buf.draw_submitted = false;
dmabuf->scanout_id = scanout_id;
QTAILQ_INSERT_HEAD(&g->dmabuf.bufs, dmabuf, next);
int virtio_gpu_update_dmabuf(VirtIOGPU *g,
uint32_t scanout_id,
struct virtio_gpu_simple_resource *res,
- struct virtio_gpu_framebuffer *fb)
+ struct virtio_gpu_framebuffer *fb,
+ struct virtio_gpu_rect *r)
{
struct virtio_gpu_scanout *scanout = &g->parent_obj.scanout[scanout_id];
VGPUDMABuf *new_primary, *old_primary = NULL;
- new_primary = virtio_gpu_create_dmabuf(g, scanout_id, res, fb);
+ new_primary = virtio_gpu_create_dmabuf(g, scanout_id, res, fb, r);
if (!new_primary) {
return -EINVAL;
}
- if (g->dmabuf.primary) {
- old_primary = g->dmabuf.primary;
+ if (g->dmabuf.primary[scanout_id]) {
+ old_primary = g->dmabuf.primary[scanout_id];
}
- g->dmabuf.primary = new_primary;
+ g->dmabuf.primary[scanout_id] = new_primary;
qemu_console_resize(scanout->con,
- new_primary->buf.width,
- new_primary->buf.height);
+ new_primary->buf.scanout_width,
+ new_primary->buf.scanout_height);
dpy_gl_scanout_dmabuf(scanout->con, &new_primary->buf);
if (old_primary) {