mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2025-02-17 01:21:12 +00:00
Merge pull request #680 from rg3/vk_restart_tweaks
Vulkan restart tweaks
This commit is contained in:
commit
557668c35e
6 changed files with 44 additions and 19 deletions
|
@ -145,6 +145,7 @@ extern cvar_t *vk_pixel_size;
|
|||
extern cvar_t *r_fixsurfsky;
|
||||
|
||||
extern cvar_t *vid_fullscreen;
|
||||
extern cvar_t *vid_renderer;
|
||||
extern cvar_t *vid_gamma;
|
||||
|
||||
extern int c_visible_lightmaps;
|
||||
|
|
|
@ -248,3 +248,4 @@ int Hunk_End (void);
|
|||
void Hunk_Free (void *base);
|
||||
|
||||
void Mod_FreeAll (void);
|
||||
void Mod_FreeModelsKnown (void);
|
||||
|
|
|
@ -1634,6 +1634,7 @@ void QVk_WaitAndShutdownAll (void)
|
|||
}
|
||||
|
||||
Mod_FreeAll();
|
||||
Mod_FreeModelsKnown();
|
||||
Vk_ShutdownImages();
|
||||
QVk_Shutdown();
|
||||
}
|
||||
|
@ -1644,6 +1645,7 @@ void QVk_Restart(void)
|
|||
if (!QVk_Init())
|
||||
ri.Sys_Error(ERR_FATAL, "Unable to restart Vulkan renderer");
|
||||
QVk_PostInit();
|
||||
vid_renderer->modified = true;
|
||||
}
|
||||
|
||||
void QVk_PostInit(void)
|
||||
|
@ -2077,7 +2079,8 @@ VkResult QVk_EndFrame(qboolean force)
|
|||
{
|
||||
// continue only if QVk_BeginFrame() had been previously issued
|
||||
if (!vk_frameStarted)
|
||||
return VK_NOT_READY;
|
||||
return VK_SUCCESS;
|
||||
|
||||
// this may happen if Sys_Error is issued mid-frame, so we need to properly advance the draw pipeline
|
||||
if (force)
|
||||
{
|
||||
|
|
|
@ -101,7 +101,7 @@ void Mod_Reallocate (void)
|
|||
models_known_max *= 2;
|
||||
// free up
|
||||
Mod_FreeAll();
|
||||
free(models_known);
|
||||
Mod_FreeModelsKnown();
|
||||
}
|
||||
|
||||
if (models_known_max < (mod_max * 4))
|
||||
|
@ -177,6 +177,17 @@ void Mod_FreeAll (void)
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
================
|
||||
Mod_FreeModelsKnown
|
||||
================
|
||||
*/
|
||||
void Mod_FreeModelsKnown (void)
|
||||
{
|
||||
free(models_known);
|
||||
models_known = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
===============================================================================
|
||||
|
||||
|
|
|
@ -130,6 +130,7 @@ cvar_t *vk_nolerp_list;
|
|||
cvar_t *r_fixsurfsky;
|
||||
|
||||
cvar_t *vid_fullscreen;
|
||||
cvar_t *vid_renderer;
|
||||
cvar_t *vid_gamma;
|
||||
static cvar_t *viewsize;
|
||||
|
||||
|
@ -1194,6 +1195,7 @@ R_Register( void )
|
|||
ri.Cvar_Set("r_msaa_samples", "0");
|
||||
|
||||
vid_fullscreen = ri.Cvar_Get("vid_fullscreen", "0", CVAR_ARCHIVE);
|
||||
vid_renderer = ri.Cvar_Get("vid_renderer", "gl1", CVAR_ARCHIVE);
|
||||
vid_gamma = ri.Cvar_Get("vid_gamma", "1.0", CVAR_ARCHIVE);
|
||||
viewsize = ri.Cvar_Get("viewsize", "100", CVAR_ARCHIVE);
|
||||
|
||||
|
@ -1376,7 +1378,8 @@ RE_BeginFrame( float camera_separation )
|
|||
world_rendered = false;
|
||||
|
||||
// if ri.Sys_Error() had been issued mid-frame, we might end up here without properly submitting the image, so call QVk_EndFrame to be safe
|
||||
QVk_EndFrame(true);
|
||||
if (QVk_EndFrame(true) != VK_SUCCESS)
|
||||
vk_restartNeeded = true;
|
||||
|
||||
/*
|
||||
** change modes if necessary
|
||||
|
@ -1407,21 +1410,10 @@ RE_BeginFrame( float camera_separation )
|
|||
}
|
||||
}
|
||||
|
||||
if (vk_restartNeeded)
|
||||
{
|
||||
QVk_Restart();
|
||||
vk_restartNeeded = false;
|
||||
}
|
||||
|
||||
for (;;)
|
||||
{
|
||||
VkResult swapChainValid = QVk_BeginFrame(&vk_viewport, &vk_scissor);
|
||||
if (swapChainValid == VK_SUCCESS)
|
||||
break;
|
||||
QVk_Restart();
|
||||
}
|
||||
|
||||
QVk_BeginRenderpass(RP_WORLD);
|
||||
if (QVk_BeginFrame(&vk_viewport, &vk_scissor) != VK_SUCCESS)
|
||||
vk_restartNeeded = true;
|
||||
else
|
||||
QVk_BeginRenderpass(RP_WORLD);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1432,9 +1424,17 @@ RE_EndFrame
|
|||
static void
|
||||
RE_EndFrame( void )
|
||||
{
|
||||
QVk_EndFrame(false);
|
||||
if (QVk_EndFrame(false) != VK_SUCCESS)
|
||||
vk_restartNeeded = true;
|
||||
|
||||
// world has not rendered yet
|
||||
world_rendered = false;
|
||||
|
||||
if (vk_restartNeeded)
|
||||
{
|
||||
QVk_Restart();
|
||||
vk_restartNeeded = false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -486,9 +486,18 @@ VID_CheckChanges(void)
|
|||
}
|
||||
}
|
||||
|
||||
// Ignore possible changes in vid_renderer above.
|
||||
vid_renderer->modified = false;
|
||||
|
||||
// Unblock the client.
|
||||
cls.disable_screen = false;
|
||||
}
|
||||
|
||||
if (vid_renderer->modified)
|
||||
{
|
||||
vid_renderer->modified = false;
|
||||
cl.refresh_prepped = false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue