diff --git a/src/Vulkan/VkPipeline.cpp b/src/Vulkan/VkPipeline.cpp
index cbb79c7..9a4f34f 100644
--- a/src/Vulkan/VkPipeline.cpp
+++ b/src/Vulkan/VkPipeline.cpp
@@ -18,6 +18,7 @@
 #include "VkPipelineCache.hpp"
 #include "VkPipelineLayout.hpp"
 #include "VkShaderModule.hpp"
+#include "VkStringify.hpp"
 #include "VkRenderPass.hpp"
 #include "Pipeline/ComputeProgram.hpp"
 #include "Pipeline/SpirvShader.hpp"
@@ -419,7 +420,7 @@
 		}
 		break;
 		default:
-			UNIMPLEMENTED("extensionCreateInfo->sType");
+			WARN("pCreateInfo->pRasterizationState->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType));
 			break;
 		}
 
diff --git a/src/Vulkan/VkRenderPass.cpp b/src/Vulkan/VkRenderPass.cpp
index 10682ef..89632e3 100644
--- a/src/Vulkan/VkRenderPass.cpp
+++ b/src/Vulkan/VkRenderPass.cpp
@@ -13,6 +13,7 @@
 // limitations under the License.
 
 #include "VkRenderPass.hpp"
+#include "VkStringify.hpp"
 #include <cstring>
 
 namespace vk
@@ -76,7 +77,7 @@
 			break;
 		}
 		default:
-			/* Unknown structure in pNext chain must be ignored */
+			WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType));
 			break;
 		}
 
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index c8980f9..c348133 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -283,7 +283,8 @@
 
 	if(pCreateInfo->pNext)
 	{
-		switch(*reinterpret_cast<const VkStructureType*>(pCreateInfo->pNext))
+		const VkBaseInStructure* createInfo = reinterpret_cast<const VkBaseInStructure*>(pCreateInfo->pNext);
+		switch(createInfo->sType)
 		{
 		case VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO:
 			// According to the Vulkan spec, section 2.7.2. Implicit Valid Usage:
@@ -293,7 +294,8 @@
 			//  Vulkan structures in this Specification."
 			break;
 		default:
-			UNIMPLEMENTED("pCreateInfo->pNext");
+			WARN("pCreateInfo->pNext sType = %s", vk::Stringify(createInfo->sType));
+			break;
 		}
 	}
 
@@ -638,7 +640,7 @@
 			break;
 		default:
 			// "the [driver] must skip over, without processing (other than reading the sType and pNext members) any structures in the chain with sType values not defined by [supported extenions]"
-			TRACE_ASSERT("Unimplemented extensionCreateInfo->sType = %s", vk::Stringify(extensionCreateInfo->sType));
+			WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType));
 			break;
 		}
 
@@ -660,9 +662,16 @@
 	for(uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; i++)
 	{
 		const VkDeviceQueueCreateInfo& queueCreateInfo = pCreateInfo->pQueueCreateInfos[i];
-		if(queueCreateInfo.pNext || queueCreateInfo.flags)
+		if(queueCreateInfo.flags)
 		{
-			UNIMPLEMENTED("queueCreateInfo.pNext || queueCreateInfo.flags");
+			UNIMPLEMENTED("queueCreateInfo.flags");
+		}
+
+		auto extInfo = reinterpret_cast<VkBaseInStructure const*>(queueCreateInfo.pNext);
+		while(extInfo)
+		{
+			WARN("pCreateInfo->pQueueCreateInfos[%d].pNext sType = %s", i, vk::Stringify(extInfo->sType));
+			extInfo = extInfo->pNext;
 		}
 
 		ASSERT(queueCreateInfo.queueFamilyIndex < queueFamilyPropertyCount);
@@ -823,7 +832,7 @@
 		}
 #endif
 		default:
-			TRACE_ASSERT("Unimplemented allocationInfo->sType = %s", vk::Stringify(allocationInfo->sType));
+			WARN("pAllocateInfo->pNext sType = %s", vk::Stringify(allocationInfo->sType));
 			break;
 		}
 
@@ -1022,9 +1031,11 @@
 	TRACE("(VkDevice device = %p, const VkFenceCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkFence* pFence = %p)",
 		    device, pCreateInfo, pAllocator, pFence);
 
