#ifndef EMULATOR_INCLUDE_EMULATOR_GRAPHICS_VIDEOOUT_H_ #define EMULATOR_INCLUDE_EMULATOR_GRAPHICS_VIDEOOUT_H_ #include "common/common.h" // #include "common/subsystems.h" #include "common/abi.h" #include "kernel/eventQueue.h" namespace Libs::Graphics { // struct VulkanSwapchain; struct VideoOutVulkanImage; } // namespace Libs::Graphics namespace Libs::VideoOut { struct VideoOutBufferAttribute2; struct VideoOutFlipStatus; struct VideoOutVblankStatus; struct VideoOutOutputStatus; struct VideoOutOutputOptions; struct VideoOutBuffers; struct VideoOutColorSettings; void VideoOutInit(uint32_t width, uint32_t height); void VideoOutWaitFlipDone(int handle, int index); KYTY_SYSV_ABI int VideoOutOpen(int user_id, int bus_type, int index, const void* param); KYTY_SYSV_ABI int VideoOutClose(int handle); KYTY_SYSV_ABI void VideoOutSetBufferAttribute2(VideoOutBufferAttribute2* attribute, uint64_t pixel_format, uint32_t tiling_mode, uint32_t width, uint32_t height, uint64_t option, uint32_t dcc_control, uint64_t dcc_cb_register_clear_color); KYTY_SYSV_ABI int VideoOutSetFlipRate(int handle, int rate); KYTY_SYSV_ABI int VideoOutAddFlipEvent(LibKernel::EventQueue::KernelEqueue eq, int handle, void* udata); KYTY_SYSV_ABI int VideoOutAddVblankEvent(LibKernel::EventQueue::KernelEqueue eq, int handle, void* udata); KYTY_SYSV_ABI int VideoOutAddPreVblankStartEvent(LibKernel::EventQueue::KernelEqueue eq, int handle, void* udata); KYTY_SYSV_ABI int VideoOutAddOutputModeEvent(LibKernel::EventQueue::KernelEqueue eq, int handle, void* udata); KYTY_SYSV_ABI int VideoOutDeleteFlipEvent(LibKernel::EventQueue::KernelEqueue eq, int handle); KYTY_SYSV_ABI int VideoOutDeleteVblankEvent(LibKernel::EventQueue::KernelEqueue eq, int handle); KYTY_SYSV_ABI int VideoOutDeletePreVblankStartEvent(LibKernel::EventQueue::KernelEqueue eq, int handle); KYTY_SYSV_ABI int VideoOutRegisterBuffers2(int handle, int set_index, int buffer_index_start, const VideoOutBuffers* buffers, int buffer_num, const VideoOutBufferAttribute2* attribute, int category, void* option); KYTY_SYSV_ABI int VideoOutSubmitChangeBufferAttribute2(int handle, int set_index, const VideoOutBufferAttribute2* attribute, void* option); KYTY_SYSV_ABI int VideoOutUnregisterBuffers(int handle, int set_index); KYTY_SYSV_ABI int VideoOutSubmitFlip(int handle, int index, int flip_mode, int64_t flip_arg); KYTY_SYSV_ABI int VideoOutGetFlipStatus(int handle, VideoOutFlipStatus* status); KYTY_SYSV_ABI int VideoOutIsFlipPending(int handle); KYTY_SYSV_ABI int VideoOutGetVblankStatus(int handle, VideoOutVblankStatus* status); KYTY_SYSV_ABI int VideoOutGetEventId(const LibKernel::EventQueue::KernelEvent* ev); KYTY_SYSV_ABI int VideoOutGetEventData(const LibKernel::EventQueue::KernelEvent* ev, int64_t* data); KYTY_SYSV_ABI int VideoOutGetEventCount(const LibKernel::EventQueue::KernelEvent* ev); KYTY_SYSV_ABI int VideoOutWaitVblank(int handle); KYTY_SYSV_ABI int VideoOutGetOutputStatus(int handle, VideoOutOutputStatus* status); KYTY_SYSV_ABI int VideoOutInitializeOutputOptions(VideoOutOutputOptions* options); KYTY_SYSV_ABI int VideoOutIsOutputSupported(int handle, uint64_t mode, const VideoOutOutputOptions* options, void* reserved_ptr, uint64_t reserved); KYTY_SYSV_ABI int VideoOutConfigureOutput(int handle, uint64_t mode, const VideoOutOutputOptions* options, void* reserved_ptr, uint64_t reserved); KYTY_SYSV_ABI int VideoOutSetWindowModeMargins(int handle, int top, int bottom); KYTY_SYSV_ABI int VideoOutLatencyControlWaitBeforeInput(int handle); KYTY_SYSV_ABI int VideoOutLatencyMeasureSetStartPoint(int handle, uint32_t point); KYTY_SYSV_ABI int VideoOutColorSettingsSetGamma(VideoOutColorSettings* settings, float gamma); KYTY_SYSV_ABI int VideoOutAdjustColor(int handle, const VideoOutColorSettings* settings); void VideoOutBeginVblank(); void VideoOutEndVblank(); bool VideoOutFlipWindow(uint32_t micros); } // namespace Libs::VideoOut #endif /* EMULATOR_INCLUDE_EMULATOR_GRAPHICS_VIDEOOUT_H_ */