skip rendering the next frame under vulkan, as this fixes the crash on scene load when the scene graph storage buffers need to be resized (even though nothing makes sense)
This commit is contained in:
parent
81a3125fcd
commit
e5de1491f2
@ -103,7 +103,8 @@
|
|||||||
"batch queue submissions": true,
|
"batch queue submissions": true,
|
||||||
"dedicated thread": false,
|
"dedicated thread": false,
|
||||||
"memory budget": false,
|
"memory budget": false,
|
||||||
"register render modes": true
|
"register render modes": true,
|
||||||
|
"skip render on rebuild": true
|
||||||
},
|
},
|
||||||
"invariant": {
|
"invariant": {
|
||||||
"default stage buffers": true,
|
"default stage buffers": true,
|
||||||
@ -114,7 +115,7 @@
|
|||||||
"pipelines": {
|
"pipelines": {
|
||||||
"deferred": true,
|
"deferred": true,
|
||||||
"gui": true,
|
"gui": true,
|
||||||
"vsync": false,
|
"vsync": false, // vsync on vulkan side rather than engine-side
|
||||||
"hdr": true,
|
"hdr": true,
|
||||||
"vxgi": true,
|
"vxgi": true,
|
||||||
"culling": true,
|
"culling": true,
|
||||||
|
@ -78,7 +78,7 @@
|
|||||||
"stream": {
|
"stream": {
|
||||||
"tag": "worldspawn",
|
"tag": "worldspawn",
|
||||||
"player": "info_player_spawn",
|
"player": "info_player_spawn",
|
||||||
"enabled": true, // "auto",
|
"enabled": "auto",
|
||||||
"radius": 16,
|
"radius": 16,
|
||||||
"every": 1
|
"every": 1
|
||||||
}
|
}
|
||||||
|
@ -1 +1 @@
|
|||||||
opengl
|
vulkan
|
@ -35,6 +35,7 @@ namespace ext {
|
|||||||
extern UF_API bool rebuildOnTickBegin;
|
extern UF_API bool rebuildOnTickBegin;
|
||||||
extern UF_API bool batchQueueSubmissions;
|
extern UF_API bool batchQueueSubmissions;
|
||||||
extern UF_API bool registerRenderMode;
|
extern UF_API bool registerRenderMode;
|
||||||
|
extern UF_API bool skipRenderOnRebuild;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace validation {
|
namespace validation {
|
||||||
|
@ -120,6 +120,7 @@ namespace ext {
|
|||||||
extern UF_API bool enableMultiGPU;
|
extern UF_API bool enableMultiGPU;
|
||||||
extern UF_API bool memoryBudgetBit;
|
extern UF_API bool memoryBudgetBit;
|
||||||
extern UF_API bool registerRenderMode;
|
extern UF_API bool registerRenderMode;
|
||||||
|
extern UF_API bool skipRenderOnRebuild;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace validation {
|
namespace validation {
|
||||||
|
@ -501,6 +501,7 @@ void UF_API uf::initialize() {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
uf::renderer::settings::experimental::rebuildOnTickBegin = configRenderExperimentalJson["rebuild on tick begin"].as( uf::renderer::settings::experimental::rebuildOnTickBegin );
|
uf::renderer::settings::experimental::rebuildOnTickBegin = configRenderExperimentalJson["rebuild on tick begin"].as( uf::renderer::settings::experimental::rebuildOnTickBegin );
|
||||||
|
uf::renderer::settings::experimental::skipRenderOnRebuild = configRenderExperimentalJson["skip render on rebuild"].as( uf::renderer::settings::experimental::skipRenderOnRebuild );
|
||||||
|
|
||||||
uf::renderer::settings::invariant::deferredMode = configRenderInvariantJson["deferred mode"].as( uf::renderer::settings::invariant::deferredMode );
|
uf::renderer::settings::invariant::deferredMode = configRenderInvariantJson["deferred mode"].as( uf::renderer::settings::invariant::deferredMode );
|
||||||
|
|
||||||
|
@ -17,18 +17,17 @@
|
|||||||
#define UF_DEBUG_TIMER_MULTITRACE_START(...) UF_TIMER_MULTITRACE_START(__VA_ARGS__)
|
#define UF_DEBUG_TIMER_MULTITRACE_START(...) UF_TIMER_MULTITRACE_START(__VA_ARGS__)
|
||||||
#define UF_DEBUG_TIMER_MULTITRACE(...) UF_TIMER_MULTITRACE(__VA_ARGS__)
|
#define UF_DEBUG_TIMER_MULTITRACE(...) UF_TIMER_MULTITRACE(__VA_ARGS__)
|
||||||
#define UF_DEBUG_TIMER_MULTITRACE_END(...) UF_TIMER_MULTITRACE_END(__VA_ARGS__)
|
#define UF_DEBUG_TIMER_MULTITRACE_END(...) UF_TIMER_MULTITRACE_END(__VA_ARGS__)
|
||||||
#define UF_GRAPH_SPARSE_READ_MESH 1
|
|
||||||
#else
|
#else
|
||||||
#define UF_DEBUG_TIMER_MULTITRACE_START(...)
|
#define UF_DEBUG_TIMER_MULTITRACE_START(...)
|
||||||
#define UF_DEBUG_TIMER_MULTITRACE(...)
|
#define UF_DEBUG_TIMER_MULTITRACE(...)
|
||||||
#define UF_DEBUG_TIMER_MULTITRACE_END(...)
|
#define UF_DEBUG_TIMER_MULTITRACE_END(...)
|
||||||
#if UF_USE_OPENGL
|
|
||||||
#define UF_GRAPH_SPARSE_READ_MESH 1
|
|
||||||
#else
|
|
||||||
#define UF_GRAPH_SPARSE_READ_MESH 1
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if UF_USE_OPENGL
|
||||||
|
#define UF_GRAPH_SPARSE_READ_MESH 1
|
||||||
|
#else
|
||||||
|
#define UF_GRAPH_SPARSE_READ_MESH 1
|
||||||
|
#endif
|
||||||
#define UF_GRAPH_EXTENDED 1
|
#define UF_GRAPH_EXTENDED 1
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@ -1045,6 +1044,7 @@ void uf::graph::process( pod::Graph& graph ) {
|
|||||||
isSrgb[texName] = true;
|
isSrgb[texName] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UF_DEBUG_TIMER_MULTITRACE("Processing images...");
|
||||||
for ( auto& key : graph.images ) {
|
for ( auto& key : graph.images ) {
|
||||||
auto& image = storage.images[key];
|
auto& image = storage.images[key];
|
||||||
auto& texture = storage.texture2Ds[key];
|
auto& texture = storage.texture2Ds[key];
|
||||||
@ -1071,6 +1071,8 @@ void uf::graph::process( pod::Graph& graph ) {
|
|||||||
texture.sampler.descriptor.filter.mag = filter;
|
texture.sampler.descriptor.filter.mag = filter;
|
||||||
texture.srgb = isSrgb[key];
|
texture.srgb = isSrgb[key];
|
||||||
|
|
||||||
|
// to-do: figure out why I need to skip rendering the next frame to avoid a crash here if the storage buffers need to be resized on the GPU side
|
||||||
|
// i suppose timing is consistent enough to where this is loaded asynchronously and rendering throws a device lost error
|
||||||
texture.loadFromImage( image );
|
texture.loadFromImage( image );
|
||||||
#if UF_ENV_DREAMCAST
|
#if UF_ENV_DREAMCAST
|
||||||
image.clear();
|
image.clear();
|
||||||
|
@ -51,6 +51,7 @@ bool ext::opengl::settings::experimental::dedicatedThread = true;
|
|||||||
bool ext::opengl::settings::experimental::rebuildOnTickBegin = false;
|
bool ext::opengl::settings::experimental::rebuildOnTickBegin = false;
|
||||||
bool ext::opengl::settings::experimental::batchQueueSubmissions = false;
|
bool ext::opengl::settings::experimental::batchQueueSubmissions = false;
|
||||||
bool ext::opengl::settings::experimental::registerRenderMode = true;
|
bool ext::opengl::settings::experimental::registerRenderMode = true;
|
||||||
|
bool ext::opengl::settings::experimental::skipRenderOnRebuild = false;
|
||||||
|
|
||||||
// not so experimental
|
// not so experimental
|
||||||
bool ext::opengl::settings::invariant::waitOnRenderEnd = false;
|
bool ext::opengl::settings::invariant::waitOnRenderEnd = false;
|
||||||
|
@ -67,6 +67,7 @@ bool ext::vulkan::settings::experimental::rebuildOnTickBegin = false;
|
|||||||
bool ext::vulkan::settings::experimental::enableMultiGPU = false;
|
bool ext::vulkan::settings::experimental::enableMultiGPU = false;
|
||||||
bool ext::vulkan::settings::experimental::memoryBudgetBit = true;
|
bool ext::vulkan::settings::experimental::memoryBudgetBit = true;
|
||||||
bool ext::vulkan::settings::experimental::registerRenderMode = true;
|
bool ext::vulkan::settings::experimental::registerRenderMode = true;
|
||||||
|
bool ext::vulkan::settings::experimental::skipRenderOnRebuild = false;
|
||||||
|
|
||||||
// not so experimental
|
// not so experimental
|
||||||
bool ext::vulkan::settings::invariant::waitOnRenderEnd = false;
|
bool ext::vulkan::settings::invariant::waitOnRenderEnd = false;
|
||||||
@ -539,6 +540,8 @@ void ext::vulkan::tick() {
|
|||||||
}
|
}
|
||||||
ext::vulkan::gc::textures.clear();
|
ext::vulkan::gc::textures.clear();
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
if ( ext::vulkan::states::rebuild && ext::vulkan::settings::experimental::skipRenderOnRebuild ) ::skip = true;
|
||||||
|
|
||||||
ext::vulkan::states::rebuild = false;
|
ext::vulkan::states::rebuild = false;
|
||||||
ext::vulkan::states::resized = false;
|
ext::vulkan::states::resized = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user