













































































































dbg_gfx 4 you get like 4 MiB of validation warnings, mostly about us not freeing everything I guess


dbg_gfx 4 you get like 4 MiB of validation warnings, mostly about us not freeing everything I guess 































shell_execute always starts the process like that. It's a bug anyway that the client is not in the foreground after restarting, but weird that Vulkan can't create a swap chain if the window is started minimized

shell_execute to either start the process in the foreground or background on Windows. Previously, all processes were started in the background, because this is desired when starting the server from the client. However, this causes the graphics initialization to fail when restarting the client after updating or with the restart command when using Vulkan with windowed and windowed fullscreen mode.
Closes #6578.


shell_execute always starts the process like that. It's a bug anyway that the client is not in the foreground after restarting, but weird that Vulkan can't create a swap chain if the window is started minimized 

shell_execute always starts the process like that. It's a bug anyway that the client is not in the foreground after restarting, but weird that Vulkan can't create a swap chain if the window is started minimized 








GetSwapImageSize
can u try to add
if (RetSize.width == 0 || RetSize.height == 0) {
RetSize.width = 800;
RetSize.height = 800;
}
i wonder what will happenVkExtent2D AutoViewportExtent = RetSize;

GetSwapImageSize
can u try to add
if (RetSize.width == 0 || RetSize.height == 0) {
RetSize.width = 800;
RetSize.height = 800;
}
i wonder what will happen 

VKCapabilities 0?

RecreateSwapChain after vkDeviceWaitIdle(m_VKDevice);
VkSurfaceCapabilitiesKHR VKSurfCap;
if(!GetSurfaceProperties(VKSurfCap))
return -1;
auto Caps = GetSwapImageSize(VKSurfCap);
if (Caps.m_SwapImageViewport.width == 0 || Caps.m_SwapImageViewport.height == 0) {
m_RenderingPaused = true;
}
and in PrepareFrame()
replace RecreateSwapChain() with
if (RecreateSwapChain() != 0) {
return PureMemoryFrame();
}
i am not sure about the last one, but maybe worth a try.
It will probably only work if SDL at some point sends a SDL_WINDOWEVENT_RESTORED eventm_RecreateSwapChain = true; in Cmd_WindowCreateNtf needs to be moved out of the android-macro
else it probably has no idea that the surface is now ready



SDL_WINDOWEVENT event=7 d1=0 d2=0
SDL_WINDOWEVENT event=1 d1=0 d2=0
SDL_WINDOWEVENT event=10 d1=0 d2=0
SDL_WINDOWEVENT event=12 d1=0 d2=0
SDL_WINDOWEVENT event=3 d1=0 d2=0
SDL_WINDOWEVENT event=14 d1=0 d2=0



RecreateSwapChain after vkDeviceWaitIdle(m_VKDevice);
VkSurfaceCapabilitiesKHR VKSurfCap;
if(!GetSurfaceProperties(VKSurfCap))
return -1;
auto Caps = GetSwapImageSize(VKSurfCap);
if (Caps.m_SwapImageViewport.width == 0 || Caps.m_SwapImageViewport.height == 0) {
m_RenderingPaused = true;
}
and in PrepareFrame()
replace RecreateSwapChain() with
if (RecreateSwapChain() != 0) {
return PureMemoryFrame();
}
i am not sure about the last one, but maybe worth a try.
It will probably only work if SDL at some point sends a SDL_WINDOWEVENT_RESTORED event return -1;
if(m_VKSwapImgAndViewportExtent.m_SwapImageViewport.width == 0 || m_VKSwapImgAndViewportExtent.m_SwapImageViewport.height == 0)
return false;
after m_VKSwapImgAndViewportExtent = GetSwapImageSize(VKSurfCap);
and this seems to work



















(edited)







