summaryrefslogtreecommitdiffstats
path: root/drivers/vulkan/rendering_device_vulkan.h
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-06-01 00:40:33 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-06-01 00:40:33 +0200
commit3dd0307f3fd8efd45057b62dfa14b45e6db0ce49 (patch)
tree0e9cc470880939297d845b3c59933eefbfc7ad35 /drivers/vulkan/rendering_device_vulkan.h
parentbb58eb6a9463ca7c07e5d4e36f32fe9641bb21d2 (diff)
parentdded713dc0b808561da8754c384af826a749539e (diff)
downloadredot-engine-3dd0307f3fd8efd45057b62dfa14b45e6db0ce49.tar.gz
Merge pull request #76348 from warriormaster12/pipeline-cache
Implement Vulkan pipeline caching
Diffstat (limited to 'drivers/vulkan/rendering_device_vulkan.h')
-rw-r--r--drivers/vulkan/rendering_device_vulkan.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/vulkan/rendering_device_vulkan.h b/drivers/vulkan/rendering_device_vulkan.h
index 4150e0a8e6..6e61ee890d 100644
--- a/drivers/vulkan/rendering_device_vulkan.h
+++ b/drivers/vulkan/rendering_device_vulkan.h
@@ -31,6 +31,7 @@
#ifndef RENDERING_DEVICE_VULKAN_H
#define RENDERING_DEVICE_VULKAN_H
+#include "core/object/worker_thread_pool.h"
#include "core/os/thread_safe.h"
#include "core/templates/local_vector.h"
#include "core/templates/oa_hash_map.h"
@@ -792,6 +793,31 @@ class RenderingDeviceVulkan : public RenderingDevice {
RID_Owner<RenderPipeline, true> render_pipeline_owner;
+ struct PipelineCacheHeader {
+ uint32_t magic;
+ uint32_t data_size;
+ uint64_t data_hash;
+ uint32_t vendor_id;
+ uint32_t device_id;
+ uint32_t driver_version;
+ uint8_t uuid[VK_UUID_SIZE];
+ uint8_t driver_abi;
+ };
+
+ struct PipelineCache {
+ size_t current_size = 0;
+ Vector<uint8_t> buffer;
+ VkPipelineCache cache_object = VK_NULL_HANDLE;
+ };
+
+ PipelineCache pipelines_cache;
+
+ WorkerThreadPool::TaskID pipelines_cache_save_task = WorkerThreadPool::INVALID_TASK_ID;
+
+ void _load_pipeline_cache();
+ void _update_pipeline_cache(bool p_closing = false);
+ void _save_pipeline_cache_threaded(size_t pso_blob_size);
+
struct ComputePipeline {
RID shader;
Vector<uint32_t> set_formats;