Commit a5e0a4bc by Mohan Maiya Committed by Commit Bot

Vulkan: Support VK_KHR_image_format_list for AHB backed EGL image

AHB backed EGL images create the VkImage through external sibling images. Create those images with VK_KHR_image_format_list extension support enabled. Bug: angleproject:3756 Bug: angleproject:5281 Test: angle_end2end_tests.exe --gtest_filter=ImageTest*SourceAHB*Colorspace*Vulkan Change-Id: I28c22f9d2f2423daa9228e4d42772b380ab7b8b9 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2525109Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Mohan Maiya <m.maiya@samsung.com>
parent eaab2e34
...@@ -190,6 +190,27 @@ angle::Result HardwareBufferImageSiblingVkAndroid::initImpl(DisplayVk *displayVk ...@@ -190,6 +190,27 @@ angle::Result HardwareBufferImageSiblingVkAndroid::initImpl(DisplayVk *displayVk
usage = VK_IMAGE_USAGE_SAMPLED_BIT; usage = VK_IMAGE_USAGE_SAMPLED_BIT;
} }
// With the introduction of sRGB related GLES extensions any texture could be respecified
// causing it to be interpreted in a different colorspace. Create the VkImage accordingly.
VkImageCreateFlags imageCreateFlags = vk::kVkImageCreateFlagsNone;
VkFormat vkImageFormat = vkFormat.vkImageFormat;
VkFormat vkImageListFormat = vkFormat.actualImageFormat().isSRGB
? vk::ConvertToLinear(vkImageFormat)
: vk::ConvertToSRGB(vkImageFormat);
VkImageFormatListCreateInfoKHR formatListInfo = {};
if (renderer->getFeatures().supportsImageFormatList.enabled)
{
// Add VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT to VkImage create flag
imageCreateFlags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;
// There is just 1 additional format we might use to create a VkImageView for this VkImage
formatListInfo.sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR;
formatListInfo.viewFormatCount = 1;
formatListInfo.pViewFormats = &vkImageListFormat;
externalFormat.pNext = &formatListInfo;
}
VkExternalMemoryImageCreateInfo externalMemoryImageCreateInfo = {}; VkExternalMemoryImageCreateInfo externalMemoryImageCreateInfo = {};
externalMemoryImageCreateInfo.sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO; externalMemoryImageCreateInfo.sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO;
...@@ -209,7 +230,7 @@ angle::Result HardwareBufferImageSiblingVkAndroid::initImpl(DisplayVk *displayVk ...@@ -209,7 +230,7 @@ angle::Result HardwareBufferImageSiblingVkAndroid::initImpl(DisplayVk *displayVk
ANGLE_TRY(mImage->initExternal( ANGLE_TRY(mImage->initExternal(
displayVk, gl::TextureType::_2D, vkExtents, displayVk, gl::TextureType::_2D, vkExtents,
bufferFormatProperties.format == VK_FORMAT_UNDEFINED ? externalVkFormat : vkFormat, 1, bufferFormatProperties.format == VK_FORMAT_UNDEFINED ? externalVkFormat : vkFormat, 1,
usage, vk::kVkImageCreateFlagsNone, vk::ImageLayout::ExternalPreInitialized, usage, imageCreateFlags, vk::ImageLayout::ExternalPreInitialized,
&externalMemoryImageCreateInfo, gl::LevelIndex(0), gl::LevelIndex(0), 1, 1, &externalMemoryImageCreateInfo, gl::LevelIndex(0), gl::LevelIndex(0), 1, 1,
robustInitEnabled)); robustInitEnabled));
......
...@@ -741,7 +741,6 @@ class ImageTest : public ANGLETest ...@@ -741,7 +741,6 @@ class ImageTest : public ANGLETest
{ {
return false; return false;
} }
return IsEGLDisplayExtensionEnabled(getEGLWindow()->getDisplay(), kImageGLColorspaceExt); return IsEGLDisplayExtensionEnabled(getEGLWindow()->getDisplay(), kImageGLColorspaceExt);
} }
...@@ -1605,9 +1604,6 @@ TEST_P(ImageTest, SourceAHBTarget2D_Colorspace) ...@@ -1605,9 +1604,6 @@ TEST_P(ImageTest, SourceAHBTarget2D_Colorspace)
ANGLE_SKIP_TEST_IF(!IsAndroid()); ANGLE_SKIP_TEST_IF(!IsAndroid());
ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3 && !IsGLExtensionEnabled("GL_EXT_sRGB")); ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3 && !IsGLExtensionEnabled("GL_EXT_sRGB"));
ANGLE_SKIP_TEST_IF(!hasImageGLColorspaceExt()); ANGLE_SKIP_TEST_IF(!hasImageGLColorspaceExt());
// Need to add support for VK_KHR_image_format_list to AHB backed EGLImages:
// http://anglebug.com/5281
ANGLE_SKIP_TEST_IF(IsVulkan());
SourceAHBTarget2D_helper(kColorspaceAttribs); SourceAHBTarget2D_helper(kColorspaceAttribs);
} }
...@@ -1708,9 +1704,6 @@ TEST_P(ImageTest, SourceAHBTarget2DArray_Colorspace) ...@@ -1708,9 +1704,6 @@ TEST_P(ImageTest, SourceAHBTarget2DArray_Colorspace)
ANGLE_SKIP_TEST_IF(!IsAndroid()); ANGLE_SKIP_TEST_IF(!IsAndroid());
ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3 && !IsGLExtensionEnabled("GL_EXT_sRGB")); ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3 && !IsGLExtensionEnabled("GL_EXT_sRGB"));
ANGLE_SKIP_TEST_IF(!hasImageGLColorspaceExt()); ANGLE_SKIP_TEST_IF(!hasImageGLColorspaceExt());
// Need to add support for VK_KHR_image_format_list to AHB backed EGLImages:
// http://anglebug.com/5281
ANGLE_SKIP_TEST_IF(IsVulkan());
SourceAHBTarget2DArray_helper(kColorspaceAttribs); SourceAHBTarget2DArray_helper(kColorspaceAttribs);
} }
...@@ -1763,9 +1756,6 @@ TEST_P(ImageTest, SourceAHBTargetExternal_Colorspace) ...@@ -1763,9 +1756,6 @@ TEST_P(ImageTest, SourceAHBTargetExternal_Colorspace)
ANGLE_SKIP_TEST_IF(!IsAndroid()); ANGLE_SKIP_TEST_IF(!IsAndroid());
ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3 && !IsGLExtensionEnabled("GL_EXT_sRGB")); ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3 && !IsGLExtensionEnabled("GL_EXT_sRGB"));
ANGLE_SKIP_TEST_IF(!hasImageGLColorspaceExt()); ANGLE_SKIP_TEST_IF(!hasImageGLColorspaceExt());
// Need to add support for VK_KHR_image_format_list to AHB backed EGLImages:
// http://anglebug.com/5281
ANGLE_SKIP_TEST_IF(IsVulkan());
SourceAHBTargetExternal_helper(kColorspaceAttribs); SourceAHBTargetExternal_helper(kColorspaceAttribs);
} }
...@@ -1819,9 +1809,6 @@ TEST_P(ImageTestES3, SourceAHBTargetExternalESSL3_Colorspace) ...@@ -1819,9 +1809,6 @@ TEST_P(ImageTestES3, SourceAHBTargetExternalESSL3_Colorspace)
ANGLE_SKIP_TEST_IF(!IsAndroid()); ANGLE_SKIP_TEST_IF(!IsAndroid());
ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3 && !IsGLExtensionEnabled("GL_EXT_sRGB")); ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3 && !IsGLExtensionEnabled("GL_EXT_sRGB"));
ANGLE_SKIP_TEST_IF(!hasImageGLColorspaceExt()); ANGLE_SKIP_TEST_IF(!hasImageGLColorspaceExt());
// Need to add support for VK_KHR_image_format_list to AHB backed EGLImages:
// http://anglebug.com/5281
ANGLE_SKIP_TEST_IF(IsVulkan());
SourceAHBTargetExternalESSL3_helper(kColorspaceAttribs); SourceAHBTargetExternalESSL3_helper(kColorspaceAttribs);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment