summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-03-05 14:11:32 +0100
committerRémi Verschelde <rverschelde@gmail.com>2024-03-05 16:39:14 +0100
commite74f4ea115333d81cb6d753b3a721a057d3f5eda (patch)
tree9b75a217b2254ce932f435136c00cfced6f78b6f
parentf9ebd84b5ace8d0e6a9c43c3403ecd9a4bcb132e (diff)
downloadredot-engine-e74f4ea115333d81cb6d753b3a721a057d3f5eda.tar.gz
Vulkan: Don't warn about pipelines cache if missing
It used to warn when opening a new project because no cache pre-exists, which isn't particularly helpful. Also include the rendering method in the cache filename, as it differs between Forward+ and Mobile for a same GPU.
-rw-r--r--drivers/vulkan/rendering_device_driver_vulkan.cpp4
-rw-r--r--servers/rendering/rendering_device.cpp6
2 files changed, 6 insertions, 4 deletions
diff --git a/drivers/vulkan/rendering_device_driver_vulkan.cpp b/drivers/vulkan/rendering_device_driver_vulkan.cpp
index 21cf54b4be..d8404ac8e4 100644
--- a/drivers/vulkan/rendering_device_driver_vulkan.cpp
+++ b/drivers/vulkan/rendering_device_driver_vulkan.cpp
@@ -3828,7 +3828,9 @@ bool RenderingDeviceDriverVulkan::pipeline_cache_create(const Vector<uint8_t> &p
// Parse.
{
- if (p_data.size() <= (int)sizeof(PipelineCacheHeader)) {
+ if (p_data.is_empty()) {
+ // No pre-existing cache, just create it.
+ } else if (p_data.size() <= (int)sizeof(PipelineCacheHeader)) {
WARN_PRINT("Invalid/corrupt pipelines cache.");
} else {
const PipelineCacheHeader *loaded_header = reinterpret_cast<const PipelineCacheHeader *>(p_data.ptr());
diff --git a/servers/rendering/rendering_device.cpp b/servers/rendering/rendering_device.cpp
index e1709fdb00..dc48ddbd56 100644
--- a/servers/rendering/rendering_device.cpp
+++ b/servers/rendering/rendering_device.cpp
@@ -5091,12 +5091,12 @@ Error RenderingDevice::initialize(RenderingContextDriver *p_context, DisplayServ
if (main_instance) {
// Only the instance that is not a local device and is also the singleton is allowed to manage a pipeline cache.
- pipeline_cache_file_path = "user://vulkan/pipelines";
- pipeline_cache_file_path += "." + device.name.validate_filename().replace(" ", "_").to_lower();
+ pipeline_cache_file_path = vformat("user://vulkan/pipelines.%s.%s",
+ OS::get_singleton()->get_current_rendering_method(),
+ device.name.validate_filename().replace(" ", "_").to_lower());
if (Engine::get_singleton()->is_editor_hint()) {
pipeline_cache_file_path += ".editor";
}
-
pipeline_cache_file_path += ".cache";
Vector<uint8_t> cache_data = _load_pipeline_cache();