/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Code/Engine/RendererVulkan/Cache/ResourceCacheVulkan.h
57 строк
2 KB
Sanakan8472
Copy / Readback fixes (#1963)
11 июн 2026, 18:07
Не верифицирован
11 июн 2026, 18:07
b50d6f1
Код
Авторство
О чём код?
#pragma once #include <RendererVulkan/RendererVulkanDLL.h> #include <Foundation/Algorithm/HashStream.h> #include <RendererFoundation/Resources/RenderTargetSetup.h> #include <RendererVulkan/Device/DeviceVulkan.h> #include <RendererVulkan/Shader/ShaderVulkan.h> class ezGALRasterizerStateVulkan; class ezGALBlendStateVulkan; class ezGALDepthStencilStateVulkan; class ezGALShaderVulkan; class ezGALVertexDeclarationVulkan; class ezRefCounted; EZ_DEFINE_AS_POD_TYPE(vk::DynamicState); /// \brief Creates and caches persistent Vulkan resources. Resources are never freed until the device is shut down. class EZ_RENDERERVULKAN_DLL ezResourceCacheVulkan { public: static void Initialize(ezGALDeviceVulkan* pDevice, vk::Device device); static void DeInitialize(); static vk::PipelineCache GetPipelineCache() { return s_PipelineCache; } static vk::RenderPass RequestRenderPass(const ezGALRenderPassDescriptor& renderPass); static vk::Framebuffer RequestFrameBuffer(vk::RenderPass vkRenderPass, const ezGALFrameBufferDescriptor& frameBuffer); private: struct FramebufferKey { vk::RenderPass m_renderPass; ezGALFrameBufferDescriptor m_frameBuffer; }; struct ResourceCacheHash { static ezUInt32 Hash(const ezGALRenderPassDescriptor& renderingSetup); static bool Equal(const ezGALRenderPassDescriptor& a, const ezGALRenderPassDescriptor& b); static ezUInt32 Hash(const FramebufferKey& renderTargetSetup); static bool Equal(const FramebufferKey& a, const FramebufferKey& b); }; private: static ezResult SavePipelineCache(); static ezResult LoadPipelineCache(vk::PipelineCache& out_pipelineCache); private: static ezGALDeviceVulkan* s_pDevice; static vk::Device s_Device; static vk::PipelineCache s_PipelineCache; // We have a N to 1 mapping for ezGALRenderingSetup to vk::RenderPass as multiple ezGALRenderingSetup can share the same RenderPassDesc. static ezHashTable<ezGALRenderPassDescriptor, vk::RenderPass, ResourceCacheHash> s_RenderPasses; static ezHashTable<FramebufferKey, vk::Framebuffer, ResourceCacheHash> s_FrameBuffers; // #TODO_VULKAN cache invalidation };