Remote Android and Linux test support part 2

Support swapchain image size greater than 4
This commit is contained in:
thisisjimmyfb
2025-06-01 16:41:40 -07:00
committed by Baldur Karlsson
parent b1d3123583
commit 035fc9974d
2 changed files with 31 additions and 27 deletions
+28 -24
View File
@@ -1434,23 +1434,6 @@ VulkanWindow::VulkanWindow(VulkanGraphicsTest *test, GraphicsWindow *win)
{
std::lock_guard<std::mutex> lock(m_Test->mutex);
for(size_t i = 0; i < ARRAY_COUNT(renderStartSemaphore); i++)
{
CHECK_VKR(vkCreateSemaphore(m_Test->device, vkh::SemaphoreCreateInfo(), NULL,
&renderStartSemaphore[i]));
CHECK_VKR(vkCreateSemaphore(m_Test->device, vkh::SemaphoreCreateInfo(), NULL,
&renderEndSemaphore[i]));
test->setName(renderStartSemaphore[i], title + " renderStartSemaphore" + std::to_string(i));
test->setName(renderEndSemaphore[i], title + " renderEndSemaphore" + std::to_string(i));
// create signalled so the first wait works
CHECK_VKR(vkCreateFence(m_Test->device, vkh::FenceCreateInfo(VK_FENCE_CREATE_SIGNALED_BIT),
NULL, &imageFences[i]));
test->setName(imageFences[i], title + " fence" + std::to_string(i));
}
#if defined(WIN32)
VkWin32SurfaceCreateInfoKHR createInfo;
@@ -1503,7 +1486,12 @@ VulkanWindow::~VulkanWindow()
DestroySwapchain();
{
for(size_t i = 0; i < ARRAY_COUNT(renderStartSemaphore); i++)
TEST_ASSERT(renderStartSemaphore.size() == renderEndSemaphore.size(),
"size mismatch between start/end semaphore");
TEST_ASSERT(renderStartSemaphore.size() == imageFences.size(),
"size mismatch between render/image semaphore");
for(size_t i = 0; i < renderStartSemaphore.size(); i++)
{
vkDestroySemaphore(m_Test->device, renderStartSemaphore[i], NULL);
vkDestroySemaphore(m_Test->device, renderEndSemaphore[i], NULL);
@@ -1595,9 +1583,9 @@ bool VulkanWindow::CreateSwapchain()
CHECK_VKR(vkCreateSwapchainKHR(
m_Test->device,
vkh::SwapchainCreateInfoKHR(
surface, mode, surfaceFormat, {width, height},
VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT),
vkh::SwapchainCreateInfoKHR(surface, mode, surfaceFormat, {width, height},
VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
VK_NULL_HANDLE, capabilities.minImageCount),
NULL, &swap));
CHECK_VKR(vkh::getSwapchainImagesKHR(imgs, m_Test->device, swap));
@@ -1614,8 +1602,24 @@ bool VulkanWindow::CreateSwapchain()
rp = m_Test->createRenderPass(renderPassCreateInfo);
}
TEST_ASSERT(imgs.size() <= ARRAY_COUNT(renderStartSemaphore),
"Expected to have one semaphore set per image");
renderStartSemaphore.resize(imgs.size());
renderEndSemaphore.resize(imgs.size());
imageFences.resize(imgs.size());
for(size_t i = 0; i < renderStartSemaphore.size(); i++)
{
CHECK_VKR(vkCreateSemaphore(m_Test->device, vkh::SemaphoreCreateInfo(), NULL,
&renderStartSemaphore[i]));
CHECK_VKR(vkCreateSemaphore(m_Test->device, vkh::SemaphoreCreateInfo(), NULL,
&renderEndSemaphore[i]));
m_Test->setName(renderStartSemaphore[i], title + " renderStartSemaphore" + std::to_string(i));
m_Test->setName(renderEndSemaphore[i], title + " renderEndSemaphore" + std::to_string(i));
CHECK_VKR(vkCreateFence(m_Test->device, vkh::FenceCreateInfo(VK_FENCE_CREATE_SIGNALED_BIT),
NULL, &imageFences[i]));
m_Test->setName(imageFences[i], title + " fence" + std::to_string(i));
}
imgviews.resize(imgs.size());
for(size_t i = 0; i < imgs.size(); i++)
@@ -1636,7 +1640,7 @@ void VulkanWindow::Acquire()
if(swap == VK_NULL_HANDLE)
return;
semIdx = (semIdx + 1) % ARRAY_COUNT(renderStartSemaphore);
semIdx = (semIdx + 1) % renderStartSemaphore.size();
// acquire next image stupidly does not properly block, do a manual block
vkWaitForFences(m_Test->device, 1, &imageFences[semIdx], VK_FALSE, UINT64_MAX);
+3 -3
View File
@@ -183,9 +183,9 @@ private:
std::vector<VkImage> imgs;
std::vector<VkImageView> imgviews;
uint32_t semIdx = 0;
VkSemaphore renderStartSemaphore[4] = {};
VkSemaphore renderEndSemaphore[4] = {};
VkFence imageFences[4] = {};
std::vector<VkSemaphore> renderStartSemaphore;
std::vector<VkSemaphore> renderEndSemaphore;
std::vector<VkFence> imageFences;
std::vector<VkFramebuffer> fbs;
GraphicsWindow *m_Win;