diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-06-01 00:40:33 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-06-01 00:40:33 +0200 |
commit | 3dd0307f3fd8efd45057b62dfa14b45e6db0ce49 (patch) | |
tree | 0e9cc470880939297d845b3c59933eefbfc7ad35 /drivers/vulkan/rendering_device_vulkan.h | |
parent | bb58eb6a9463ca7c07e5d4e36f32fe9641bb21d2 (diff) | |
parent | dded713dc0b808561da8754c384af826a749539e (diff) | |
download | redot-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.h | 26 |
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; |