message: Fixed Vulkan validation layer warnings when resizing the window
diff: @@ -445,6 +445,7 @@ VkResult SwapChainVkImpl::AcquireNextImage(DeviceContextVkImpl* pDeviceCtxVk)
  VERIFY_EXPR(res == VK_SUCCESS); (void)res;
  }
  LogicalDevice.ResetFence(OldestSubmittedFence);
  + m_ImageAcquiredFenceSubmitted[OldestSubmittedImageFenceInd] = false;
  }
  VkFence ImageAcquiredFence = m_ImageAcquiredFences [m_SemaphoreIndex];
  @@ -560,17 +561,32 @@ void SwapChainVkImpl::RecreateVulkanSwapchain(DeviceContextVkImpl* pImmediateCtx
  if (pImmediateCtxVk->IsDefaultFBBound())
  pImmediateCtxVk->ResetRenderTargets();
  + RenderDeviceVkImpl* pDeviceVk = m_pRenderDevice.RawPtr<RenderDeviceVkImpl>();
  + const auto& LogicalDevice = pDeviceVk->GetLogicalDevice();
  +
  + // This will release references to Vk swap chain buffers hold by
  + // m_pBackBufferRTV[].
  + pDeviceVk->IdleGPU();
  +
  + // We need to explicitly wait for all submitted Image Acquired Fences to signal.
  + // Just idling the GPU is not enough and results in validation warnings.
  + // As a matter of fact, it is only required to check the fence status.
  + for(size_t i=0; i < m_ImageAcquiredFences.size(); ++i)
  + {
  + if (m_ImageAcquiredFenceSubmitted[i])
  + {
  + VkFence vkFence = m_ImageAcquiredFences[i];
  + if (LogicalDevice.GetFenceStatus(vkFence) != VK_SUCCESS)
  + LogicalDevice.WaitForFences(1, &vkFence, VK_TRUE, UINT64_MAX);
  + }
  + }
  +
  // All references to the swap chain must be released before it can be resized
  m_pBackBufferRTV.clear();
  m_SwapChainImagesInitialized.clear();
  m_ImageAcquiredFenceSubmitted.clear();
  m_pDepthBufferDSV.Release();
  - RenderDeviceVkImpl* pDeviceVk = m_pRenderDevice.RawPtr<RenderDeviceVkImpl>();
  - // This will release references to Vk swap chain buffers hold by
  - // m_pBackBufferRTV[]
  - pDeviceVk->IdleGPU();
  -
  // We must wait unitl GPU is idled before destroying semaphores as they
  // are destroyed immediately
  m_ImageAcquiredSemaphores.clear();
  