-	if(pCreateInfo->pNext)
+	auto* nextInfo = reinterpret_cast<const VkBaseInStructure*>(pCreateInfo->pNext);
+	while(nextInfo)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext");
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType));
+		nextInfo = nextInfo->pNext;
 	}
 
 	return vk::Fence::Create(pAllocator, pCreateInfo, pFence);
@@ -1157,9 +1168,16 @@
 	TRACE("(VkDevice device = %p, const VkEventCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkEvent* pEvent = %p)",
 	      device, pCreateInfo, pAllocator, pEvent);
 
-	if(pCreateInfo->pNext || pCreateInfo->flags)
+	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext || pCreateInfo->flags");
+		UNIMPLEMENTED("pCreateInfo->flags");
+	}
+
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pCreateInfo->pNext);
+	while(extInfo)
+	{
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	return vk::Event::Create(pAllocator, pCreateInfo, pEvent);
@@ -1203,9 +1221,16 @@
 	TRACE("(VkDevice device = %p, const VkQueryPoolCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkQueryPool* pQueryPool = %p)",
 	      device, pCreateInfo, pAllocator, pQueryPool);
 
-	if(pCreateInfo->pNext || pCreateInfo->flags)
+	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext || pCreateInfo->flags");
+		UNIMPLEMENTED("pCreateInfo->flags");
+	}
+
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pCreateInfo->pNext);
+	while(extInfo)
+	{
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	return vk::QueryPool::Create(pAllocator, pCreateInfo, pQueryPool);
@@ -1241,7 +1266,8 @@
 			// Do nothing. Should be handled by vk::Buffer::Create().
 			break;
 		default:
-			UNIMPLEMENTED("pCreateInfo->pNext sType=0x%X", nextInfo->sType);
+			WARN("pCreateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType));
+			break;
 		}
 		nextInfo = nextInfo->pNext;
 	}
@@ -1262,9 +1288,16 @@
 	TRACE("(VkDevice device = %p, const VkBufferViewCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkBufferView* pView = %p)",
 	        device, pCreateInfo, pAllocator, pView);
 
-	if(pCreateInfo->pNext || pCreateInfo->flags)
+	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext || pCreateInfo->flags");
+		UNIMPLEMENTED("pCreateInfo->flags");
+	}
+
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pCreateInfo->pNext);
+	while(extInfo)
+	{
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	return vk::BufferView::Create(pAllocator, pCreateInfo, pView);
@@ -1318,7 +1351,7 @@
 			break;
 		default:
 			// "the [driver] must skip over, without processing (other than reading the sType and pNext members) any structures in the chain with sType values not defined by [supported extenions]"
-			UNIMPLEMENTED("extensionCreateInfo->sType");   // TODO(b/119321052): UNIMPLEMENTED() should be used only for features that must still be implemented. Use a more informational macro here.
+			WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType));
 			break;
 		}
 
@@ -1422,7 +1455,7 @@
 		}
 		break;
 		default:
-			UNIMPLEMENTED("extensionCreateInfo->sType %d", int(extensionCreateInfo->sType));
+			WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType));
 			break;
 		}
 
@@ -1445,9 +1478,16 @@
 	TRACE("(VkDevice device = %p, const VkShaderModuleCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkShaderModule* pShaderModule = %p)",
 		    device, pCreateInfo, pAllocator, pShaderModule);
 
-	if(pCreateInfo->pNext || pCreateInfo->flags)
+	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext || pCreateInfo->flags");
+		UNIMPLEMENTED("pCreateInfo->flags");
+	}
+
+	auto* nextInfo = reinterpret_cast<const VkBaseInStructure*>(pCreateInfo->pNext);
+	while(nextInfo)
+	{
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType));
+		nextInfo = nextInfo->pNext;
 	}
 
 	return vk::ShaderModule::Create(pAllocator, pCreateInfo, pShaderModule);
@@ -1466,9 +1506,16 @@
 	TRACE("(VkDevice device = %p, const VkPipelineCacheCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkPipelineCache* pPipelineCache = %p)",
 	        device, pCreateInfo, pAllocator, pPipelineCache);
 
