Skip to content

Commit f6b89f0

Browse files
committed
add underlay support to vulkan
1 parent cf3c043 commit f6b89f0

2 files changed

Lines changed: 29 additions & 3 deletions

File tree

gfx/common/vulkan_common.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,8 @@ enum vk_flags
108108
VK_FLAG_READBACK_STREAMED = (1 << 13),
109109
VK_FLAG_OVERLAY_ENABLE = (1 << 14),
110110
VK_FLAG_OVERLAY_FULLSCREEN = (1 << 15),
111-
VK_FLAG_SDR_PIPELINE = (1 << 16)
111+
VK_FLAG_OVERLAY_BACKGROUND_FILL = (1 << 16),
112+
VK_FLAG_SDR_PIPELINE = (1 << 17)
112113
};
113114

114115
enum vk_texture_type

gfx/drivers/vulkan.c

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6761,7 +6761,18 @@ static bool vulkan_frame(void *data, const void *frame,
67616761
#endif /* VULKAN_HDR_SWAPCHAIN */
67626762

67636763
#ifdef HAVE_OVERLAY
6764-
if ((vk->flags & VK_FLAG_OVERLAY_ENABLE) && overlay_behind_menu)
6764+
/* Render background overlay (behind game viewport) */
6765+
if ((vk->flags & VK_FLAG_OVERLAY_ENABLE) && (vk->flags & VK_FLAG_OVERLAY_BACKGROUND_FILL))
6766+
{
6767+
uint64_t saved_flags = vk->flags & VK_FLAG_OVERLAY_FULLSCREEN;
6768+
6769+
vk->flags |= VK_FLAG_OVERLAY_FULLSCREEN;
6770+
vulkan_render_overlay(vk, video_width, video_height);
6771+
6772+
if (!saved_flags)
6773+
vk->flags &= ~VK_FLAG_OVERLAY_FULLSCREEN;
6774+
}
6775+
else if ((vk->flags & VK_FLAG_OVERLAY_ENABLE) && overlay_behind_menu)
67656776
vulkan_render_overlay(vk, video_width, video_height);
67666777
#endif
67676778

@@ -6818,7 +6829,8 @@ static bool vulkan_frame(void *data, const void *frame,
68186829
#endif
68196830

68206831
#ifdef HAVE_OVERLAY
6821-
if ((vk->flags & VK_FLAG_OVERLAY_ENABLE) && !overlay_behind_menu)
6832+
if ((vk->flags & VK_FLAG_OVERLAY_ENABLE) && !overlay_behind_menu
6833+
&& !(vk->flags & VK_FLAG_OVERLAY_BACKGROUND_FILL))
68226834
vulkan_render_overlay(vk, video_width, video_height);
68236835
#endif
68246836

@@ -7965,6 +7977,18 @@ static void vulkan_overlay_full_screen(void *data, bool enable)
79657977
vk->flags &= ~VK_FLAG_OVERLAY_FULLSCREEN;
79667978
}
79677979

7980+
static void vulkan_overlay_background_fill(void *data, bool enable)
7981+
{
7982+
vk_t *vk = (vk_t*)data;
7983+
if (!vk)
7984+
return;
7985+
7986+
if (enable)
7987+
vk->flags |= VK_FLAG_OVERLAY_BACKGROUND_FILL;
7988+
else
7989+
vk->flags &= ~VK_FLAG_OVERLAY_BACKGROUND_FILL;
7990+
}
7991+
79687992
static void vulkan_overlay_free(vk_t *vk)
79697993
{
79707994
int i;
@@ -8288,6 +8312,7 @@ static const video_overlay_interface_t vulkan_overlay_interface = {
82888312
vulkan_overlay_vertex_geom,
82898313
vulkan_overlay_full_screen,
82908314
vulkan_overlay_set_alpha,
8315+
vulkan_overlay_background_fill,
82918316
};
82928317

82938318
static void vulkan_get_overlay_interface(void *data,

0 commit comments

Comments
 (0)