Add uniform buffer
This commit is contained in:
parent
d4678da2e6
commit
439625f037
|
@ -621,8 +621,31 @@ fn main() {
|
|||
p_bindings: desc_layout_bindings.as_ptr(),
|
||||
};
|
||||
|
||||
let desc_set_layout = device.create_descriptor_set_layout(&descriptor_info).unwrap();
|
||||
|
||||
let desc_set_layouts = [device.create_descriptor_set_layout(&descriptor_info).unwrap()];
|
||||
let desc_alloc_info = vk::DescriptorSetAllocateInfo {
|
||||
s_type: vk::StructureType::DescriptorSetAllocateInfo,
|
||||
p_next: ptr::null(),
|
||||
descriptor_pool: descriptor_pool,
|
||||
descriptor_set_count: desc_set_layouts.len() as u32,
|
||||
p_set_layouts: desc_set_layouts.as_ptr(),
|
||||
};
|
||||
let descriptor_sets = device.allocate_descriptor_sets(&desc_alloc_info).unwrap();
|
||||
|
||||
let write_desc_sets = [
|
||||
vk::WriteDescriptorSet{
|
||||
s_type: vk::StructureType::WriteDescriptorSet,
|
||||
p_next: ptr::null(),
|
||||
dst_set: descriptor_sets[0],
|
||||
dst_binding: 0,
|
||||
dst_array_element: 0,
|
||||
descriptor_count: 1,
|
||||
descriptor_type: vk::DescriptorType::UniformBuffer,
|
||||
p_image_info: ptr::null(),
|
||||
p_buffer_info: ptr::null(),
|
||||
p_texel_buffer_view: ptr::null(),
|
||||
}
|
||||
];
|
||||
let vertex_spv_file = File::open(Path::new("shader/vert.spv"))
|
||||
.expect("Could not find vert.spv.");
|
||||
let frag_spv_file = File::open(Path::new("shader/frag.spv")).expect("Could not find frag.spv.");
|
||||
|
@ -653,8 +676,8 @@ fn main() {
|
|||
s_type: vk::StructureType::PipelineLayoutCreateInfo,
|
||||
p_next: ptr::null(),
|
||||
flags: Default::default(),
|
||||
set_layout_count: 0,
|
||||
p_set_layouts: ptr::null(),
|
||||
set_layout_count: desc_set_layouts.len() as u32,
|
||||
p_set_layouts: desc_set_layouts.as_ptr(),
|
||||
push_constant_range_count: 0,
|
||||
p_push_constant_ranges: ptr::null(),
|
||||
};
|
||||
|
@ -955,7 +978,9 @@ fn main() {
|
|||
for image_view in present_image_views {
|
||||
device.destroy_image_view(image_view);
|
||||
}
|
||||
device.destroy_descriptor_set_layout(desc_set_layout);
|
||||
for &layout in desc_set_layouts.iter() {
|
||||
device.destroy_descriptor_set_layout(layout);
|
||||
}
|
||||
device.destroy_descriptor_pool(descriptor_pool);
|
||||
device.destroy_command_pool(pool);
|
||||
device.destroy_swapchain_khr(swapchain);
|
||||
|
|
|
@ -113,7 +113,32 @@ impl<'r> Device<'r> {
|
|||
self.device_fn.destroy_descriptor_set_layout(self.handle, layout, ptr::null());
|
||||
}
|
||||
}
|
||||
pub fn free_descriptor_sets(&self,
|
||||
pool: vk::DescriptorPool,
|
||||
descriptor_sets: &[vk::DescriptorSet]) {
|
||||
unsafe {
|
||||
self.device_fn.free_descriptor_sets(self.handle,
|
||||
pool,
|
||||
descriptor_sets.len() as u32,
|
||||
descriptor_sets.as_ptr());
|
||||
}
|
||||
}
|
||||
|
||||
pub fn allocate_descriptor_sets(&self,
|
||||
create_info: &vk::DescriptorSetAllocateInfo)
|
||||
-> VkResult<Vec<vk::DescriptorSet>> {
|
||||
unsafe {
|
||||
let mut desc_set = Vec::with_capacity(create_info.descriptor_set_count as usize);
|
||||
let err_code = self.device_fn
|
||||
.allocate_descriptor_sets(self.handle, create_info, desc_set.as_mut_ptr());
|
||||
|
||||
desc_set.set_len(create_info.descriptor_set_count as usize);
|
||||
match err_code {
|
||||
vk::Result::Success => Ok(desc_set),
|
||||
_ => Err(err_code),
|
||||
}
|
||||
}
|
||||
}
|
||||
pub fn create_descriptor_set_layout(&self,
|
||||
create_info: &vk::DescriptorSetLayoutCreateInfo)
|
||||
-> VkResult<vk::DescriptorSetLayout> {
|
||||
|
|
Loading…
Reference in a new issue