-	if(pCreateInfo->pNext || pCreateInfo->flags)
+	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext || pCreateInfo->flags");
+		UNIMPLEMENTED("pCreateInfo->flags");
+	}
+
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pCreateInfo->pNext);
+	while(extInfo)
+	{
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	return vk::PipelineCache::Create(pAllocator, pCreateInfo, pPipelineCache);
@@ -1575,9 +1622,16 @@
 	TRACE("(VkDevice device = %p, const VkPipelineLayoutCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkPipelineLayout* pPipelineLayout = %p)",
 		    device, pCreateInfo, pAllocator, pPipelineLayout);
 
-	if(pCreateInfo->pNext || pCreateInfo->flags)
+	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext || pCreateInfo->flags");
+		UNIMPLEMENTED("pCreateInfo->flags");
+	}
+
+	auto* nextInfo = reinterpret_cast<const VkBaseInStructure*>(pCreateInfo->pNext);
+	while(nextInfo)
+	{
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType));
+		nextInfo = nextInfo->pNext;
 	}
 
 	return vk::PipelineLayout::Create(pAllocator, pCreateInfo, pPipelineLayout);
@@ -1598,7 +1652,7 @@
 
 	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext || pCreateInfo->flags");
+		UNIMPLEMENTED("pCreateInfo->flags");
 	}
 
 	const VkBaseInStructure* extensionCreateInfo = reinterpret_cast<const VkBaseInStructure*>(pCreateInfo->pNext);
@@ -1615,7 +1669,7 @@
 			}
 			break;
 		default:
-			UNIMPLEMENTED("extensionCreateInfo->sType %d", int(extensionCreateInfo->sType));
+			WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType));
 			break;
 		}
 
@@ -1648,7 +1702,7 @@
 			ASSERT(!vk::Cast(device)->hasExtension(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME));
 			break;
 		default:
-			UNIMPLEMENTED("extensionCreateInfo->sType %d", int(extensionCreateInfo->sType));
+			WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType));
 			break;
 		}
 
@@ -1671,9 +1725,11 @@
 	TRACE("(VkDevice device = %p, const VkDescriptorPoolCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkDescriptorPool* pDescriptorPool = %p)",
 	      device, pCreateInfo, pAllocator, pDescriptorPool);
 
-	if(pCreateInfo->pNext)
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pCreateInfo->pNext);
+	while(extInfo)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext");
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	return vk::DescriptorPool::Create(pAllocator, pCreateInfo, pDescriptorPool);
@@ -1705,9 +1761,11 @@
 	TRACE("(VkDevice device = %p, const VkDescriptorSetAllocateInfo* pAllocateInfo = %p, VkDescriptorSet* pDescriptorSets = %p)",
 		device, pAllocateInfo, pDescriptorSets);
 
-	if(pAllocateInfo->pNext)
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pAllocateInfo->pNext);
+	while(extInfo)
 	{
-		UNIMPLEMENTED("pAllocateInfo->pNext");
+		WARN("pAllocateInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	return vk::Cast(pAllocateInfo->descriptorPool)->allocateSets(
@@ -1737,9 +1795,16 @@
 	TRACE("(VkDevice device = %p, const VkFramebufferCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkFramebuffer* pFramebuffer = %p)",
 		    device, pCreateInfo, pAllocator, pFramebuffer);
 
-	if(pCreateInfo->pNext || pCreateInfo->flags)
+	if(pCreateInfo->flags)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext || pCreateInfo->flags");
+		UNIMPLEMENTED("pCreateInfo->flags");
+	}
+
+	auto* nextInfo = reinterpret_cast<const VkBaseInStructure*>(pCreateInfo->pNext);
+	while(nextInfo)
+	{
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType));
+		nextInfo = nextInfo->pNext;
 	}
 
 	return vk::Framebuffer::Create(pAllocator, pCreateInfo, pFramebuffer);
@@ -1838,7 +1903,7 @@
 		}
 		break;
 		default:
-			UNIMPLEMENTED("extensionCreateInfo->sType %d", int(extensionCreateInfo->sType));
+			WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extensionCreateInfo->sType));
 			break;
 		}
 
@@ -1869,9 +1934,11 @@
 	TRACE("(VkDevice device = %p, const VkCommandPoolCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkCommandPool* pCommandPool = %p)",
 		    device, pCreateInfo, pAllocator, pCommandPool);
 
