Don't use invalid sType as canary value for arrays

Using an invalid sType in an array is a violation of Vulkan
valid usage and will fail the test if validation layers
are enabled.

This CL also ensures the property structs passed into the
get functions have their sType initialized correctly.

Affects: dEQP-VK.wsi.display.*

Components: Vulkan

VK-GL-CTS issue: 1155

Change-Id: I4b9b00248265b2e3c7d0b2b652e98d2f0f5a0902
diff --git a/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTests.cpp b/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTests.cpp
index e6fd94a..6bcf6ae 100644
--- a/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTests.cpp
+++ b/external/vulkancts/modules/vulkan/wsi/vktWsiDisplayTests.cpp
@@ -494,8 +494,23 @@
  *//*--------------------------------------------------------------------*/
 bool DisplayCoverageTestInstance::getDisplays2 (DisplayVector& displays)
 {
-	deUint32								countReported	=	0u;
-	deUint32								countRetrieved	=	0u;
+	deUint32								countReported		=	0u;
+	deUint32								countRetrieved		=	0u;
+	const VkDisplayPropertiesKHR			displayProperties	=	{
+																		DE_NULL,										// VkDisplayKHR					display
+																		DE_NULL,										// const char*					displayName
+																		{0, 0},											// VkExtent2D					physicalDimensions
+																		{0, 0},											// VkExtent2D					physicalResolution
+																		0,												// VkSurfaceTransformFlagsKHR	supportedTransforms
+																		VK_FALSE,										// VkBool32						planeReorderPossible
+																		VK_FALSE										// VkBool32						persistentContent
+																	};
+	const VkDisplayProperties2KHR			displayProperties2	=	{
+																		VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR,		// VkStructureType			sType
+																		DE_NULL,										// void*					pNext
+																		displayProperties								// VkDisplayPropertiesKHR	displayProperties
+																	};
+
 	std::vector<VkDisplayProperties2KHR>	displaysProps;
 	VkResult								result;
 
@@ -515,7 +530,7 @@
 		return false;
 	}
 
-	displaysProps.resize(countReported);
+	displaysProps.resize(countReported, displayProperties2);
 
 	countRetrieved = countReported;
 
@@ -567,9 +582,21 @@
  *//*--------------------------------------------------------------------*/
 bool DisplayCoverageTestInstance::getDisplayModeProperties2 (VkDisplayKHR display, DisplayModeProperties2Vector& modeProperties)
 {
-	deUint32	countReported	=	0u;
-	deUint32	countRetrieved	=	0u;
-	VkResult	result;
+	deUint32							countReported			=	0u;
+	deUint32							countRetrieved			=	0u;
+	const VkDisplayModePropertiesKHR	displayModeProperties	=	{
+																		DE_NULL,											// VkDisplayModeKHR				displayMode
+																		{													// VkDisplayModeParametersKHR	parameters
+																			{0, 0},											// VkExtent2D					visibleRegion
+																			0												// uint32_t						refreshRate
+																		}
+																	};
+	const VkDisplayModeProperties2KHR	displayModeProperties2	=	{
+																		VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR,	// VkStructureType				sType
+																		DE_NULL,											// void*						pNext
+																		displayModeProperties								// VkDisplayModePropertiesKHR	displayModeProperties
+																	};
+	VkResult							result;
 
 	modeProperties.clear();
 
@@ -589,7 +616,7 @@
 		return false;
 	}
 
-	modeProperties.resize(countReported);
+	modeProperties.resize(countReported, displayModeProperties2);
 
 	countRetrieved = countReported;
 
@@ -1718,13 +1745,13 @@
 																						DE_NULL,					// void*					pNext
 																						nonUpdatedDisplayProperties	// VkDisplayPropertiesKHR	displayProperties
 																					};
