bort_vk/
pipeline_cache.rs

1use crate::{Device, DeviceOwned, ALLOCATION_CALLBACK_NONE};
2use ash::{
3    prelude::VkResult,
4    vk::{self, Handle},
5};
6use std::sync::Arc;
7
8pub struct PipelineCache {
9    handle: vk::PipelineCache,
10
11    // dependencies
12    device: Arc<Device>,
13}
14
15impl PipelineCache {
16    pub fn new(
17        device: Arc<Device>,
18        create_info: vk::PipelineCacheCreateInfoBuilder,
19    ) -> VkResult<Self> {
20        let handle = unsafe {
21            device
22                .inner()
23                .create_pipeline_cache(&create_info, ALLOCATION_CALLBACK_NONE)
24        }?;
25
26        Ok(Self { handle, device })
27    }
28
29    // Getters
30
31    pub fn handle(&self) -> vk::PipelineCache {
32        self.handle
33    }
34}
35
36impl DeviceOwned for PipelineCache {
37    #[inline]
38    fn device(&self) -> &Arc<Device> {
39        &self.device
40    }
41
42    #[inline]
43    fn handle_raw(&self) -> u64 {
44        self.handle.as_raw()
45    }
46}
47
48impl Drop for PipelineCache {
49    fn drop(&mut self) {
50        unsafe {
51            self.device
52                .inner()
53                .destroy_pipeline_cache(self.handle, ALLOCATION_CALLBACK_NONE)
54        }
55    }
56}