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) ...@@ -108,11 +108,14 @@ TEST_P(VulkanExternalImageTest, ShouldImportMemoryOpaqueFd)
{ {
GLMemoryObject memoryObject; GLMemoryObject memoryObject;
GLint dedicatedMemory = GL_TRUE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory);
glImportMemoryFdEXT(memoryObject, deviceMemorySize, GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd); glImportMemoryFdEXT(memoryObject, deviceMemorySize, GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd);
// Test that after calling glImportMemoryFdEXT, the parameters of the memory object cannot // Test that after calling glImportMemoryFdEXT, the parameters of the memory object cannot
// be changed // be changed
GLint dedicatedMemory = GL_TRUE; dedicatedMemory = GL_FALSE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT, glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory); &dedicatedMemory);
EXPECT_GL_ERROR(GL_INVALID_OPERATION); EXPECT_GL_ERROR(GL_INVALID_OPERATION);
...@@ -157,6 +160,8 @@ TEST_P(VulkanExternalImageTest, ShouldImportSemaphoreOpaqueFd) ...@@ -157,6 +160,8 @@ TEST_P(VulkanExternalImageTest, ShouldImportSemaphoreOpaqueFd)
TEST_P(VulkanExternalImageTest, ShouldClearOpaqueFdRGBA8) TEST_P(VulkanExternalImageTest, ShouldClearOpaqueFdRGBA8)
{ {
ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_memory_object_fd")); ANGLE_SKIP_TEST_IF(!EnsureGLExtensionEnabled("GL_EXT_memory_object_fd"));
// http://anglebug.com/4630
ANGLE_SKIP_TEST_IF(IsAndroid() && (IsPixel2() || IsPixel2XL()));
VulkanExternalHelper helper; VulkanExternalHelper helper;
helper.initialize(isSwiftshader()); helper.initialize(isSwiftshader());
...@@ -181,6 +186,9 @@ TEST_P(VulkanExternalImageTest, ShouldClearOpaqueFdRGBA8) ...@@ -181,6 +186,9 @@ TEST_P(VulkanExternalImageTest, ShouldClearOpaqueFdRGBA8)
{ {
GLMemoryObject memoryObject; GLMemoryObject memoryObject;
GLint dedicatedMemory = GL_TRUE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory);
glImportMemoryFdEXT(memoryObject, deviceMemorySize, GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd); glImportMemoryFdEXT(memoryObject, deviceMemorySize, GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd);
GLTexture texture; GLTexture texture;
...@@ -231,6 +239,9 @@ TEST_P(VulkanExternalImageTest, ShouldClearZirconVmoRGBA8) ...@@ -231,6 +239,9 @@ TEST_P(VulkanExternalImageTest, ShouldClearZirconVmoRGBA8)
{ {
GLMemoryObject memoryObject; GLMemoryObject memoryObject;
GLint dedicatedMemory = GL_TRUE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory);
glImportMemoryZirconHandleANGLE(memoryObject, deviceMemorySize, glImportMemoryZirconHandleANGLE(memoryObject, deviceMemorySize,
GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE, vmo); GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE, vmo);
...@@ -290,6 +301,9 @@ TEST_P(VulkanExternalImageTest, TextureFormatCompatChromiumFd) ...@@ -290,6 +301,9 @@ TEST_P(VulkanExternalImageTest, TextureFormatCompatChromiumFd)
{ {
GLMemoryObject memoryObject; GLMemoryObject memoryObject;
GLint dedicatedMemory = GL_TRUE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory);
glImportMemoryFdEXT(memoryObject, deviceMemorySize, GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd); glImportMemoryFdEXT(memoryObject, deviceMemorySize, GL_HANDLE_TYPE_OPAQUE_FD_EXT, fd);
GLTexture texture; GLTexture texture;
...@@ -341,6 +355,9 @@ TEST_P(VulkanExternalImageTest, TextureFormatCompatChromiumZirconHandle) ...@@ -341,6 +355,9 @@ TEST_P(VulkanExternalImageTest, TextureFormatCompatChromiumZirconHandle)
{ {
GLMemoryObject memoryObject; GLMemoryObject memoryObject;
GLint dedicatedMemory = GL_TRUE;
glMemoryObjectParameterivEXT(memoryObject, GL_DEDICATED_MEMORY_OBJECT_EXT,
&dedicatedMemory);
glImportMemoryZirconHandleANGLE(memoryObject, deviceMemorySize, glImportMemoryZirconHandleANGLE(memoryObject, deviceMemorySize,
GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE, vmo); GL_HANDLE_TYPE_ZIRCON_VMO_ANGLE, vmo);
......
...@@ -346,15 +346,8 @@ bool VulkanExternalHelper::canCreateImageExternal( ...@@ -346,15 +346,8 @@ bool VulkanExternalHelper::canCreateImageExternal(
ASSERT(result == VK_SUCCESS); ASSERT(result == VK_SUCCESS);
constexpr VkExternalMemoryFeatureFlags kUnsupportedFeatures =
VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT;
constexpr VkExternalMemoryFeatureFlags kRequiredFeatures = constexpr VkExternalMemoryFeatureFlags kRequiredFeatures =
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT | VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT; VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT | VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT;
if (externalImageFormatProperties.externalMemoryProperties.externalMemoryFeatures &
kUnsupportedFeatures)
{
return false;
}
if ((externalImageFormatProperties.externalMemoryProperties.externalMemoryFeatures & if ((externalImageFormatProperties.externalMemoryProperties.externalMemoryFeatures &
kRequiredFeatures) != kRequiredFeatures) kRequiredFeatures) != kRequiredFeatures)
{ {
...@@ -415,9 +408,14 @@ VkResult VulkanExternalHelper::createImage2DExternal(VkFormat format, ...@@ -415,9 +408,14 @@ VkResult VulkanExternalHelper::createImage2DExternal(VkFormat format,
/* .pNext = */ nullptr, /* .pNext = */ nullptr,
/* .handleTypes = */ handleTypes, /* .handleTypes = */ handleTypes,
}; };
VkMemoryDedicatedAllocateInfoKHR memoryDedicatedAllocateInfo = {
/* .sType = */ VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,
/* .pNext = */ &exportMemoryAllocateInfo,
/* .image = */ image,
};
VkMemoryAllocateInfo memoryAllocateInfo = { VkMemoryAllocateInfo memoryAllocateInfo = {
/* .sType = */ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, /* .sType = */ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
/* .pNext = */ &exportMemoryAllocateInfo, /* .pNext = */ &memoryDedicatedAllocateInfo,
/* .allocationSize = */ deviceMemorySize, /* .allocationSize = */ deviceMemorySize,
/* .memoryTypeIndex = */ memoryTypeIndex, /* .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