From 45c63e9957e4dd459cfef9c64232a9262b91f5a9 Mon Sep 17 00:00:00 2001 From: David Rosca Date: Wed, 18 Dec 2024 13:01:36 -0800 Subject: [PATCH] Use 16 bit for p010 frames --- .../0002-Vulkan-use-16bit-for-p010.patch | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 scripts/flatpak/0002-Vulkan-use-16bit-for-p010.patch diff --git a/scripts/flatpak/0002-Vulkan-use-16bit-for-p010.patch b/scripts/flatpak/0002-Vulkan-use-16bit-for-p010.patch new file mode 100644 index 00000000..aed20609 --- /dev/null +++ b/scripts/flatpak/0002-Vulkan-use-16bit-for-p010.patch @@ -0,0 +1,36 @@ +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->GetPhysicalDeviceFormatProperties2KHR(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->GetPhysicalDeviceFormatProperties2KHR(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..ccb5a16c 100644 +--- a/src/vulkan/gpu_tex.c ++++ b/src/vulkan/gpu_tex.c +@@ -1215,7 +1215,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;