From db84871fdf0cd85b537ebcf3ef4d8a7a8d96c033 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 27 Jul 2026 10:35:04 -0700 Subject: [PATCH] Allow writing to planar YUV textures from application code in the Vulkan renderer --- src/render/vulkan/SDL_render_vulkan.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/render/vulkan/SDL_render_vulkan.c b/src/render/vulkan/SDL_render_vulkan.c index daf9d2df54..6b80101f59 100644 --- a/src/render/vulkan/SDL_render_vulkan.c +++ b/src/render/vulkan/SDL_render_vulkan.c @@ -832,9 +832,10 @@ static VkResult VULKAN_AllocateImage(VULKAN_RenderData *rendererData, SDL_Proper imageCreateInfo.queueFamilyIndexCount = 0; imageCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - // Set VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT for planar formats + // Allow writing to planar YUV textures from application code if (VULKAN_VkFormatGetNumPlanes(format) > 1) { - imageCreateInfo.flags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT; + imageCreateInfo.flags |= (VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT | VK_IMAGE_CREATE_EXTENDED_USAGE_BIT); + imageCreateInfo.usage |= VK_IMAGE_USAGE_STORAGE_BIT; } result = vkCreateImage(rendererData->device, &imageCreateInfo, NULL, &imageOut->image); @@ -1769,6 +1770,7 @@ static VkResult VULKAN_CreateDeviceResources(SDL_Renderer *renderer, SDL_Propert */ VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME, VK_KHR_MAINTENANCE1_EXTENSION_NAME, + VK_KHR_MAINTENANCE2_EXTENSION_NAME, VK_KHR_BIND_MEMORY_2_EXTENSION_NAME, VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME, }; @@ -1902,7 +1904,7 @@ static VkResult VULKAN_CreateDeviceResources(SDL_Renderer *renderer, SDL_Propert deviceCreateInfo.queueCreateInfoCount = 0; deviceCreateInfo.pQueueCreateInfos = deviceQueueCreateInfo; deviceCreateInfo.pEnabledFeatures = NULL; - deviceCreateInfo.enabledExtensionCount = (rendererData->supportsKHRSamplerYCbCrConversion) ? 5 : 1; + deviceCreateInfo.enabledExtensionCount = (rendererData->supportsKHRSamplerYCbCrConversion) ? SDL_arraysize(deviceExtensionNames) : 1; deviceCreateInfo.ppEnabledExtensionNames = deviceExtensionNames; deviceQueueCreateInfo[0].sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO;