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");
}
}