mirror of
https://github.com/libretro/RetroArch
synced 2025-03-26 02:37:23 +00:00
Cleanups
This commit is contained in:
parent
c105fb22f3
commit
7205d76ab0
@ -40,6 +40,12 @@
|
|||||||
|
|
||||||
#define VULKAN_DIRTY_DYNAMIC_BIT 0x0001
|
#define VULKAN_DIRTY_DYNAMIC_BIT 0x0001
|
||||||
|
|
||||||
|
enum vulkan_wsi_type
|
||||||
|
{
|
||||||
|
VULKAN_WSI_NONE = 0,
|
||||||
|
VULKAN_WSI_WAYLAND
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct vulkan_context
|
typedef struct vulkan_context
|
||||||
{
|
{
|
||||||
VkInstance instance;
|
VkInstance instance;
|
||||||
|
@ -216,20 +216,19 @@ static const struct wl_registry_listener registry_listener = {
|
|||||||
registry_handle_global_remove,
|
registry_handle_global_remove,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void gfx_ctx_wl_get_video_size(void *data,
|
static void gfx_ctx_wl_get_video_size(void *data,
|
||||||
unsigned *width, unsigned *height);
|
unsigned *width, unsigned *height);
|
||||||
|
|
||||||
|
#ifdef HAVE_VULKAN
|
||||||
|
static void vulkan_destroy_context(gfx_ctx_vulkan_data_t *vk,
|
||||||
|
bool destroy_surface);
|
||||||
|
#endif
|
||||||
|
|
||||||
static void gfx_ctx_wl_destroy_resources(gfx_ctx_wayland_data_t *wl)
|
static void gfx_ctx_wl_destroy_resources(gfx_ctx_wayland_data_t *wl)
|
||||||
{
|
{
|
||||||
unsigned i;
|
|
||||||
|
|
||||||
if (!wl)
|
if (!wl)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
(void)i;
|
|
||||||
|
|
||||||
switch (wl_api)
|
switch (wl_api)
|
||||||
{
|
{
|
||||||
case GFX_CTX_OPENGL_API:
|
case GFX_CTX_OPENGL_API:
|
||||||
@ -244,38 +243,7 @@ static void gfx_ctx_wl_destroy_resources(gfx_ctx_wayland_data_t *wl)
|
|||||||
break;
|
break;
|
||||||
case GFX_CTX_VULKAN_API:
|
case GFX_CTX_VULKAN_API:
|
||||||
#ifdef HAVE_VULKAN
|
#ifdef HAVE_VULKAN
|
||||||
if (wl->vk.context.queue)
|
vulkan_destroy_context(&wl->vk, wl->surface);
|
||||||
vkQueueWaitIdle(wl->vk.context.queue);
|
|
||||||
if (wl->vk.swapchain)
|
|
||||||
wl->vk.fpDestroySwapchainKHR(wl->vk.context.device,
|
|
||||||
wl->vk.swapchain, NULL);
|
|
||||||
|
|
||||||
if (wl->surface)
|
|
||||||
wl->vk.fpDestroySurfaceKHR(wl->vk.context.instance,
|
|
||||||
wl->vk.vk_surface, NULL);
|
|
||||||
|
|
||||||
for (i = 0; i < VULKAN_MAX_SWAPCHAIN_IMAGES; i++)
|
|
||||||
{
|
|
||||||
if (wl->vk.context.swapchain_semaphores[i] != VK_NULL_HANDLE)
|
|
||||||
vkDestroySemaphore(wl->vk.context.device,
|
|
||||||
wl->vk.context.swapchain_semaphores[i], NULL);
|
|
||||||
if (wl->vk.context.swapchain_fences[i] != VK_NULL_HANDLE)
|
|
||||||
vkDestroyFence(wl->vk.context.device,
|
|
||||||
wl->vk.context.swapchain_fences[i], NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (video_driver_ctl(RARCH_DISPLAY_CTL_IS_VIDEO_CACHE_CONTEXT, NULL))
|
|
||||||
{
|
|
||||||
cached_device = wl->vk.context.device;
|
|
||||||
cached_instance = wl->vk.context.instance;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (wl->vk.context.device)
|
|
||||||
vkDestroyDevice(wl->vk.context.device, NULL);
|
|
||||||
if (wl->vk.context.instance)
|
|
||||||
vkDestroyInstance(wl->vk.context.instance, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wl->fd >= 0)
|
if (wl->fd >= 0)
|
||||||
close(wl->fd);
|
close(wl->fd);
|
||||||
@ -311,8 +279,8 @@ static void gfx_ctx_wl_destroy_resources(gfx_ctx_wayland_data_t *wl)
|
|||||||
wl->shell_surf = NULL;
|
wl->shell_surf = NULL;
|
||||||
wl->surface = NULL;
|
wl->surface = NULL;
|
||||||
|
|
||||||
wl->width = 0;
|
wl->width = 0;
|
||||||
wl->height = 0;
|
wl->height = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void flush_wayland_fd(gfx_ctx_wayland_data_t *wl)
|
static void flush_wayland_fd(gfx_ctx_wayland_data_t *wl)
|
||||||
@ -472,10 +440,41 @@ static void gfx_ctx_wl_get_video_size(void *data,
|
|||||||
} \
|
} \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
static void vulkan_destroy_context(gfx_ctx_vulkan_data_t *vk)
|
static void vulkan_destroy_context(gfx_ctx_vulkan_data_t *vk, bool destroy_surface)
|
||||||
{
|
{
|
||||||
if (vk->context.queue_lock)
|
unsigned i;
|
||||||
slock_free(vk->context.queue_lock);
|
if (vk->context.queue)
|
||||||
|
vkQueueWaitIdle(vk->context.queue);
|
||||||
|
if (vk->swapchain)
|
||||||
|
vk->fpDestroySwapchainKHR(vk->context.device,
|
||||||
|
vk->swapchain, NULL);
|
||||||
|
|
||||||
|
if (destroy_surface)
|
||||||
|
vk->fpDestroySurfaceKHR(vk->context.instance,
|
||||||
|
vk->vk_surface, NULL);
|
||||||
|
|
||||||
|
for (i = 0; i < VULKAN_MAX_SWAPCHAIN_IMAGES; i++)
|
||||||
|
{
|
||||||
|
if (vk->context.swapchain_semaphores[i] != VK_NULL_HANDLE)
|
||||||
|
vkDestroySemaphore(vk->context.device,
|
||||||
|
vk->context.swapchain_semaphores[i], NULL);
|
||||||
|
if (vk->context.swapchain_fences[i] != VK_NULL_HANDLE)
|
||||||
|
vkDestroyFence(vk->context.device,
|
||||||
|
vk->context.swapchain_fences[i], NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (video_driver_ctl(RARCH_DISPLAY_CTL_IS_VIDEO_CACHE_CONTEXT, NULL))
|
||||||
|
{
|
||||||
|
cached_device = vk->context.device;
|
||||||
|
cached_instance = vk->context.instance;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (vk->context.device)
|
||||||
|
vkDestroyDevice(vk->context.device, NULL);
|
||||||
|
if (vk->context.instance)
|
||||||
|
vkDestroyInstance(vk->context.instance, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool vulkan_init_context(gfx_ctx_vulkan_data_t *vk)
|
static bool vulkan_init_context(gfx_ctx_vulkan_data_t *vk)
|
||||||
@ -860,7 +859,8 @@ static void gfx_ctx_wl_destroy(void *data)
|
|||||||
{
|
{
|
||||||
case GFX_CTX_VULKAN_API:
|
case GFX_CTX_VULKAN_API:
|
||||||
#ifdef HAVE_VULKAN
|
#ifdef HAVE_VULKAN
|
||||||
vulkan_destroy_context(&wl->vk);
|
if (wl->vk.context.queue_lock)
|
||||||
|
slock_free(wl->vk.context.queue_lock);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case GFX_CTX_NONE:
|
case GFX_CTX_NONE:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user