Add vulkan pipeline cache
This commit is contained in:
parent
e99bf2b036
commit
7b864fd665
5 changed files with 172 additions and 2 deletions
|
|
@ -305,6 +305,24 @@ private:
|
|||
VulkanPipelineLayout &operator=(const VulkanPipelineLayout &) = delete;
|
||||
};
|
||||
|
||||
class VulkanPipelineCache
|
||||
{
|
||||
public:
|
||||
VulkanPipelineCache(VulkanDevice* device, VkPipelineCache cache);
|
||||
~VulkanPipelineCache();
|
||||
|
||||
void SetDebugName(const char* name) { device->SetObjectName(name, (uint64_t)cache, VK_OBJECT_TYPE_PIPELINE_CACHE); }
|
||||
|
||||
std::vector<uint8_t> GetCacheData();
|
||||
|
||||
VulkanDevice* device;
|
||||
VkPipelineCache cache;
|
||||
|
||||
private:
|
||||
VulkanPipelineCache(const VulkanPipelineCache&) = delete;
|
||||
VulkanPipelineCache& operator=(const VulkanPipelineCache&) = delete;
|
||||
};
|
||||
|
||||
class VulkanRenderPass
|
||||
{
|
||||
public:
|
||||
|
|
@ -1179,6 +1197,33 @@ inline VulkanPipelineLayout::~VulkanPipelineLayout()
|
|||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
inline VulkanPipelineCache::VulkanPipelineCache(VulkanDevice* device, VkPipelineCache cache) : device(device), cache(cache)
|
||||
{
|
||||
}
|
||||
|
||||
inline VulkanPipelineCache::~VulkanPipelineCache()
|
||||
{
|
||||
vkDestroyPipelineCache(device->device, cache, nullptr);
|
||||
}
|
||||
|
||||
inline std::vector<uint8_t> VulkanPipelineCache::GetCacheData()
|
||||
{
|
||||
size_t dataSize = 0;
|
||||
VkResult result = vkGetPipelineCacheData(device->device, cache, &dataSize, nullptr);
|
||||
CheckVulkanError(result, "Could not get cache data size");
|
||||
|
||||
std::vector<uint8_t> buffer;
|
||||
buffer.resize(dataSize);
|
||||
result = vkGetPipelineCacheData(device->device, cache, &dataSize, buffer.data());
|
||||
if (result == VK_INCOMPLETE)
|
||||
VulkanError("Could not get cache data (incomplete)");
|
||||
CheckVulkanError(result, "Could not get cache data");
|
||||
buffer.resize(dataSize);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
inline VulkanRenderPass::VulkanRenderPass(VulkanDevice *device, VkRenderPass renderPass) : device(device), renderPass(renderPass)
|
||||
{
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue