From 7e796649557bfeae6eccba751d4a1ffae75de45c Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Tue, 12 Aug 2025 17:47:45 -0400 Subject: Runtime codec selection, Vulkan deconstruction Signed-off-by: Andrew Opalach --- src/render/queue_libplacebo.c | 2 +- src/render/renderer.h | 1 + src/render/renderer_libplacebo.c | 15 +++++++++++---- src/render/renderer_libplacebo.h | 1 + 4 files changed, 14 insertions(+), 5 deletions(-) (limited to 'src/render') diff --git a/src/render/queue_libplacebo.c b/src/render/queue_libplacebo.c index 1864607..01cd366 100644 --- a/src/render/queue_libplacebo.c +++ b/src/render/queue_libplacebo.c @@ -62,7 +62,7 @@ static bool map_frame(pl_gpu gpu, pl_tex *tex, const struct pl_source_frame *src masks[3] = 0xff000000; pixel_stride = 4; break; - case CAMU_PIXEL_FORMAT_RGB8: + case CAMU_PIXEL_FORMAT_RGB24: masks[0] = 0x000000ff; masks[1] = 0x0000ff00; masks[2] = 0x00ff0000; diff --git a/src/render/renderer.h b/src/render/renderer.h index 8e80696..bbb7b70 100644 --- a/src/render/renderer.h +++ b/src/render/renderer.h @@ -38,6 +38,7 @@ struct camu_renderer { #if defined STELA_API_VULKAN VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL (*get_vk_proc_address)(VkInstance, const char *), VkResult (*vk_create_surface)(void *, VkInstance, VkSurfaceKHR *), + VkResult (*vk_destroy_surface)(VkInstance, VkSurfaceKHR), const char *const *(*vk_get_extensions)(u32 *), #elif defined STELA_API_DX11 HWND win32_window, diff --git a/src/render/renderer_libplacebo.c b/src/render/renderer_libplacebo.c index c5f4de8..cdf09bf 100644 --- a/src/render/renderer_libplacebo.c +++ b/src/render/renderer_libplacebo.c @@ -119,6 +119,7 @@ static bool renderer_lp_create_renderer(struct camu_renderer *renderer, u32 *wid #if defined STELA_API_VULKAN VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL (*get_vk_proc_address)(VkInstance, const char *), VkResult (*vk_create_surface)(void *, VkInstance, VkSurfaceKHR *), + VkResult (*vk_destroy_surface)(VkInstance, VkSurfaceKHR), const char *const *(*vk_get_extensions)(u32 *), #elif defined STELA_API_DX11 HWND win32_window, @@ -159,7 +160,7 @@ static bool renderer_lp_create_renderer(struct camu_renderer *renderer, u32 *wid )); #if defined STELA_API_VULKAN - VkResult err; + lr->vk_destroy_surface = vk_destroy_surface; u32 num; const char *const *extensions = vk_get_extensions(&num); @@ -174,8 +175,8 @@ static bool renderer_lp_create_renderer(struct camu_renderer *renderer, u32 *wid goto err; } - err = vk_create_surface(priv, lr->vk_inst->instance, &lr->surface); - if (err != VK_SUCCESS) { + VkResult ret = vk_create_surface(priv, lr->vk_inst->instance, &lr->surface); + if (ret != VK_SUCCESS) { log_error("Failed to create vulkan surface."); goto err; } @@ -333,6 +334,7 @@ static struct camu_frame_queue *renderer_lp_create_queue(struct camu_renderer *r static void renderer_lp_add_font(struct camu_renderer *renderer, struct camu_codec_stream *attachment) { struct camu_renderer_lp *lr = (struct camu_renderer_lp *)renderer; + // @TODO: No FFmpeg + HAVE_SUBTITLES (no usecase yet). #ifdef CAMU_HAVE_SUBTITLES AVStream *stream = attachment->av.stream; AVDictionaryEntry *entry = av_dict_get(stream->metadata, "filename", NULL, 0); @@ -463,7 +465,7 @@ static void renderer_lp_render(struct camu_renderer *renderer, struct camu_scree } if (!pl_swapchain_submit_frame(lr->swapchain)) { - log_error("Failed to submit frame, likely fatal."); + log_error("Failed to submit frame, possibly fatal."); } lr->have_frame = false; @@ -490,6 +492,11 @@ void renderer_lp_free(struct camu_renderer **renderer) if (lr->renderer) pl_renderer_destroy(&lr->renderer); if (lr->swapchain) pl_swapchain_destroy(&lr->swapchain); #if defined STELA_API_VULKAN + if (lr->vk) pl_vulkan_destroy(&lr->vk); + lr->vk_destroy_surface(lr->vk_inst->instance, lr->surface); + if (lr->vk_inst) pl_vk_inst_destroy(&lr->vk_inst); +#elif defined STELA_API_DX11 + if (lr->d3d11) pl_d3d11_destroy(&lr->d3d11); #elif defined STELA_API_OPENGL if (lr->gl) pl_opengl_destroy(&lr->gl); #endif diff --git a/src/render/renderer_libplacebo.h b/src/render/renderer_libplacebo.h index c8962d2..fd34f7a 100644 --- a/src/render/renderer_libplacebo.h +++ b/src/render/renderer_libplacebo.h @@ -24,6 +24,7 @@ struct camu_renderer_lp { VkSurfaceKHR surface; pl_vulkan vk; pl_vk_inst vk_inst; + VkResult (*vk_destroy_surface)(VkInstance, VkSurfaceKHR); #elif defined STELA_API_DX11 pl_d3d11 d3d11; #elif defined STELA_API_OPENGL -- cgit v1.2.3-101-g0448