bort_vk/
pipeline_cache.rs1use 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 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 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}