-	if(pCreateInfo->pNext)
+	auto* nextInfo = reinterpret_cast<const VkBaseInStructure*>(pCreateInfo->pNext);
+	while(nextInfo)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext");
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType));
+		nextInfo = nextInfo->pNext;
 	}
 
 	return vk::CommandPool::Create(pAllocator, pCreateInfo, pCommandPool);
@@ -1898,9 +1965,11 @@
 	TRACE("(VkDevice device = %p, const VkCommandBufferAllocateInfo* pAllocateInfo = %p, VkCommandBuffer* pCommandBuffers = %p)",
 		    device, pAllocateInfo, pCommandBuffers);
 
-	if(pAllocateInfo->pNext)
+	auto* nextInfo = reinterpret_cast<const VkBaseInStructure*>(pAllocateInfo->pNext);
+	while(nextInfo)
 	{
-		UNIMPLEMENTED("pAllocateInfo->pNext");
+		WARN("pAllocateInfo->pNext sType = %s", vk::Stringify(nextInfo->sType));
+		nextInfo = nextInfo->pNext;
 	}
 
 	return vk::Cast(pAllocateInfo->commandPool)->allocateCommandBuffers(
@@ -1920,9 +1989,11 @@
 	TRACE("(VkCommandBuffer commandBuffer = %p, const VkCommandBufferBeginInfo* pBeginInfo = %p)",
 		    commandBuffer, pBeginInfo);
 
-	if(pBeginInfo->pNext)
+	auto* nextInfo = reinterpret_cast<const VkBaseInStructure*>(pBeginInfo->pNext);
+	while(nextInfo)
 	{
-		UNIMPLEMENTED("pBeginInfo->pNext");
+		WARN("pBeginInfo->pNext sType = %s", vk::Stringify(nextInfo->sType));
+		nextInfo = nextInfo->pNext;
 	}
 
 	return vk::Cast(commandBuffer)->begin(pBeginInfo->flags, pBeginInfo->pInheritanceInfo);
@@ -2281,7 +2352,7 @@
 			// SwiftShader only has a single physical device, so this extension does nothing in this case.
 			break;
 		default:
-			UNIMPLEMENTED("renderPassBeginInfo->sType");
+			WARN("pRenderPassBegin->pNext sType = %s", vk::Stringify(renderPassBeginInfo->sType));
 			break;
 		}
 
@@ -2330,9 +2401,11 @@
 
 	for(uint32_t i = 0; i < bindInfoCount; i++)
 	{
-		if(pBindInfos[i].pNext)
+		auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pBindInfos[i].pNext);
+		while(extInfo)
 		{
-			UNIMPLEMENTED("pBindInfos[%d].pNext", i);
+			WARN("pBindInfos[%d].pNext sType = %s", i, vk::Stringify(extInfo->sType));
+			extInfo = extInfo->pNext;
 		}
 
 		if (!vk::Cast(pBindInfos[i].buffer)->canBindToMemory(vk::Cast(pBindInfos[i].memory)))
@@ -2389,6 +2462,7 @@
 #endif
 
 			default:
+				WARN("pBindInfos[%d].pNext sType = %s", i, vk::Stringify(extInfo->sType));
 				break;
 			}
 			extInfo = extInfo->pNext;
@@ -2437,9 +2511,11 @@
 	TRACE("(VkDevice device = %p, const VkImageMemoryRequirementsInfo2* pInfo = %p, VkMemoryRequirements2* pMemoryRequirements = %p)",
 	      device, pInfo, pMemoryRequirements);
 
-	if(pInfo->pNext)
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pInfo->pNext);
+	while(extInfo)
 	{
-		UNIMPLEMENTED("pInfo->pNext");
+		WARN("pInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	VkBaseOutStructure* extensionRequirements = reinterpret_cast<VkBaseOutStructure*>(pMemoryRequirements->pNext);
@@ -2454,7 +2530,7 @@
 		}
 		break;
 		default:
-			UNIMPLEMENTED("extensionRequirements->sType");
+			WARN("pMemoryRequirements->pNext sType = %s", vk::Stringify(extensionRequirements->sType));
 			break;
 		}
 
