Commit d654234e by Michael Spang Committed by Commit Bot

Vulkan: Use dedicated allocations in VulkanExternalHelper

This removes the coverage of non-dedicated allocations, but we've never supported that properly anyway (we require that the offset passed to glTexStorageMem2DEXT be zero). Bug: angleproject:4627 Change-Id: I14b0f39e5e13c3aafc4549dc59b6e3ac4ec6ad8c Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2192500Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Michael Spang <spang@chromium.org>
parent 93ec0ca5
......@@ -108,11 +108,14 @@ TEST_P(VulkanExternalImageTest, ShouldImportMemoryOpaqueFd)
{
GLMemoryObject memoryObject;
GLint dedicatedMemory = GL_TRUE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory);
glImportMemoryFdEXT(memoryObject, deviceMemorySize, GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd);
// Test that after calling glImportMemoryFdEXT, the parameters of the memory object cannot
// be changed
GLint dedicatedMemory = GL_TRUE;
dedicatedMemory = GL_FALSE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory);
EXPECT_GL_ERROR(GL_INVALID_OPERATION);
......@@ -157,6 +160,8 @@ TEST_P(VulkanExternalImageTest, ShouldImportSemaphoreOpaqueFd)
TEST_P(VulkanExternalImageTest, ShouldClearOpaqueFdRGBA8)
{
ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_memory_object_fd"));
// http://anglebug.com/4630
ANGLE_SKIP_TEST_IF(IsAndroid() && (IsPixel2() || IsPixel2XL()));
VulkanExternalHelper helper;
helper.initialize(isSwiftshader());
......@@ -181,6 +186,9 @@ TEST_P(VulkanExternalImageTest, ShouldClearOpaqueFdRGBA8)
{
GLMemoryObject memoryObject;
GLint dedicatedMemory = GL_TRUE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory);
glImportMemoryFdEXT(memoryObject, deviceMemorySize, GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd);
GLTexture texture;
......@@ -231,6 +239,9 @@ TEST_P(VulkanExternalImageTest, ShouldClearZirconVmoRGBA8)
{
GLMemoryObject memoryObject;
GLint dedicatedMemory = GL_TRUE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory);
glImportMemoryZirconHandleANGLE(memoryObject, deviceMemorySize,
GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE, vmo);
......@@ -290,6 +301,9 @@ TEST_P(VulkanExternalImageTest, TextureFormatCompatChromiumFd)
{
GLMemoryObject memoryObject;
GLint dedicatedMemory = GL_TRUE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory);
glImportMemoryFdEXT(memoryObject, deviceMemorySize, GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd);
GLTexture texture;
......@@ -341,6 +355,9 @@ TEST_P(VulkanExternalImageTest, TextureFormatCompatChromiumZirconHandle)
{
GLMemoryObject memoryObject;
GLint dedicatedMemory = GL_TRUE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory);
glImportMemoryZirconHandleANGLE(memoryObject, deviceMemorySize,
GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE, vmo);
......
......@@ -346,15 +346,8 @@ bool VulkanExternalHelper::canCreateImageExternal(
ASSERT(result == VK_SUCCESS);
constexpr VkExternalMemoryFeatureFlags kUnsupportedFeatures =
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT;
constexpr VkExternalMemoryFeatureFlags kRequiredFeatures =
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT | VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT;
if (externalImageFormatProperties.externalMemoryProperties.externalMemoryFeatures &
kUnsupportedFeatures)
{
return false;
}
if ((externalImageFormatProperties.externalMemoryProperties.externalMemoryFeatures &
kRequiredFeatures) != kRequiredFeatures)
{
......@@ -415,9 +408,14 @@ VkResult VulkanExternalHelper::createImage2DExternal(VkFormat format,
/* .pNext = */ nullptr,
/* .handleTypes = */ handleTypes,
};
VkMemoryDedicatedAllocateInfoKHR memoryDedicatedAllocateInfo = {
/* .sType = */ VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,
/* .pNext = */ &exportMemoryAllocateInfo,
/* .image = */ image,
};
VkMemoryAllocateInfo memoryAllocateInfo = {
/* .sType = */ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
/* .pNext = */ &exportMemoryAllocateInfo,
/* .pNext = */ &memoryDedicatedAllocateInfo,
/* .allocationSize = */ deviceMemorySize,
/* .memoryTypeIndex = */ memoryTypeIndex,
};
......
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