Handle VkSamplerCustomBorderColorCreateInfoEXT in on_vkCreateSampler()
... to avoid crashes with guest ANGLE GL on guest Gfxstream VK when
ANGLE populates a VkSamplerCustomBorderColorCreateInfoEXT.
Bug: b/165022040
Test: launch Cuttlefish with guest ANGLE GL and Gfxstream VK
Change-Id: I5294e24ce60b1ff71cfc8ac6660fac0609d1b1ec
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 2f64e55..e13c50a 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -5167,7 +5167,6 @@
const VkSamplerCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkSampler* pSampler) {
-
VkSamplerCreateInfo localCreateInfo = vk_make_orphan_copy(*pCreateInfo);
vk_struct_chain_iterator structChainIter = vk_make_chain_iterator(&localCreateInfo);
@@ -5181,6 +5180,15 @@
vk_append_struct(&structChainIter, &localVkSamplerYcbcrConversionInfo);
}
}
+
+ VkSamplerCustomBorderColorCreateInfoEXT localVkSamplerCustomBorderColorCreateInfo;
+ const VkSamplerCustomBorderColorCreateInfoEXT* samplerCustomBorderColorCreateInfo =
+ vk_find_struct<VkSamplerCustomBorderColorCreateInfoEXT>(pCreateInfo);
+ if (samplerCustomBorderColorCreateInfo) {
+ localVkSamplerCustomBorderColorCreateInfo =
+ vk_make_orphan_copy(*samplerCustomBorderColorCreateInfo);
+ vk_append_struct(&structChainIter, &localVkSamplerCustomBorderColorCreateInfo);
+ }
#endif
VkEncoder* enc = (VkEncoder*)context;
diff --git a/system/vulkan_enc/vk_struct_id.h b/system/vulkan_enc/vk_struct_id.h
index 48ecc24..cee3d9d 100644
--- a/system/vulkan_enc/vk_struct_id.h
+++ b/system/vulkan_enc/vk_struct_id.h
@@ -53,6 +53,7 @@
REGISTER_VK_STRUCT_ID(VkBufferCollectionBufferCreateInfoFUCHSIAX, VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIAX);
#endif // VK_USE_PLATFORM_FUCHSIA
REGISTER_VK_STRUCT_ID(VkSamplerCreateInfo, VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO);
+REGISTER_VK_STRUCT_ID(VkSamplerCustomBorderColorCreateInfoEXT, VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT);
REGISTER_VK_STRUCT_ID(VkSamplerYcbcrConversionInfo, VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO);
REGISTER_VK_STRUCT_ID(VkFenceCreateInfo, VK_STRUCTURE_TYPE_FENCE_CREATE_INFO);
REGISTER_VK_STRUCT_ID(VkExportFenceCreateInfo, VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO);