diff --git a/bin/data/config.json b/bin/data/config.json index e0f66145..d93534d5 100644 --- a/bin/data/config.json +++ b/bin/data/config.json @@ -103,7 +103,8 @@ "batch queue submissions": true, "dedicated thread": false, "memory budget": false, - "register render modes": true + "register render modes": true, + "skip render on rebuild": true }, "invariant": { "default stage buffers": true, @@ -114,7 +115,7 @@ "pipelines": { "deferred": true, "gui": true, - "vsync": false, + "vsync": false, // vsync on vulkan side rather than engine-side "hdr": true, "vxgi": true, "culling": true, diff --git a/bin/data/entities/model.json b/bin/data/entities/model.json index 1fa9da21..2e52b1aa 100644 --- a/bin/data/entities/model.json +++ b/bin/data/entities/model.json @@ -78,7 +78,7 @@ "stream": { "tag": "worldspawn", "player": "info_player_spawn", - "enabled": true, // "auto", + "enabled": "auto", "radius": 16, "every": 1 } diff --git a/bin/exe/default/renderer b/bin/exe/default/renderer index 91caa7c1..53395cff 100644 --- a/bin/exe/default/renderer +++ b/bin/exe/default/renderer @@ -1 +1 @@ -opengl \ No newline at end of file +vulkan \ No newline at end of file diff --git a/engine/inc/uf/ext/opengl/opengl.h b/engine/inc/uf/ext/opengl/opengl.h index c3ed111e..85f3d806 100644 --- a/engine/inc/uf/ext/opengl/opengl.h +++ b/engine/inc/uf/ext/opengl/opengl.h @@ -35,6 +35,7 @@ namespace ext { extern UF_API bool rebuildOnTickBegin; extern UF_API bool batchQueueSubmissions; extern UF_API bool registerRenderMode; + extern UF_API bool skipRenderOnRebuild; } namespace validation { diff --git a/engine/inc/uf/ext/vulkan/vulkan.h b/engine/inc/uf/ext/vulkan/vulkan.h index 305d86b5..1d28fec6 100644 --- a/engine/inc/uf/ext/vulkan/vulkan.h +++ b/engine/inc/uf/ext/vulkan/vulkan.h @@ -120,6 +120,7 @@ namespace ext { extern UF_API bool enableMultiGPU; extern UF_API bool memoryBudgetBit; extern UF_API bool registerRenderMode; + extern UF_API bool skipRenderOnRebuild; } namespace validation { diff --git a/engine/src/engine/ext/ext.cpp b/engine/src/engine/ext/ext.cpp index c70276cd..9453026e 100644 --- a/engine/src/engine/ext/ext.cpp +++ b/engine/src/engine/ext/ext.cpp @@ -501,6 +501,7 @@ void UF_API uf::initialize() { #endif 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 ); diff --git a/engine/src/engine/graph/graph.cpp b/engine/src/engine/graph/graph.cpp index 1134ec99..ba6f012e 100644 --- a/engine/src/engine/graph/graph.cpp +++ b/engine/src/engine/graph/graph.cpp @@ -17,18 +17,17 @@ #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_END(...) UF_TIMER_MULTITRACE_END(__VA_ARGS__) - #define UF_GRAPH_SPARSE_READ_MESH 1 #else #define UF_DEBUG_TIMER_MULTITRACE_START(...) #define UF_DEBUG_TIMER_MULTITRACE(...) #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 +#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 namespace { @@ -1045,6 +1044,7 @@ void uf::graph::process( pod::Graph& graph ) { isSrgb[texName] = true; } + UF_DEBUG_TIMER_MULTITRACE("Processing images..."); for ( auto& key : graph.images ) { auto& image = storage.images[key]; auto& texture = storage.texture2Ds[key]; @@ -1071,6 +1071,8 @@ void uf::graph::process( pod::Graph& graph ) { texture.sampler.descriptor.filter.mag = filter; 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 ); #if UF_ENV_DREAMCAST image.clear(); diff --git a/engine/src/ext/opengl/opengl.cpp b/engine/src/ext/opengl/opengl.cpp index 4cb9daee..cfbe4d87 100644 --- a/engine/src/ext/opengl/opengl.cpp +++ b/engine/src/ext/opengl/opengl.cpp @@ -51,6 +51,7 @@ bool ext::opengl::settings::experimental::dedicatedThread = true; bool ext::opengl::settings::experimental::rebuildOnTickBegin = false; bool ext::opengl::settings::experimental::batchQueueSubmissions = false; bool ext::opengl::settings::experimental::registerRenderMode = true; +bool ext::opengl::settings::experimental::skipRenderOnRebuild = false; // not so experimental bool ext::opengl::settings::invariant::waitOnRenderEnd = false; diff --git a/engine/src/ext/vulkan/vulkan.cpp b/engine/src/ext/vulkan/vulkan.cpp index 72311851..d8d9c5e0 100644 --- a/engine/src/ext/vulkan/vulkan.cpp +++ b/engine/src/ext/vulkan/vulkan.cpp @@ -67,6 +67,7 @@ bool ext::vulkan::settings::experimental::rebuildOnTickBegin = false; bool ext::vulkan::settings::experimental::enableMultiGPU = false; bool ext::vulkan::settings::experimental::memoryBudgetBit = true; bool ext::vulkan::settings::experimental::registerRenderMode = true; +bool ext::vulkan::settings::experimental::skipRenderOnRebuild = false; // not so experimental bool ext::vulkan::settings::invariant::waitOnRenderEnd = false; @@ -539,6 +540,8 @@ void ext::vulkan::tick() { } 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::resized = false;