-		VkStructureType							canaryItem						=	VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;	// Some invalid but compilable value
+		const VkDisplayKHR						canaryDisplay					=	static_cast<VkDisplayKHR>(0xABCDEF11);
 		const deUint32							canaryItemCount					=	1;
 		std::vector<VkDisplayProperties2KHR>	displaysProps2						(displayCountRequested + canaryItemCount, nonUpdatedDisplayProperties2);
 		deUint32								displayCountRetrieved			=	displayCountRequested;
 		DisplaySet								displaySet;
 
-		displaysProps2[displayCountExpected].sType = canaryItem;
+		displaysProps2[displayCountExpected].displayProperties.display = canaryDisplay;
 
 		result = m_vki.getPhysicalDeviceDisplayProperties2KHR(	m_physicalDevice,		// VkPhysicalDevice			physicalDevice
 																&displayCountRetrieved,	// uint32_t*				pPropertyCount
@@ -1777,7 +1804,7 @@
 		}
 
 		// Check the driver has not written more than requested
-		if (displaysProps2[displayCountExpected].sType != canaryItem)
+		if (displaysProps2[displayCountExpected].displayProperties.display != canaryDisplay)
 			TCU_FAIL("Memory damage detected: driver has written more than expected");
 
 		// Check display handle uniqueness
@@ -1860,12 +1887,12 @@
 																						DE_NULL,					// void*						pNext
 																						nonUpdatedPlaneProperties	// VkDisplayPlanePropertiesKHR	displayPlaneProperties
 																					};
-		VkStructureType								canaryItem					=	VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;	// Some invalid but compilable value
+		const VkDisplayKHR							canaryDisplay				=	static_cast<VkDisplayKHR>(0xABCDEF11);
 		const deUint32								canaryItemCount				=	1;
 		std::vector<VkDisplayPlaneProperties2KHR>	planeProps2						(planeCountRequested + canaryItemCount, nonUpdatedPlaneProperties2);
 		deUint32									planeCountRetrieved			=	planeCountRequested;
 
-		planeProps2[planeCountExpected].sType = canaryItem;
+		planeProps2[planeCountExpected].displayPlaneProperties.currentDisplay = canaryDisplay;
 
 		result = m_vki.getPhysicalDeviceDisplayPlaneProperties2KHR(	m_physicalDevice,		// VkPhysicalDevice					physicalDevice
 																	&planeCountRetrieved,	// uint32_t*						pPropertyCount
@@ -1915,7 +1942,7 @@
 		}
 
 		// Check the driver has not written more than requested
-		if (planeProps2[planeCountExpected].sType != canaryItem)
+		if (planeProps2[planeCountExpected].displayPlaneProperties.currentDisplay != canaryDisplay)
 			TCU_FAIL("Memory damage detected: driver has written more than expected");
 	}
 
@@ -2094,12 +2121,12 @@
 																							DE_NULL,					// void*						pNext
 																							nonUpdatedModeProperties	// VkDisplayModePropertiesKHR	displayModeProperties
 																						};
-			VkStructureType								canaryItem					=	VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO;	// Some invalid but compilable value
+			const VkDisplayModeKHR						canaryDisplayMode			=	static_cast<VkDisplayModeKHR>(0xABCDEF11);
 			const deUint32								canaryItemCount				=	1;
 			std::vector<VkDisplayModeProperties2KHR>	modesProperties2				(modesCountRequested + canaryItemCount, nonUpdatedModeProperties2);
 			deUint32									modesCountRetrieved			=	modesCountRequested;
 
-			modesProperties2[modesCountExpected].sType = canaryItem;
+			modesProperties2[modesCountExpected].displayModeProperties.displayMode = canaryDisplayMode;
 
 			result = m_vki.getDisplayModeProperties2KHR(m_physicalDevice,		// VkPhysicalDevice				physicalDevice
 														display,				// VkDisplayKHR					display
@@ -2151,7 +2178,7 @@
 			}
 
 			// Check the driver has not written more than requested
-			if (modesProperties2[modesCountExpected].sType != canaryItem)
+			if (modesProperties2[modesCountExpected].displayModeProperties.displayMode != canaryDisplayMode)
 				TCU_FAIL("Memory damage detected: driver has written more than expected");
 		}
 	}