@@ -2469,9 +2545,11 @@
 	TRACE("(VkDevice device = %p, const VkBufferMemoryRequirementsInfo2* pInfo = %p, VkMemoryRequirements2* pMemoryRequirements = %p)",
 	      device, pInfo, pMemoryRequirements);
 
-	if(pInfo->pNext)
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pInfo->pNext);
+	while(extInfo)
 	{
-		UNIMPLEMENTED("pInfo->pNext");
+		WARN("pInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	VkBaseOutStructure* extensionRequirements = reinterpret_cast<VkBaseOutStructure*>(pMemoryRequirements->pNext);
@@ -2486,7 +2564,7 @@
 			}
 			break;
 		default:
-			UNIMPLEMENTED("extensionRequirements->sType");
+			WARN("pMemoryRequirements->pNext sType = %s", vk::Stringify(extensionRequirements->sType));
 			break;
 		}
 
@@ -2501,9 +2579,18 @@
 	TRACE("(VkDevice device = %p, const VkImageSparseMemoryRequirementsInfo2* pInfo = %p, uint32_t* pSparseMemoryRequirementCount = %p, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements = %p)",
 	      device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements);
 
-	if(pInfo->pNext || pSparseMemoryRequirements->pNext)
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pInfo->pNext);
+	while(extInfo)
 	{
-		UNIMPLEMENTED("pInfo->pNext || pSparseMemoryRequirements->pNext");
+		WARN("pInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
+	}
+
+	auto extensionRequirements = reinterpret_cast<VkBaseInStructure const*>(pSparseMemoryRequirements->pNext);
+	while(extensionRequirements)
+	{
+		WARN("pSparseMemoryRequirements->pNext sType = %s", vk::Stringify(extensionRequirements->sType));
+		extensionRequirements = extensionRequirements->pNext;
 	}
 
 	// The 'sparseBinding' feature is not supported, so images can not be created with the VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag.
@@ -2591,8 +2678,7 @@
 										 sizeof(deviceExtensionProperties) / sizeof(deviceExtensionProperties[0])));
 			break;
 		default:
-			// "the [driver] must skip over, without processing (other than reading the sType and pNext members) any structures in the chain with sType values not defined by [supported extenions]"
-			UNIMPLEMENTED("extensionFeatures->sType");   // TODO(b/119321052): UNIMPLEMENTED() should be used only for features that must still be implemented. Use a more informational macro here.
+			WARN("pFeatures->pNext sType = %s", vk::Stringify(extensionFeatures->sType));
 			break;
 		}
 
@@ -2688,7 +2774,7 @@
 			break;
 		default:
 			// "the [driver] must skip over, without processing (other than reading the sType and pNext members) any structures in the chain with sType values not defined by [supported extenions]"
-			UNIMPLEMENTED("extensionProperties->sType");   // TODO(b/119321052): UNIMPLEMENTED() should be used only for features that must still be implemented. Use a more informational macro here.
+			WARN("pProperties->pNext sType = %s", vk::Stringify(extensionProperties->sType));
 			break;
 		}
 
@@ -2703,9 +2789,11 @@
 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkFormat format = %d, VkFormatProperties2* pFormatProperties = %p)",
 		    physicalDevice, format, pFormatProperties);
 
-	if(pFormatProperties->pNext)
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pFormatProperties->pNext);
+	while(extInfo)
 	{
-		UNIMPLEMENTED("pFormatProperties->pNext");
+		WARN("pFormatProperties->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	vkGetPhysicalDeviceFormatProperties(physicalDevice, format, &(pFormatProperties->formatProperties));
@@ -2751,7 +2839,7 @@
 		}
 		break;
 		default:
-			UNIMPLEMENTED("extensionFormatInfo->sType");
+			WARN("pImageFormatInfo->pNext sType = %s", vk::Stringify(extensionFormatInfo->sType));
 			break;
 		}
 
@@ -2784,7 +2872,7 @@
 		}
 		break;
 		default:
-			UNIMPLEMENTED("extensionProperties->sType");
+			WARN("pImageFormatProperties->pNext sType = %s", vk::Stringify(extensionProperties->sType));
 			break;
 		}
 
