Skip to main content

rotex_vulkan/backend/vulkan/graphics_pipeline/
layout.rs

1use ash::vk;
2
3use super::super::device::Device;
4use crate::error::vk_error;
5use crate::Error;
6
7pub struct DescriptorSetLayout {
8    handle: vk::DescriptorSetLayout,
9}
10
11impl DescriptorSetLayout {
12    pub fn new(
13        device: &Device,
14        bindings: &[vk::DescriptorSetLayoutBinding],
15    ) -> Result<Self, Error> {
16        let create_info = vk::DescriptorSetLayoutCreateInfo::default().bindings(bindings);
17
18        let handle = unsafe {
19            device
20                .logical_device()
21                .create_descriptor_set_layout(&create_info, None)
22        }
23        .map_err(vk_error)?;
24
25        Ok(Self { handle })
26    }
27
28    pub fn handle(&self) -> vk::DescriptorSetLayout {
29        self.handle
30    }
31
32    pub fn destroy(&self, device: &Device) {
33        unsafe {
34            device
35                .logical_device()
36                .destroy_descriptor_set_layout(self.handle, None);
37        }
38    }
39}
40
41pub struct GraphicsPipelineLayout {
42    handle: vk::PipelineLayout,
43}
44
45impl GraphicsPipelineLayout {
46    pub fn new(
47        device: &Device,
48        set_layouts: &[vk::DescriptorSetLayout],
49        push_constant_ranges: &[vk::PushConstantRange],
50    ) -> Result<Self, Error> {
51        let create_info = vk::PipelineLayoutCreateInfo::default()
52            .set_layouts(set_layouts)
53            .push_constant_ranges(push_constant_ranges);
54
55        let handle = unsafe {
56            device
57                .logical_device()
58                .create_pipeline_layout(&create_info, None)
59        }
60        .map_err(vk_error)?;
61
62        Ok(Self { handle })
63    }
64
65    pub fn handle(&self) -> vk::PipelineLayout {
66        self.handle
67    }
68
69    pub fn destroy(&self, device: &Device) {
70        unsafe {
71            device
72                .logical_device()
73                .destroy_pipeline_layout(self.handle, None);
74        }
75    }
76}