Skip to content

Commit 0032cee

Browse files
committed
tests: Use currentExtent as swapchain size
Current Windows ARM drivers report minImageExtent == 1x1 and it is not equal to currentExtent (as required by the spec for Win32). QueuePresent with 1x1 swapchain fails with ERROR_OUT_OF_DATE
1 parent 4608f6a commit 0032cee

13 files changed

Lines changed: 149 additions & 135 deletions

tests/framework/render.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -929,6 +929,17 @@ SurfaceInformation VkRenderFramework::GetSwapchainInfo(const VkSurfaceKHR surfac
929929
return info;
930930
}
931931

932+
VkExtent2D VkRenderFramework::GetSwapchainExtent(const VkSurfaceCapabilitiesKHR& surface_caps) {
933+
VkExtent2D swapchain_extent = surface_caps.currentExtent;
934+
935+
// If current extent uses special values then we are free to choose the size and just use the min extent
936+
if (surface_caps.currentExtent.width == 0XFFFFFFFFu || surface_caps.currentExtent.height == 0XFFFFFFFFu) {
937+
swapchain_extent = surface_caps.minImageExtent;
938+
}
939+
940+
return swapchain_extent;
941+
}
942+
932943
VkSwapchainCreateInfoKHR VkRenderFramework::GetDefaultSwapchainCreateInfo(VkSurfaceKHR surface,
933944
const SurfaceInformation& surface_info,
934945
VkImageUsageFlags image_usage) {
@@ -937,7 +948,7 @@ VkSwapchainCreateInfoKHR VkRenderFramework::GetDefaultSwapchainCreateInfo(VkSurf
937948
swapchain_ci.minImageCount = surface_info.surface_capabilities.minImageCount;
938949
swapchain_ci.imageFormat = surface_info.surface_formats[0].format;
939950
swapchain_ci.imageColorSpace = surface_info.surface_formats[0].colorSpace;
940-
swapchain_ci.imageExtent = surface_info.surface_capabilities.minImageExtent;
951+
swapchain_ci.imageExtent = GetSwapchainExtent(surface_info.surface_capabilities);
941952
swapchain_ci.imageArrayLayers = 1;
942953
swapchain_ci.imageUsage = image_usage;
943954
swapchain_ci.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;

tests/framework/render.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ class VkRenderFramework : public VkTestFramework {
108108
// Functions to create surfaces and swapchains that *aren't* member variables of VkRenderFramework
109109
VkResult CreateSurface(SurfaceContext &surface_context, vkt::Surface &surface, VkInstance custom_instance = VK_NULL_HANDLE);
110110
SurfaceInformation GetSwapchainInfo(const VkSurfaceKHR surface);
111+
static VkExtent2D GetSwapchainExtent(const VkSurfaceCapabilitiesKHR& surface_caps);
111112
static VkSwapchainCreateInfoKHR GetDefaultSwapchainCreateInfo(
112113
VkSurfaceKHR surface, const SurfaceInformation &surface_info,
113114
VkImageUsageFlags image_usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT);

tests/icd/test_icd.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,8 +1015,8 @@ static VKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilitiesKHR(Vk
10151015
// In general just say max supported is available for requested surface
10161016
pSurfaceCapabilities->minImageCount = 1;
10171017
pSurfaceCapabilities->maxImageCount = 0;
1018-
pSurfaceCapabilities->currentExtent.width = 0xFFFFFFFF;
1019-
pSurfaceCapabilities->currentExtent.height = 0xFFFFFFFF;
1018+
pSurfaceCapabilities->currentExtent.width = 64;
1019+
pSurfaceCapabilities->currentExtent.height = 64;
10201020
pSurfaceCapabilities->minImageExtent.width = 1;
10211021
pSurfaceCapabilities->minImageExtent.height = 1;
10221022
pSurfaceCapabilities->maxImageExtent.width = 0xFFFF;

tests/unit/arm_best_practices.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ TEST_F(VkArmBestPracticesLayerTest, PresentModeTest) {
469469
swapchain_create_info.minImageCount = m_surface_capabilities.minImageCount;
470470
swapchain_create_info.imageFormat = m_surface_formats[0].format;
471471
swapchain_create_info.imageColorSpace = m_surface_formats[0].colorSpace;
472-
swapchain_create_info.imageExtent = m_surface_capabilities.minImageExtent;
472+
swapchain_create_info.imageExtent = GetSwapchainExtent(m_surface_capabilities);
473473
swapchain_create_info.imageArrayLayers = 1;
474474
swapchain_create_info.imageUsage = imageUsage;
475475
swapchain_create_info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;

tests/unit/best_practices.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -637,7 +637,7 @@ TEST_F(VkBestPracticesLayerTest, TripleBufferingTest) {
637637
swapchain_create_info.minImageCount = 2;
638638
swapchain_create_info.imageFormat = m_surface_formats[0].format;
639639
swapchain_create_info.imageColorSpace = m_surface_formats[0].colorSpace;
640-
swapchain_create_info.imageExtent = m_surface_capabilities.minImageExtent;
640+
swapchain_create_info.imageExtent = GetSwapchainExtent(m_surface_capabilities);
641641
swapchain_create_info.imageArrayLayers = 1;
642642
swapchain_create_info.imageUsage = imageUsage;
643643
swapchain_create_info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
@@ -703,7 +703,7 @@ TEST_F(VkBestPracticesLayerTest, SwapchainCreationTest) {
703703

704704
swapchain_create_info.imageFormat = m_surface_formats[0].format;
705705
swapchain_create_info.imageColorSpace = m_surface_formats[0].colorSpace;
706-
swapchain_create_info.imageExtent = m_surface_capabilities.minImageExtent;
706+
swapchain_create_info.imageExtent = GetSwapchainExtent(m_surface_capabilities);
707707

708708
// GetPhysicalDeviceSurfacePresentModesKHR() not called before trying to create a swapchain
709709
m_errorMonitor->SetDesiredWarning("BestPractices-vkCreateSwapchainKHR-present-mode-no-surface");

tests/unit/best_practices_positive.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ TEST_F(VkPositiveBestPracticesLayerTest, CreateFifoRelaxedSwapchain) {
396396
swapchain_create_info.minImageCount = 2;
397397
swapchain_create_info.imageFormat = m_surface_formats[0].format;
398398
swapchain_create_info.imageColorSpace = m_surface_formats[0].colorSpace;
399-
swapchain_create_info.imageExtent = m_surface_capabilities.minImageExtent;
399+
swapchain_create_info.imageExtent = GetSwapchainExtent(m_surface_capabilities);
400400
swapchain_create_info.imageArrayLayers = 1;
401401
swapchain_create_info.imageUsage = imageUsage;
402402
swapchain_create_info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;

tests/unit/debug_extensions.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ TEST_F(NegativeDebugExtensions, SwapchainImagesDebugMarker) {
538538
swapchain_create_info.minImageCount = info.surface_capabilities.minImageCount;
539539
swapchain_create_info.imageFormat = info.surface_formats[0].format;
540540
swapchain_create_info.imageColorSpace = info.surface_formats[0].colorSpace;
541-
swapchain_create_info.imageExtent = info.surface_capabilities.minImageExtent;
541+
swapchain_create_info.imageExtent = GetSwapchainExtent(info.surface_capabilities);
542542
swapchain_create_info.imageArrayLayers = 1;
543543
swapchain_create_info.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
544544
swapchain_create_info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;

tests/unit/debug_extensions_positive.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ TEST_F(PositiveDebugExtensions, SwapchainImagesDebugMarker) {
170170
swapchain_create_info.minImageCount = info.surface_capabilities.minImageCount;
171171
swapchain_create_info.imageFormat = info.surface_formats[0].format;
172172
swapchain_create_info.imageColorSpace = info.surface_formats[0].colorSpace;
173-
swapchain_create_info.imageExtent = info.surface_capabilities.minImageExtent;
173+
swapchain_create_info.imageExtent = GetSwapchainExtent(info.surface_capabilities);
174174
swapchain_create_info.imageArrayLayers = 1;
175175
swapchain_create_info.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
176176
swapchain_create_info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;

tests/unit/image_layout_positive.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,8 @@ TEST_F(PositiveImageLayout, ImagelessTracking) {
110110
RETURN_IF_SKIP(InitState(nullptr, &create_device_pnext));
111111
RETURN_IF_SKIP(InitSwapchain(VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT));
112112

113-
uint32_t attachmentWidth = m_surface_capabilities.minImageExtent.width;
114-
uint32_t attachmentHeight = m_surface_capabilities.minImageExtent.height;
113+
uint32_t attachmentWidth = GetSwapchainExtent(m_surface_capabilities).width;
114+
uint32_t attachmentHeight = GetSwapchainExtent(m_surface_capabilities).height;
115115
VkFormat attachmentFormat = m_surface_formats[0].format;
116116

117117
RenderPassSingleSubpass rp(*this);

tests/unit/parent.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ TEST_F(NegativeParent, Instance_Surface) {
340340
swapchain_ci.minImageCount = m_surface_capabilities.minImageCount;
341341
swapchain_ci.imageFormat = m_surface_formats[0].format;
342342
swapchain_ci.imageColorSpace = m_surface_formats[0].colorSpace;
343-
swapchain_ci.imageExtent = m_surface_capabilities.minImageExtent;
343+
swapchain_ci.imageExtent = GetSwapchainExtent(m_surface_capabilities);
344344
swapchain_ci.imageArrayLayers = 1;
345345
swapchain_ci.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
346346
swapchain_ci.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
@@ -387,7 +387,7 @@ TEST_F(NegativeParent, Device_OldSwapchain) {
387387
swapchain_ci.minImageCount = m_surface_capabilities.minImageCount;
388388
swapchain_ci.imageFormat = m_surface_formats[0].format;
389389
swapchain_ci.imageColorSpace = m_surface_formats[0].colorSpace;
390-
swapchain_ci.imageExtent = m_surface_capabilities.minImageExtent;
390+
swapchain_ci.imageExtent = GetSwapchainExtent(m_surface_capabilities);
391391
swapchain_ci.imageArrayLayers = 1;
392392
swapchain_ci.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
393393
swapchain_ci.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;

0 commit comments

Comments
 (0)