diff --git a/filament/backend/src/vulkan/VulkanTexture.cpp b/filament/backend/src/vulkan/VulkanTexture.cpp index 4db4ea64d2..f6721d3b6b 100644 --- a/filament/backend/src/vulkan/VulkanTexture.cpp +++ b/filament/backend/src/vulkan/VulkanTexture.cpp @@ -368,6 +368,7 @@ VulkanTexture::VulkanTexture(VkDevice device, VkPhysicalDevice physicalDevice, bool const isProtected = any(tusage & TextureUsage::PROTECTED); VkImageCreateInfo imageInfo{ .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, + .flags = isProtected ? VK_IMAGE_CREATE_PROTECTED_BIT : 0u, .imageType = target == SamplerType::SAMPLER_3D ? VK_IMAGE_TYPE_3D : VK_IMAGE_TYPE_2D, .format = vkFormat, .extent = {w, h, depth}, diff --git a/filament/backend/src/vulkan/platform/VulkanPlatformAndroid.cpp b/filament/backend/src/vulkan/platform/VulkanPlatformAndroid.cpp index d62a7146f1..ec46040cc4 100644 --- a/filament/backend/src/vulkan/platform/VulkanPlatformAndroid.cpp +++ b/filament/backend/src/vulkan/platform/VulkanPlatformAndroid.cpp @@ -378,10 +378,15 @@ VulkanPlatform::ImageData VulkanPlatformAndroid::createVkImageFromExternal( externalCreateInfo.pNext = &imageFormatListInfo; } + VkImageCreateFlags imageFlags = + (isFormatSrgb(metadata.format) ? VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT : 0u) | + (any(metadata.filamentUsage & TextureUsage::PROTECTED) + ? VK_IMAGE_CREATE_PROTECTED_BIT + : 0u); VkImageCreateInfo const imageInfo = { .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, .pNext = &externalCreateInfo, - .flags = isFormatSrgb(metadata.format) ? VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT : 0u, + .flags = imageFlags, .imageType = VK_IMAGE_TYPE_2D, // For non external images, use the same format as the AHB, which isn't in SRGB // Fix VUID-VkMemoryAllocateInfo-pNext-02387