Skip to content

Commit

Permalink
Cleanup.
Browse files Browse the repository at this point in the history
  • Loading branch information
bkaradzic committed Jun 6, 2024
1 parent 763732e commit b66f60c
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 30 deletions.
62 changes: 35 additions & 27 deletions src/renderer_vk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1914,9 +1914,9 @@ VK_IMPORT_DEVICE
m_textVideoMem.resize(false, _init.resolution.width, _init.resolution.height);
m_textVideoMem.clear();

for (uint8_t ii = 0; ii < BX_COUNTOF(m_swapchainFormats); ++ii)
for (uint8_t ii = 0; ii < BX_COUNTOF(m_swapChainFormats); ++ii)
{
m_swapchainFormats[ii] = TextureFormat::Enum(ii);
m_swapChainFormats[ii] = TextureFormat::Enum(ii);
}

result = m_backBuffer.create(UINT16_MAX, g_platformData.nwh, m_resolution.width, m_resolution.height, m_resolution.format);
Expand Down Expand Up @@ -2763,12 +2763,14 @@ VK_IMPORT_DEVICE
| BGFX_RESET_DEPTH_CLAMP
);

// Note: m_needToRefreshSwapchain is deliberately ignored when deciding whether to recreate the swapchain
// because it can happen several frames before submit is called with the new resolution.
// Instead, vkAcquireNextImageKHR and all draws to the backbuffer are skipped until the window size is updated.
// That also fixes a related issue where VK_ERROR_OUT_OF_DATE_KHR is returned from
// vkQueuePresentKHR when the window doesn't exist anymore, and vkGetPhysicalDeviceSurfaceCapabilitiesKHR
// fails with VK_ERROR_SURFACE_LOST_KHR.
// Note: m_needToRefreshSwapchain is deliberately ignored when deciding whether to
// recreate the swapchain because it can happen several frames before submit is called
// with the new resolution.
//
// Instead, vkAcquireNextImageKHR and all draws to the backbuffer are skipped until
// the window size is updated. That also fixes a related issue where VK_ERROR_OUT_OF_DATE_KHR
// is returned from vkQueuePresentKHR when the window doesn't exist anymore, and
// vkGetPhysicalDeviceSurfaceCapabilitiesKHR fails with VK_ERROR_SURFACE_LOST_KHR.

