Skip to content

Commit 0c67f1c

Browse files
committed
VK: Fix AHB import validation error
In some cases the external image to be imported is flagged as using a sRGB dataspace but when the AHB is imported its actual format is UNDEFINED and requires an external sampler. In these cases, its not valid to set the VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag. See VUID-VkImageCreateInfo-pNext-02396 FIXES=[483456747]
1 parent 53bc372 commit 0c67f1c

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

filament/backend/src/vulkan/platform/VulkanPlatformAndroid.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ VkFormat transformVkFormat(VkFormat format, bool sRGB) {
7272
return format;
7373
}
7474

75+
bool isFormatSrgb(VkFormat format) {
76+
return format == VK_FORMAT_R8G8B8A8_SRGB || format == VK_FORMAT_R8G8B8_SRGB;
77+
}
78+
7579
bool isProtectedFromUsage(uint64_t usage) {
7680
return usage & AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT;
7781
}
@@ -367,7 +371,7 @@ VulkanPlatform::ImageData VulkanPlatformAndroid::createVkImageFromExternal(
367371
.pViewFormats = formats,
368372
};
369373

370-
if (fvkExternalImage->sRGB) {
374+
if (isFormatSrgb(metadata.format)) {
371375
formats[0] = metadata.format;
372376
formats[1] = transformVkFormat(metadata.format, /*sRGB=*/false);
373377
imageFormatListInfo.pNext = externalCreateInfo.pNext;
@@ -377,7 +381,7 @@ VulkanPlatform::ImageData VulkanPlatformAndroid::createVkImageFromExternal(
377381
VkImageCreateInfo const imageInfo = {
378382
.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,
379383
.pNext = &externalCreateInfo,
380-
.flags = fvkExternalImage->sRGB ? VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT : 0u,
384+
.flags = isFormatSrgb(metadata.format) ? VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT : 0u,
381385
.imageType = VK_IMAGE_TYPE_2D,
382386
// For non external images, use the same format as the AHB, which isn't in SRGB
383387
// Fix VUID-VkMemoryAllocateInfo-pNext-02387

0 commit comments

Comments
 (0)