From: Piers Daniell Date: Fri, 4 May 2018 22:53:25 +0000 (-0600) Subject: Don't use invalid sType as canary value for arrays X-Git-Tag: upstream/1.3.5~2565^2~25 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6370e32eddf6aaaef3fcacd1ca09c7ea8fa1a108;p=platform%2Fupstream%2FVK-GL-CTS.git 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::getDisplayModeProperties(VkDisplayKHR display, *//*--------------------------------------------------------------------*/ 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 displaysProps; VkResult result; @@ -515,7 +530,7 @@ bool DisplayCoverageTestInstance::getDisplays2 (DisplayVector& displays) return false; } - displaysProps.resize(countReported); + displaysProps.resize(countReported, displayProperties2); countRetrieved = countReported; @@ -567,9 +582,21 @@ bool DisplayCoverageTestInstance::getDisplays2 (DisplayVector& displays) *//*--------------------------------------------------------------------*/ 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 @@ bool DisplayCoverageTestInstance::getDisplayModeProperties2 (VkDisplayKHR displa return false; } - modeProperties.resize(countReported); + modeProperties.resize(countReported, displayModeProperties2); countRetrieved = countReported; @@ -1718,13 +1745,13 @@ tcu::TestStatus DisplayCoverageTestInstance::testGetPhysicalDeviceDisplayPropert 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(0xABCDEF11); const deUint32 canaryItemCount = 1; std::vector 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 @@ tcu::TestStatus DisplayCoverageTestInstance::testGetPhysicalDeviceDisplayPropert } // 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 @@ tcu::TestStatus DisplayCoverageTestInstance::testGetPhysicalDeviceDisplayPlanePr 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(0xABCDEF11); const deUint32 canaryItemCount = 1; std::vector 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 @@ tcu::TestStatus DisplayCoverageTestInstance::testGetPhysicalDeviceDisplayPlanePr } // 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 @@ tcu::TestStatus DisplayCoverageTestInstance::testGetDisplayModeProperties2KHR (v 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(0xABCDEF11); const deUint32 canaryItemCount = 1; std::vector 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 @@ tcu::TestStatus DisplayCoverageTestInstance::testGetDisplayModeProperties2KHR (v } // 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"); } }