if (false
|| m_resolution.format != _resolution.format
Expand Down Expand Up @@ -4431,7 +4433,7 @@ VK_IMPORT_DEVICE
bool m_timerQuerySupport;

FrameBufferVK m_backBuffer;
TextureFormat::Enum m_swapchainFormats[TextureFormat::Count];
TextureFormat::Enum m_swapChainFormats[TextureFormat::Count];

uint16_t m_numWindows;
FrameBufferHandle m_windows[BGFX_CONFIG_MAX_FRAME_BUFFERS];
Expand Down Expand Up @@ -6645,7 +6647,7 @@ VK_DESTROY

void SwapChainVK::destroy()
{
if (VK_NULL_HANDLE != m_swapchain)
if (VK_NULL_HANDLE != m_swapChain)
{
releaseFrameBuffer();
releaseAttachments();
Expand Down Expand Up @@ -7012,41 +7014,47 @@ VK_DESTROY
m_sci.presentMode = s_presentMode[presentModeIdx].mode;
m_sci.clipped = VK_FALSE;

result = vkCreateSwapchainKHR(device, &m_sci, allocatorCb, &m_swapchain);
result = vkCreateSwapchainKHR(device, &m_sci, allocatorCb, &m_swapChain);
if (VK_SUCCESS != result)
{
BX_TRACE("Create swapchain error: vkCreateSwapchainKHR failed %d: %s.", result, getName(result) );
return result;
}

m_sci.oldSwapchain = m_swapchain;
m_sci.oldSwapchain = m_swapChain;

result = vkGetSwapchainImagesKHR(device, m_swapchain, &m_numSwapchainImages, NULL);
result = vkGetSwapchainImagesKHR(device, m_swapChain, &m_numSwapChainImages, NULL);
if (VK_SUCCESS != result)
{
BX_TRACE("Create swapchain error: vkGetSwapchainImagesKHR failed %d: %s.", result, getName(result) );
return result;
}

if (m_numSwapchainImages < m_sci.minImageCount)
BX_TRACE("Create swapchain numSwapChainImages %d, minImageCount %d, BX_COUNTOF(m_backBufferColorImage) %d"
, m_numSwapChainImages
, m_sci.minImageCount
, BX_COUNTOF(m_backBufferColorImage)
);

if (m_numSwapChainImages < m_sci.minImageCount)
{
BX_TRACE("Create swapchain error: vkGetSwapchainImagesKHR: numSwapchainImages %d < minImageCount %d."
, m_numSwapchainImages
, m_numSwapChainImages
, m_sci.minImageCount
);
return VK_ERROR_INITIALIZATION_FAILED;
}

if (m_numSwapchainImages > BX_COUNTOF(m_backBufferColorImage) )
if (m_numSwapChainImages > BX_COUNTOF(m_backBufferColorImage) )
{
BX_TRACE("Create swapchain error: vkGetSwapchainImagesKHR: numSwapchainImages %d > countof(m_backBufferColorImage) %d."
, m_numSwapchainImages
, m_numSwapChainImages
, BX_COUNTOF(m_backBufferColorImage)
);
return VK_ERROR_INITIALIZATION_FAILED;
}

result = vkGetSwapchainImagesKHR(device, m_swapchain, &m_numSwapchainImages, &m_backBufferColorImage[0]);
result = vkGetSwapchainImagesKHR(device, m_swapChain, &m_numSwapChainImages, &m_backBufferColorImage[0]);
if (VK_SUCCESS != result && VK_INCOMPLETE != result)
{
BX_TRACE("Create swapchain error: vkGetSwapchainImagesKHR failed %d: %s."
Expand All @@ -7072,7 +7080,7 @@ VK_DESTROY
ivci.subresourceRange.baseArrayLayer = 0;
ivci.subresourceRange.layerCount = 1;

for (uint32_t ii = 0; ii < m_numSwapchainImages; ++ii)
for (uint32_t ii = 0; ii < m_numSwapChainImages; ++ii)
{
ivci.image = m_backBufferColorImage[ii];

Expand Down Expand Up @@ -7129,7 +7137,7 @@ VK_DESTROY
release(m_renderDoneSemaphore[ii]);
}

release(m_swapchain);
release(m_swapChain);
}

VkResult SwapChainVK::createAttachments(VkCommandBuffer _commandBuffer)
Expand Down Expand Up @@ -7231,7 +7239,7 @@ VK_DESTROY
return result;
}

for (uint32_t ii = 0; ii < m_numSwapchainImages; ++ii)
for (uint32_t ii = 0; ii < m_numSwapChainImages; ++ii)
{
uint32_t numAttachments = 2;
::VkImageView attachments[3] =
Expand Down Expand Up @@ -7387,9 +7395,9 @@ VK_DESTROY
{
selectedFormat = requested;
if (0 != ii
&& s_renderVK->m_swapchainFormats[_format] != selectedFormat)
&& s_renderVK->m_swapChainFormats[_format] != selectedFormat)
{
s_renderVK->m_swapchainFormats[_format] = selectedFormat;
s_renderVK->m_swapChainFormats[_format] = selectedFormat;
BX_TRACE(
"findSurfaceFormat: Surface format %s not found! Defaulting to %s."
, bimg::getName(bimg::TextureFormat::Enum(_format) )
Expand All @@ -7413,7 +7421,7 @@ VK_DESTROY

bool SwapChainVK::acquire(VkCommandBuffer _commandBuffer)
{
if (VK_NULL_HANDLE == m_swapchain
if (VK_NULL_HANDLE == m_swapChain
|| m_needToRefreshSwapchain)
{
return false;
Expand All @@ -7432,7 +7440,7 @@ VK_DESTROY
BGFX_PROFILER_SCOPE("vkAcquireNextImageKHR", kColorFrame);
result = vkAcquireNextImageKHR(
device
, m_swapchain
, m_swapChain
, UINT64_MAX
, m_lastImageAcquiredSemaphore
, VK_NULL_HANDLE
Expand Down Expand Up @@ -7482,7 +7490,7 @@ VK_DESTROY
void SwapChainVK::present()
{
BGFX_PROFILER_SCOPE("SwapChainVk::present", kColorFrame);
if (VK_NULL_HANDLE != m_swapchain
if (VK_NULL_HANDLE != m_swapChain
&& m_needPresent)
{
VkPresentInfoKHR pi;
Expand All @@ -7491,7 +7499,7 @@ VK_DESTROY
pi.waitSemaphoreCount = 1;
pi.pWaitSemaphores = &m_lastImageRenderedSemaphore;
pi.swapchainCount = 1;
pi.pSwapchains = &m_swapchain;
pi.pSwapchains = &m_swapChain;
pi.pImageIndices = &m_backBufferColorIdx;
pi.pResults = NULL;
VkResult result;
Expand Down
6 changes: 3 additions & 3 deletions src/renderer_vk.h
Original file line number Diff line number Diff line change
Expand Up @@ -705,7 +705,7 @@ VK_DESTROY_FUNC(DescriptorSet);
{
SwapChainVK()
: m_nwh(NULL)
, m_swapchain(VK_NULL_HANDLE)
, m_swapChain(VK_NULL_HANDLE)
, m_lastImageRenderedSemaphore(VK_NULL_HANDLE)
, m_lastImageAcquiredSemaphore(VK_NULL_HANDLE)
, m_backBufferColorMsaaImageView(VK_NULL_HANDLE)
Expand Down Expand Up @@ -746,8 +746,8 @@ VK_DESTROY_FUNC(DescriptorSet);
TextureFormat::Enum m_depthFormat;

VkSurfaceKHR m_surface;
VkSwapchainKHR m_swapchain;
uint32_t m_numSwapchainImages;
VkSwapchainKHR m_swapChain;
uint32_t m_numSwapChainImages;
VkImageLayout m_backBufferColorImageLayout[kMaxBackBuffers];
VkImage m_backBufferColorImage[kMaxBackBuffers];
VkImageView m_backBufferColorImageView[kMaxBackBuffers];
Expand Down

0 comments on commit b66f60c

Please sign in to comment.