mirror of
https://github.com/jellyfin/jellyfin-ffmpeg.git
synced 2026-09-02 21:03:08 +03:00
65 lines
2.5 KiB
Diff
65 lines
2.5 KiB
Diff
From 554c91c09a47afef1f66cb3338eadb5939507072 Mon Sep 17 00:00:00 2001
|
|
From: nyanmisaka <nst799610810@gmail.com>
|
|
Date: Thu, 27 Mar 2025 19:26:24 +0800
|
|
Subject: [PATCH] vulkan: force using 16bit for p01x formats
|
|
|
|
Workaround for the regression made in Mesa RADV.
|
|
|
|
Signed-off-by: nyanmisaka <nst799610810@gmail.com>
|
|
---
|
|
src/vulkan/formats.c | 7 ++++++-
|
|
src/vulkan/gpu_tex.c | 12 +++++++++++-
|
|
2 files changed, 17 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/vulkan/formats.c b/src/vulkan/formats.c
|
|
index f0eb0fb7..7d1c6478 100644
|
|
--- a/src/vulkan/formats.c
|
|
+++ b/src/vulkan/formats.c
|
|
@@ -415,7 +415,12 @@ void vk_setup_formats(struct pl_gpu_t *gpu)
|
|
.pNext = has_drm_mods ? &drm_props : NULL,
|
|
};
|
|
|
|
- vk->GetPhysicalDeviceFormatProperties2(vk->physd, vk_fmt->tfmt, &prop2);
|
|
+ VkFormat tfmt = vk_fmt->tfmt;
|
|
+ if (tfmt == VK_FORMAT_R10X6_UNORM_PACK16)
|
|
+ tfmt = VK_FORMAT_R16_UNORM;
|
|
+ else if (tfmt == VK_FORMAT_R10X6G10X6_UNORM_2PACK16)
|
|
+ tfmt = VK_FORMAT_R16G16_UNORM;
|
|
+ vk->GetPhysicalDeviceFormatProperties2(vk->physd, tfmt, &prop2);
|
|
|
|
// If wholly unsupported, try falling back to the emulation formats
|
|
// for texture operations
|
|
diff --git a/src/vulkan/gpu_tex.c b/src/vulkan/gpu_tex.c
|
|
index a419ffdc..ec32c546 100644
|
|
--- a/src/vulkan/gpu_tex.c
|
|
+++ b/src/vulkan/gpu_tex.c
|
|
@@ -371,6 +371,11 @@ pl_tex vk_tex_create(pl_gpu gpu, const struct pl_tex_params *params)
|
|
.pQueueFamilyIndices = qfs,
|
|
};
|
|
|
|
+ if (tex_vk->img_fmt == VK_FORMAT_R10X6_UNORM_PACK16)
|
|
+ iinfo.format = VK_FORMAT_R16_UNORM;
|
|
+ else if (tex_vk->img_fmt == VK_FORMAT_R10X6G10X6_UNORM_2PACK16)
|
|
+ iinfo.format = VK_FORMAT_R16G16_UNORM;
|
|
+
|
|
struct vk_malloc_params mparams = {
|
|
.optimal = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
|
|
.export_handle = params->export_handle,
|
|
@@ -1215,7 +1220,12 @@ pl_tex pl_vulkan_wrap(pl_gpu gpu, const struct pl_vulkan_wrap_params *params)
|
|
tex_vk->external_img = true;
|
|
tex_vk->held = !fmt->num_planes;
|
|
tex_vk->img = params->image;
|
|
- tex_vk->img_fmt = params->format;
|
|
+ if (params->format == VK_FORMAT_R10X6_UNORM_PACK16)
|
|
+ tex_vk->img_fmt = VK_FORMAT_R16_UNORM;
|
|
+ else if (params->format == VK_FORMAT_R10X6G10X6_UNORM_2PACK16)
|
|
+ tex_vk->img_fmt = VK_FORMAT_R16G16_UNORM;
|
|
+ else
|
|
+ tex_vk->img_fmt = params->format;
|
|
tex_vk->num_planes = fmt->num_planes;
|
|
tex_vk->usage_flags = usage;
|
|
tex_vk->aspect = params->aspect;
|
|
--
|
|
2.34.1
|
|
|