Skip to content

Commit

Permalink
ui/console: move DisplaySurface to its own header
Browse files Browse the repository at this point in the history
Mostly for readability reasons.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
  • Loading branch information
elmarco committed Sep 12, 2023
1 parent 6f11081 commit 6d8cd7c
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 83 deletions.
84 changes: 1 addition & 83 deletions include/ui/console.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@
#include "qemu/notify.h"
#include "qapi/qapi-types-ui.h"
#include "ui/input.h"

#ifdef CONFIG_OPENGL
# include <epoxy/gl.h>
# include "ui/shader.h"
#endif
#include "ui/surface.h"

#define TYPE_QEMU_CONSOLE "qemu-console"
OBJECT_DECLARE_TYPE(QemuConsole, QemuConsoleClass, QEMU_CONSOLE)
Expand Down Expand Up @@ -136,9 +132,6 @@ struct QemuConsoleClass {
ObjectClass parent_class;
};

#define QEMU_ALLOCATED_FLAG 0x01
#define QEMU_PLACEHOLDER_FLAG 0x02

typedef struct ScanoutTexture {
uint32_t backing_id;
bool backing_y_0_top;
Expand All @@ -151,20 +144,6 @@ typedef struct ScanoutTexture {
void *d3d_tex2d;
} ScanoutTexture;

typedef struct DisplaySurface {
pixman_image_t *image;
uint8_t flags;
#ifdef CONFIG_OPENGL
GLenum glformat;
GLenum gltype;
GLuint texture;
#endif
#ifdef WIN32
HANDLE handle;
uint32_t handle_offset;
#endif
} DisplaySurface;

typedef struct QemuUIInfo {
/* physical dimension */
uint16_t width_mm;
Expand Down Expand Up @@ -344,30 +323,6 @@ struct DisplayGLCtx {
};

DisplayState *init_displaystate(void);
DisplaySurface *qemu_create_displaysurface_from(int width, int height,
pixman_format_code_t format,
int linesize, uint8_t *data);
DisplaySurface *qemu_create_displaysurface_pixman(pixman_image_t *image);
DisplaySurface *qemu_create_placeholder_surface(int w, int h,
const char *msg);
#ifdef WIN32
void qemu_displaysurface_win32_set_handle(DisplaySurface *surface,
HANDLE h, uint32_t offset);
#endif
PixelFormat qemu_default_pixelformat(int bpp);

DisplaySurface *qemu_create_displaysurface(int width, int height);
void qemu_free_displaysurface(DisplaySurface *surface);

static inline int is_buffer_shared(DisplaySurface *surface)
{
return !(surface->flags & QEMU_ALLOCATED_FLAG);
}

static inline int is_placeholder(DisplaySurface *surface)
{
return surface->flags & QEMU_PLACEHOLDER_FLAG;
}

void register_displaychangelistener(DisplayChangeListener *dcl);
void update_displaychangelistener(DisplayChangeListener *dcl,
Expand Down Expand Up @@ -415,43 +370,6 @@ int dpy_gl_ctx_make_current(QemuConsole *con, QEMUGLContext ctx);

bool console_has_gl(QemuConsole *con);

static inline int surface_stride(DisplaySurface *s)
{
return pixman_image_get_stride(s->image);
}

static inline void *surface_data(DisplaySurface *s)
{
return pixman_image_get_data(s->image);
}

static inline int surface_width(DisplaySurface *s)
{
return pixman_image_get_width(s->image);
}

static inline int surface_height(DisplaySurface *s)
{
return pixman_image_get_height(s->image);
}

static inline pixman_format_code_t surface_format(DisplaySurface *s)
{
return pixman_image_get_format(s->image);
}

static inline int surface_bits_per_pixel(DisplaySurface *s)
{
int bits = PIXMAN_FORMAT_BPP(surface_format(s));
return bits;
}

static inline int surface_bytes_per_pixel(DisplaySurface *s)
{
int bits = PIXMAN_FORMAT_BPP(surface_format(s));
return DIV_ROUND_UP(bits, 8);
}

typedef uint32_t console_ch_t;

static inline void console_write_ch(console_ch_t *dest, uint32_t ch)
Expand Down
95 changes: 95 additions & 0 deletions include/ui/surface.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/*
* SPDX-License-Identifier: GPL-2.0-or-later
* QEMU UI Console
*/
#ifndef SURFACE_H
#define SURFACE_H

#include "ui/qemu-pixman.h"

#ifdef CONFIG_OPENGL
# include <epoxy/gl.h>
# include "ui/shader.h"
#endif

#define QEMU_ALLOCATED_FLAG 0x01
#define QEMU_PLACEHOLDER_FLAG 0x02

typedef struct DisplaySurface {
pixman_image_t *image;
uint8_t flags;
#ifdef CONFIG_OPENGL
GLenum glformat;
GLenum gltype;
GLuint texture;
#endif
#ifdef WIN32
HANDLE handle;
uint32_t handle_offset;
#endif
} DisplaySurface;

PixelFormat qemu_default_pixelformat(int bpp);

DisplaySurface *qemu_create_displaysurface_from(int width, int height,
pixman_format_code_t format,
int linesize, uint8_t *data);
DisplaySurface *qemu_create_displaysurface_pixman(pixman_image_t *image);
DisplaySurface *qemu_create_placeholder_surface(int w, int h,
const char *msg);
#ifdef WIN32
void qemu_displaysurface_win32_set_handle(DisplaySurface *surface,
HANDLE h, uint32_t offset);
#endif

DisplaySurface *qemu_create_displaysurface(int width, int height);
void qemu_free_displaysurface(DisplaySurface *surface);

static inline int is_buffer_shared(DisplaySurface *surface)
{
return !(surface->flags & QEMU_ALLOCATED_FLAG);
}

static inline int is_placeholder(DisplaySurface *surface)
{
return surface->flags & QEMU_PLACEHOLDER_FLAG;
}

static inline int surface_stride(DisplaySurface *s)
{
return pixman_image_get_stride(s->image);
}

static inline void *surface_data(DisplaySurface *s)
{
return pixman_image_get_data(s->image);
}

static inline int surface_width(DisplaySurface *s)
{
return pixman_image_get_width(s->image);
}

static inline int surface_height(DisplaySurface *s)
{
return pixman_image_get_height(s->image);
}

static inline pixman_format_code_t surface_format(DisplaySurface *s)
{
return pixman_image_get_format(s->image);
}

static inline int surface_bits_per_pixel(DisplaySurface *s)
{
int bits = PIXMAN_FORMAT_BPP(surface_format(s));
return bits;
}

static inline int surface_bytes_per_pixel(DisplaySurface *s)
{
int bits = PIXMAN_FORMAT_BPP(surface_format(s));
return DIV_ROUND_UP(bits, 8);
}

#endif

0 comments on commit 6d8cd7c

Please sign in to comment.