Merge "gfxstream: host: Linear tiling for QNX Screen buffer" into main
diff --git a/host/vulkan/VkCommonOperations.cpp b/host/vulkan/VkCommonOperations.cpp
index a48d4e2..32089ac 100644
--- a/host/vulkan/VkCommonOperations.cpp
+++ b/host/vulkan/VkCommonOperations.cpp
@@ -1962,6 +1962,8 @@
imageCi->pQueueFamilyIndices = nullptr;
imageCi->initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+ auto imageCiChain = vk_make_chain_iterator(imageCi.get());
+
// Create the image. If external memory is supported, make it external.
VkExternalMemoryImageCreateInfo extImageCi = {
VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,
@@ -1969,14 +1971,23 @@
VK_EXT_MEMORY_HANDLE_TYPE_BIT,
};
- VkExternalMemoryImageCreateInfo* extImageCiPtr = nullptr;
-
if (sVkEmulation->deviceInfo.supportsExternalMemoryImport ||
sVkEmulation->deviceInfo.supportsExternalMemoryExport) {
- extImageCiPtr = &extImageCi;
+ vk_append_struct(&imageCiChain, &extImageCi);
}
- imageCi->pNext = extImageCiPtr;
+#if defined(__QNX__)
+ VkExternalFormatQNX externalFormatQnx = {
+ .sType = VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_QNX,
+ .pNext = NULL,
+ .externalFormat = 0, /* Do not override screen format */
+ };
+ if (VK_EXT_MEMORY_HANDLE_INVALID != extMemHandle) {
+ vk_append_struct(&imageCiChain, &externalFormatQnx);
+ /* Maintain linear tiling on QNX for downstream display controller interaction */
+ imageCi->tiling = VK_IMAGE_TILING_LINEAR;
+ }
+#endif
auto vk = sVkEmulation->dvk;
diff --git a/host/vulkan/cereal/common/vk_struct_id.h b/host/vulkan/cereal/common/vk_struct_id.h
index 0953a43..c6e9804 100644
--- a/host/vulkan/cereal/common/vk_struct_id.h
+++ b/host/vulkan/cereal/common/vk_struct_id.h
@@ -75,6 +75,7 @@
REGISTER_VK_STRUCT_ID(VkPhysicalDeviceExternalMemoryScreenBufferFeaturesQNX,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX);
REGISTER_VK_STRUCT_ID(VkImportScreenBufferInfoQNX, VK_STRUCTURE_TYPE_IMPORT_SCREEN_BUFFER_INFO_QNX);
+REGISTER_VK_STRUCT_ID(VkExternalFormatQNX, VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_QNX);
#endif
#undef REGISTER_VK_STRUCT_ID