blob: f913f07d99c3e7c1e93cf55341c5b0a74d03b54b [file] [log] [blame]
#ifndef VIRTGPU_GFXSTREAM_RENDERER_UNSTABLE_H
#define VIRTGPU_GFXSTREAM_RENDERER_UNSTABLE_H
#include "gfxstream/virtio-gpu-gfxstream-renderer.h"
#ifdef __cplusplus
extern "C" {
#endif
// Enables the host to control which memory types the guest will be allowed to map. For types not
// in the mask, the bits HOST_VISIBLE and HOST_COHERENT will be removed.
#define STREAM_RENDERER_PARAM_HOST_VISIBLE_MEMORY_MASK 8
// Skip android opengles initiation. Used by aemu to skip android opengles initiation.
// aemu does its own initialization in qemu/android/android/android-emu/android/opengles.cpp.
// TODO(joshuaduong): Migrate aemu to use stream_renderer_init without this hack. This will
// require adding more options to customize the feature flags, etc.
#define STREAM_RENDERER_SKIP_OPENGLES_INIT 10
// Information about one device's memory mask.
struct stream_renderer_param_host_visible_memory_mask_entry {
// Which device the mask applies to.
struct stream_renderer_device_id device_id;
// Memory types allowed to be host visible are 1, otherwise 0.
uint32_t memory_type_mask;
};
// Information about the devices in the system with host visible memory type constraints.
struct stream_renderer_param_host_visible_memory_mask {
// Points to a stream_renderer_param_host_visible_memory_mask_entry array.
uint64_t entries;
// Length of the entries array.
uint64_t num_entries;
};
// Enables the host to control which GPU is used for rendering.
#define STREAM_RENDERER_PARAM_RENDERING_GPU 9
// External callbacks for tracking metrics.
// Separating each function to a parameter allows new functions to be added later.
#define STREAM_RENDERER_PARAM_METRICS_CALLBACK_ADD_INSTANT_EVENT 1024
typedef void (*stream_renderer_param_metrics_callback_add_instant_event)(int64_t event_code);
#define STREAM_RENDERER_PARAM_METRICS_CALLBACK_ADD_INSTANT_EVENT_WITH_DESCRIPTOR 1025
typedef void (*stream_renderer_param_metrics_callback_add_instant_event_with_descriptor)(
int64_t event_code, int64_t descriptor);
#define STREAM_RENDERER_PARAM_METRICS_CALLBACK_ADD_INSTANT_EVENT_WITH_METRIC 1026
typedef void (*stream_renderer_param_metrics_callback_add_instant_event_with_metric)(
int64_t event_code, int64_t metric_value);
#define STREAM_RENDERER_PARAM_METRICS_CALLBACK_ADD_VULKAN_OUT_OF_MEMORY_EVENT 1027
typedef void (*stream_renderer_param_metrics_callback_add_vulkan_out_of_memory_event)(
int64_t result_code, uint32_t op_code, const char* function, uint32_t line,
uint64_t allocation_size, bool is_host_side_result, bool is_allocation);
// STREAM_RENDERER_PARAM_RENDERER_FEATURES: stream_renderer_param::value is a pointer to a null
// terminated string of the form "<feature1 name>:[enabled|disabled],<feature 2 ...>".
#define STREAM_RENDERER_PARAM_RENDERER_FEATURES 11
#define STREAM_RENDERER_PARAM_METRICS_CALLBACK_SET_ANNOTATION 1028
typedef void (*stream_renderer_param_metrics_callback_set_annotation)(const char* key,
const char* value);
#define STREAM_RENDERER_PARAM_METRICS_CALLBACK_ABORT 1029
typedef void (*stream_renderer_param_metrics_callback_abort)();
VG_EXPORT void gfxstream_backend_setup_window(void* native_window_handle, int32_t window_x,
int32_t window_y, int32_t window_width,
int32_t window_height, int32_t fb_width,
int32_t fb_height);
VG_EXPORT void stream_renderer_flush(uint32_t res_handle);
// Platform resources and contexts support
#define STREAM_RENDERER_PLATFORM_RESOURCE_USE_MASK 0xF0
#define STREAM_RENDERER_PLATFORM_RESOURCE_TYPE_MASK 0x0F
// types
#define STREAM_RENDERER_PLATFORM_RESOURCE_TYPE_EGL_NATIVE_PIXMAP 0x01
#define STREAM_RENDERER_PLATFORM_RESOURCE_TYPE_EGL_IMAGE 0x02
#define STREAM_RENDERER_PLATFORM_RESOURCE_TYPE_VK_EXT_MEMORY_HANDLE 0x03
// uses
#define STREAM_RENDERER_PLATFORM_RESOURCE_USE_PRESERVE 0x10
VG_EXPORT int stream_renderer_platform_import_resource(int res_handle, int res_info,
void* resource);
VG_EXPORT int stream_renderer_platform_resource_info(int res_handle, int* width, int* height,
int* internal_format);
VG_EXPORT void* stream_renderer_platform_create_shared_egl_context(void);
VG_EXPORT int stream_renderer_platform_destroy_shared_egl_context(void*);
struct stream_renderer_resource_info {
uint32_t handle;
uint32_t virgl_format;
uint32_t width;
uint32_t height;
uint32_t depth;
uint32_t flags;
uint32_t tex_id;
uint32_t stride;
int drm_fourcc;
};
VG_EXPORT int stream_renderer_resource_get_info(int res_handle,
struct stream_renderer_resource_info* info);
VG_EXPORT int stream_renderer_snapshot(const char* dir);
VG_EXPORT int stream_renderer_restore(const char* dir);
#ifdef __cplusplus
} // extern "C"
#endif
#endif