@@ -2805,9 +2893,14 @@
 	TRACE("(VkPhysicalDevice physicalDevice = %p, uint32_t* pQueueFamilyPropertyCount = %p, VkQueueFamilyProperties2* pQueueFamilyProperties = %p)",
 		physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties);
 
-	if(pQueueFamilyProperties && pQueueFamilyProperties->pNext)
+	if(pQueueFamilyProperties)
 	{
-		UNIMPLEMENTED("pQueueFamilyProperties->pNext");
+		auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pQueueFamilyProperties->pNext);
+		while(extInfo)
+		{
+			WARN("pQueueFamilyProperties->pNext sType = %s", vk::Stringify(extInfo->sType));
+			extInfo = extInfo->pNext;
+		}
 	}
 
 	if(!pQueueFamilyProperties)
@@ -2824,9 +2917,11 @@
 {
 	TRACE("(VkPhysicalDevice physicalDevice = %p, VkPhysicalDeviceMemoryProperties2* pMemoryProperties = %p)", physicalDevice, pMemoryProperties);
 
-	if(pMemoryProperties->pNext)
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pMemoryProperties->pNext);
+	while(extInfo)
 	{
-		UNIMPLEMENTED("pMemoryProperties->pNext");
+		WARN("pMemoryProperties->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	vkGetPhysicalDeviceMemoryProperties(physicalDevice, &(pMemoryProperties->memoryProperties));
@@ -2837,9 +2932,14 @@
 	TRACE("(VkPhysicalDevice physicalDevice = %p, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo = %p, uint32_t* pPropertyCount = %p, VkSparseImageFormatProperties2* pProperties = %p)",
 	     physicalDevice, pFormatInfo, pPropertyCount, pProperties);
 
-	if(pProperties && pProperties->pNext)
+	if(pProperties)
 	{
-		UNIMPLEMENTED("pProperties->pNext");
+		auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pProperties->pNext);
+		while(extInfo)
+		{
+			WARN("pProperties->pNext sType = %s", vk::Stringify(extInfo->sType));
+			extInfo = extInfo->pNext;
+		}
 	}
 
 	// We do not support sparse images.
@@ -2859,9 +2959,11 @@
 	TRACE("(VkDevice device = %p, const VkDeviceQueueInfo2* pQueueInfo = %p, VkQueue* pQueue = %p)",
 	      device, pQueueInfo, pQueue);
 
-	if(pQueueInfo->pNext)
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pQueueInfo->pNext);
+	while(extInfo)
 	{
-		UNIMPLEMENTED("pQueueInfo->pNext");
+		WARN("pQueueInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	// The only flag that can be set here is VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT
@@ -2884,9 +2986,11 @@
 	TRACE("(VkDevice device = %p, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkSamplerYcbcrConversion* pYcbcrConversion = %p)",
 		    device, pCreateInfo, pAllocator, pYcbcrConversion);
 
-	if(pCreateInfo->pNext)
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pCreateInfo->pNext);
+	while(extInfo)
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext");
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	return vk::SamplerYcbcrConversion::Create(pAllocator, pCreateInfo, pYcbcrConversion);
@@ -2905,9 +3009,16 @@
 	TRACE("(VkDevice device = %p, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo = %p, const VkAllocationCallbacks* pAllocator = %p, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate = %p)",
 	      device, pCreateInfo, pAllocator, pDescriptorUpdateTemplate);
 
-	if(pCreateInfo->pNext || pCreateInfo->flags || (pCreateInfo->templateType != VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET))
+	if(pCreateInfo->flags || (pCreateInfo->templateType != VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET))
 	{
-		UNIMPLEMENTED("pCreateInfo->pNext || pCreateInfo->flags || (pCreateInfo->templateType != VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET)");
+		UNIMPLEMENTED("pCreateInfo->flags || (pCreateInfo->templateType != VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET)");
+	}
+
+	auto extInfo = reinterpret_cast<VkBaseInStructure const*>(pCreateInfo->pNext);
+	while(extInfo)
+	{
+		WARN("pCreateInfo->pNext sType = %s", vk::Stringify(extInfo->sType));
+		extInfo = extInfo->pNext;
 	}
 
 	return vk::DescriptorUpdateTemplate::Create(pAllocator, pCreateInfo, pDescriptorUpdateTemplate);
