Add Swappy & Pre-Transformed Swapchain
- Adds Swappy for Android for stable frame pacing - Implements pre-transformed Swapchain so that Godot's compositor is in charge of rotating the screen instead of Android's compositor (performance optimization for phones that don't have HW rotator) ============================ The work was performed by collaboration of TheForge and Google. I am merely splitting it up into smaller PRs and cleaning it up. Changes from original PR: - Removed "display/window/frame_pacing/android/target_frame_rate" option to use Engine::get_max_fps instead. - Target framerate can be changed at runtime using Engine::set_max_fps. - Swappy is enabled by default. - Added documentation. - enable_auto_swap setting is replaced with swappy_mode.
This commit is contained in:
@@ -142,6 +142,11 @@ class RenderingDeviceDriverVulkan : public RenderingDeviceDriver {
|
||||
bool device_fault_support = false;
|
||||
#if defined(VK_TRACK_DEVICE_MEMORY)
|
||||
bool device_memory_report_support = false;
|
||||
#endif
|
||||
#if defined(SWAPPY_FRAME_PACING_ENABLED)
|
||||
// Swappy frame pacer for Android.
|
||||
bool swappy_frame_pacer_enable = false;
|
||||
uint8_t swappy_mode = 2; // See default value for display/window/frame_pacing/android/swappy_mode.
|
||||
#endif
|
||||
DeviceFunctions device_functions;
|
||||
|
||||
@@ -350,9 +355,13 @@ private:
|
||||
LocalVector<uint32_t> command_queues_acquired_semaphores;
|
||||
RenderPassID render_pass;
|
||||
uint32_t image_index = 0;
|
||||
#ifdef ANDROID_ENABLED
|
||||
uint64_t refresh_duration = 0;
|
||||
#endif
|
||||
};
|
||||
|
||||
void _swap_chain_release(SwapChain *p_swap_chain);
|
||||
VkExtent2D native_display_size;
|
||||
|
||||
public:
|
||||
virtual SwapChainID swap_chain_create(RenderingContextDriver::SurfaceID p_surface) override final;
|
||||
@@ -360,6 +369,7 @@ public:
|
||||
virtual FramebufferID swap_chain_acquire_framebuffer(CommandQueueID p_cmd_queue, SwapChainID p_swap_chain, bool &r_resize_required) override final;
|
||||
virtual RenderPassID swap_chain_get_render_pass(SwapChainID p_swap_chain) override final;
|
||||
virtual DataFormat swap_chain_get_format(SwapChainID p_swap_chain) override final;
|
||||
virtual void swap_chain_set_max_fps(SwapChainID p_swap_chain, int p_max_fps) override final;
|
||||
virtual void swap_chain_free(SwapChainID p_swap_chain) override final;
|
||||
|
||||
/*********************/
|
||||
|
||||
Reference in New Issue
Block a user