74 lines
2.2 KiB
Objective-C
74 lines
2.2 KiB
Objective-C
/*
|
|
* Data structures and functions shared between variants of the macOS
|
|
* ParavirtualizedGraphics.framework based apple-gfx display adapter.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
#ifndef QEMU_APPLE_GFX_H
|
|
#define QEMU_APPLE_GFX_H
|
|
|
|
#include "qemu/queue.h"
|
|
#include "exec/memory.h"
|
|
#include "hw/qdev-properties.h"
|
|
#include "ui/surface.h"
|
|
|
|
#define TYPE_APPLE_GFX_MMIO "apple-gfx-mmio"
|
|
#define TYPE_APPLE_GFX_PCI "apple-gfx-pci"
|
|
|
|
@class PGDeviceDescriptor;
|
|
@protocol PGDevice;
|
|
@protocol PGDisplay;
|
|
@protocol MTLDevice;
|
|
@protocol MTLTexture;
|
|
@protocol MTLCommandQueue;
|
|
|
|
typedef QTAILQ_HEAD(, PGTask_s) PGTaskList;
|
|
|
|
typedef struct AppleGFXDisplayMode {
|
|
uint16_t width_px;
|
|
uint16_t height_px;
|
|
uint16_t refresh_rate_hz;
|
|
} AppleGFXDisplayMode;
|
|
|
|
typedef struct AppleGFXState {
|
|
/* Initialised on init/realize() */
|
|
MemoryRegion iomem_gfx;
|
|
id<PGDevice> pgdev;
|
|
id<PGDisplay> pgdisp;
|
|
QemuConsole *con;
|
|
id<MTLDevice> mtl;
|
|
id<MTLCommandQueue> mtl_queue;
|
|
AppleGFXDisplayMode *display_modes;
|
|
uint32_t num_display_modes;
|
|
|
|
/* List `tasks` is protected by task_mutex */
|
|
QemuMutex task_mutex;
|
|
PGTaskList tasks;
|
|
|
|
/* Mutable state (BQL protected) */
|
|
QEMUCursor *cursor;
|
|
DisplaySurface *surface;
|
|
id<MTLTexture> texture;
|
|
int8_t pending_frames; /* # guest frames in the rendering pipeline */
|
|
bool gfx_update_requested; /* QEMU display system wants a new frame */
|
|
bool new_frame_ready; /* Guest has rendered a frame, ready to be used */
|
|
bool using_managed_texture_storage;
|
|
uint32_t rendering_frame_width;
|
|
uint32_t rendering_frame_height;
|
|
|
|
/* Mutable state (atomic) */
|
|
bool cursor_show;
|
|
} AppleGFXState;
|
|
|
|
void apple_gfx_common_init(Object *obj, AppleGFXState *s, const char* obj_name);
|
|
bool apple_gfx_common_realize(AppleGFXState *s, DeviceState *dev,
|
|
PGDeviceDescriptor *desc, Error **errp);
|
|
void *apple_gfx_host_ptr_for_gpa_range(uint64_t guest_physical,
|
|
uint64_t length, bool read_only,
|
|
MemoryRegion **mapping_in_region);
|
|
|
|
extern const PropertyInfo qdev_prop_apple_gfx_display_mode;
|
|
|
|
#endif
|
|
|