Skip to content

Commit

Permalink
Better error handling
Browse files Browse the repository at this point in the history
Co-authored-by: karroffel <therzog@mail.de>
  • Loading branch information
Zakarum and karroffel committed Oct 24, 2018
1 parent cb6127c commit b9ebd07
Show file tree
Hide file tree
Showing 19 changed files with 861 additions and 659 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Expand Up @@ -2,6 +2,9 @@
.DS_Store
.vscode/
.#*
*.iml
.idea


# Compiled
/doc
Expand Down
58 changes: 32 additions & 26 deletions examples/colour-uniform/main.rs
Expand Up @@ -149,7 +149,7 @@ impl<B: Backend> RendererState<B> {
}],
);

let mut img_desc_pool = Some(device.borrow().device.create_descriptor_pool(
let mut img_desc_pool = device.borrow().device.create_descriptor_pool(
1, // # of sets
&[
pso::DescriptorRangeDesc {
Expand All @@ -161,15 +161,15 @@ impl<B: Backend> RendererState<B> {
count: 1,
},
],
));
).ok();

let mut uniform_desc_pool = Some(device.borrow().device.create_descriptor_pool(
let mut uniform_desc_pool = device.borrow().device.create_descriptor_pool(
1, // # of sets
&[pso::DescriptorRangeDesc {
ty: pso::DescriptorType::UniformBuffer,
count: 1,
}],
));
).ok();

let image_desc = image_desc.create_desc_set(img_desc_pool.as_mut().unwrap());
let uniform_desc = uniform_desc.create_desc_set(uniform_desc_pool.as_mut().unwrap());
Expand All @@ -185,7 +185,7 @@ impl<B: Backend> RendererState<B> {
&device.borrow().queues,
pool::CommandPoolCreateFlags::empty(),
16,
);
).expect("Can't create staging command pool");

let image = ImageState::new::<hal::Graphics>(
image_desc,
Expand Down Expand Up @@ -499,8 +499,8 @@ impl<B: Backend> RendererState<B> {
self.device
.borrow()
.device
.wait_for_fence(framebuffer_fence, !0);
self.device.borrow().device.reset_fence(framebuffer_fence);
.wait_for_fence(framebuffer_fence, !0).unwrap();
self.device.borrow().device.reset_fence(framebuffer_fence).unwrap();
command_pool.reset();

// Rendering
Expand Down Expand Up @@ -729,10 +729,11 @@ impl<B: Backend> RenderPassState<B> {
.borrow()
.device
.create_render_pass(&[attachment], &[subpass], &[dependency])
.ok()
};

RenderPassState {
render_pass: Some(render_pass),
render_pass,
device,
}
}
Expand Down Expand Up @@ -804,7 +805,7 @@ impl<B: Backend> BufferState<B> {
.acquire_mapping_writer::<T>(&memory, 0..size)
.unwrap();
data_target[0..data_source.len()].copy_from_slice(data_source);
device.release_mapping_writer(data_target);
device.release_mapping_writer(data_target).unwrap();
}
}

Expand All @@ -831,7 +832,7 @@ impl<B: Backend> BufferState<B> {
.acquire_mapping_writer::<T>(self.memory.as_ref().unwrap(), offset..self.size)
.unwrap();
data_target[0..data_source.len()].copy_from_slice(data_source);
device.release_mapping_writer(data_target);
device.release_mapping_writer(data_target).unwrap();
}

fn new_texture(
Expand Down Expand Up @@ -887,7 +888,7 @@ impl<B: Backend> BufferState<B> {
.copy_from_slice(data_source_slice);
}

device.release_mapping_writer(data_target);
device.release_mapping_writer(data_target).unwrap();
}
}

Expand Down Expand Up @@ -970,10 +971,11 @@ impl<B: Backend> DescSetLayout<B> {
let desc_set_layout = device
.borrow()
.device
.create_descriptor_set_layout(bindings, &[]);
.create_descriptor_set_layout(bindings, &[])
.ok();

DescSetLayout {
layout: Some(desc_set_layout),
layout: desc_set_layout,
device,
}
}
Expand Down Expand Up @@ -1099,8 +1101,9 @@ impl<B: Backend> ImageState<B> {
)
.unwrap();

let sampler =
device.create_sampler(i::SamplerInfo::new(i::Filter::Linear, i::WrapMode::Clamp));
let sampler = device
.create_sampler(i::SamplerInfo::new(i::Filter::Linear, i::WrapMode::Clamp))
.expect("Can't create sampler");

desc.write_to_state(
vec![
Expand All @@ -1118,7 +1121,9 @@ impl<B: Backend> ImageState<B> {
device,
);

let mut transfered_image_fence = device.create_fence(false);
let mut transfered_image_fence = device
.create_fence(false)
.expect("Can't create fence");

// copy buffer to texture
{
Expand Down Expand Up @@ -1192,7 +1197,7 @@ impl<B: Backend> ImageState<B> {

fn wait_for_transfer_completion(&self) {
let device = &self.desc.layout.device.borrow().device;
device.wait_for_fence(self.transfered_image_fence.as_ref().unwrap(), !0);
device.wait_for_fence(self.transfered_image_fence.as_ref().unwrap(), !0).unwrap();
}

fn get_layout(&self) -> &B::DescriptorSetLayout {
Expand All @@ -1206,7 +1211,7 @@ impl<B: Backend> Drop for ImageState<B> {
let device = &self.desc.layout.device.borrow().device;

let fence = self.transfered_image_fence.take().unwrap();
device.wait_for_fence(&fence, !0);
device.wait_for_fence(&fence, !0).unwrap();
device.destroy_fence(fence);

device.destroy_sampler(self.sampler.take().unwrap());
Expand Down Expand Up @@ -1236,8 +1241,9 @@ impl<B: Backend> PipelineState<B> {
IS::Item: std::borrow::Borrow<B::DescriptorSetLayout>,
{
let device = &device_ptr.borrow().device;
let pipeline_layout =
device.create_pipeline_layout(desc_layouts, &[(pso::ShaderStageFlags::VERTEX, 0..8)]);
let pipeline_layout = device
.create_pipeline_layout(desc_layouts, &[(pso::ShaderStageFlags::VERTEX, 0..8)])
.expect("Can't create pipeline layout");

let pipeline = {
let vs_module = {
Expand Down Expand Up @@ -1384,7 +1390,7 @@ impl<B: Backend> SwapchainState<B> {
&mut backend.surface,
swap_config,
None,
);
).expect("Can't create swapchain");

let swapchain = SwapchainState {
swapchain: Some(swapchain),
Expand Down Expand Up @@ -1474,15 +1480,15 @@ impl<B: Backend> FramebufferState<B> {
let mut present_semaphores: Vec<B::Semaphore> = vec![];

for _ in 0..iter_count {
fences.push(device.borrow().device.create_fence(true));
fences.push(device.borrow().device.create_fence(true).unwrap());
command_pools.push(device.borrow().device.create_command_pool_typed(
&device.borrow().queues,
pool::CommandPoolCreateFlags::empty(),
16,
));
).expect("Can't create command pool"));

acquire_semaphores.push(device.borrow().device.create_semaphore());
present_semaphores.push(device.borrow().device.create_semaphore());
acquire_semaphores.push(device.borrow().device.create_semaphore().unwrap());
present_semaphores.push(device.borrow().device.create_semaphore().unwrap());
}

FramebufferState {
Expand Down Expand Up @@ -1546,7 +1552,7 @@ impl<B: Backend> Drop for FramebufferState<B> {
let device = &self.device.borrow().device;

for fence in self.framebuffer_fences.take().unwrap() {
device.wait_for_fence(&fence, !0);
device.wait_for_fence(&fence, !0).unwrap();
device.destroy_fence(fence);
}

Expand Down
20 changes: 13 additions & 7 deletions examples/compute/main.rs
Expand Up @@ -71,9 +71,11 @@ fn main() {
}
],
&[],
);
).expect("Can't create descriptor set layout");

let pipeline_layout = device.create_pipeline_layout(Some(&set_layout), &[]);
let pipeline_layout = device
.create_pipeline_layout(Some(&set_layout), &[])
.expect("Can't create pipeline layout");
let entry_point = pso::EntryPoint {
entry: "main",
module: &shader,
Expand All @@ -91,7 +93,7 @@ fn main() {
count: 1,
},
],
);
).expect("Can't create descriptor pool");
(pipeline_layout, pipeline, set_layout, desc_pool)
};

Expand All @@ -107,7 +109,7 @@ fn main() {
{
let mut writer = device.acquire_mapping_writer::<u32>(&staging_memory, 0..staging_size).unwrap();
writer[0..numbers.len()].copy_from_slice(&numbers);
device.release_mapping_writer(writer);
device.release_mapping_writer(writer).expect("Can't relase mapping writer");
}

let (device_memory, device_buffer, _device_buffer_size) = create_buffer::<back::Backend>(
Expand All @@ -131,8 +133,12 @@ fn main() {
}
));

let mut command_pool = device.create_command_pool_typed(&queue_group, pool::CommandPoolCreateFlags::empty(), 16);
let fence = device.create_fence(false);
let mut command_pool = device
.create_command_pool_typed(&queue_group, pool::CommandPoolCreateFlags::empty(), 16)
.expect("Can't create command pool");
let fence = device
.create_fence(false)
.expect("Can't create fence");
let submission = queue::Submission::new().submit(Some({
let mut command_buffer = command_pool.acquire_command_buffer(false);
command_buffer.copy_buffer(&staging_buffer, &device_buffer, &[command::BufferCopy { src: 0, dst: 0, size: stride * numbers.len() as u64}]);
Expand All @@ -159,7 +165,7 @@ fn main() {
command_buffer.finish()
}));
queue_group.queues[0].submit(submission, Some(&fence));
device.wait_for_fence(&fence, !0);
device.wait_for_fence(&fence, !0).unwrap();

{
let reader = device.acquire_mapping_reader::<u32>(&staging_memory, 0..staging_size).unwrap();
Expand Down
42 changes: 25 additions & 17 deletions examples/quad/main.rs
Expand Up @@ -111,8 +111,9 @@ fn main() {
.open_with::<_, hal::Graphics>(1, |family| surface.supports_queue_family(family))
.unwrap();

let mut command_pool =
device.create_command_pool_typed(&queue_group, pool::CommandPoolCreateFlags::empty(), 16);
let mut command_pool = device
.create_command_pool_typed(&queue_group, pool::CommandPoolCreateFlags::empty(), 16)
.expect("Can't create command pool");

// Setup renderpass and pipeline
let set_layout = device.create_descriptor_set_layout(
Expand All @@ -133,7 +134,7 @@ fn main() {
},
],
&[],
);
).expect("Can't create descriptor set layout");

// Descriptors
let mut desc_pool = device.create_descriptor_pool(
Expand All @@ -148,7 +149,7 @@ fn main() {
count: 1,
},
],
);
).expect("Can't create descriptor pool");
let desc_set = desc_pool.allocate_set(&set_layout).unwrap();

// Buffer allocations
Expand Down Expand Up @@ -188,7 +189,7 @@ fn main() {
.acquire_mapping_writer::<Vertex>(&buffer_memory, 0..buffer_req.size)
.unwrap();
vertices[0..QUAD.len()].copy_from_slice(&QUAD);
device.release_mapping_writer(vertices);
device.release_mapping_writer(vertices).unwrap();
}

// Image
Expand Down Expand Up @@ -226,7 +227,7 @@ fn main() {
let dest_base = y * row_pitch as usize;
data[dest_base..dest_base + row.len()].copy_from_slice(row);
}
device.release_mapping_writer(data);
device.release_mapping_writer(data).unwrap();
}

let image_unbound = device
Expand Down Expand Up @@ -265,7 +266,9 @@ fn main() {
)
.unwrap();

let sampler = device.create_sampler(i::SamplerInfo::new(i::Filter::Linear, i::WrapMode::Clamp));
let sampler = device
.create_sampler(i::SamplerInfo::new(i::Filter::Linear, i::WrapMode::Clamp))
.expect("Can't create sampler");

device.write_descriptor_sets(vec![
pso::DescriptorSetWrite {
Expand All @@ -282,8 +285,8 @@ fn main() {
},
]);

let mut frame_semaphore = device.create_semaphore();
let mut frame_fence = device.create_fence(false); // TODO: remove
let mut frame_semaphore = device.create_semaphore().expect("Can't create semaphore");
let mut frame_fence = device.create_fence(false).expect("Can't create fence"); // TODO: remove

// copy buffer to texture
{
Expand Down Expand Up @@ -343,7 +346,7 @@ fn main() {
let submission = Submission::new().submit(Some(submit));
queue_group.queues[0].submit(submission, Some(&mut frame_fence));

device.wait_for_fence(&frame_fence, !0);
device.wait_for_fence(&frame_fence, !0).expect("Can't wait for fence");
}

let (caps, formats, _present_modes) = surface.compatibility(&mut adapter.physical_device);
Expand All @@ -359,7 +362,9 @@ fn main() {
let swap_config = SwapchainConfig::from_caps(&caps, format);
println!("{:?}", swap_config);
let extent = swap_config.extent.to_extent();
let (mut swap_chain, mut backbuffer) = device.create_swapchain(&mut surface, swap_config, None);
let (mut swap_chain, mut backbuffer) = device
.create_swapchain(&mut surface, swap_config, None)
.expect("Can't create swapchain");

let render_pass = {
let attachment = pass::Attachment {
Expand Down Expand Up @@ -388,7 +393,9 @@ fn main() {
..(i::Access::COLOR_ATTACHMENT_READ | i::Access::COLOR_ATTACHMENT_WRITE),
};

device.create_render_pass(&[attachment], &[subpass], &[dependency])
device
.create_render_pass(&[attachment], &[subpass], &[dependency])
.expect("Can't create render pass")
};
let (mut frame_images, mut framebuffers) = match backbuffer {
Backbuffer::Images(images) => {
Expand Down Expand Up @@ -423,7 +430,7 @@ fn main() {
let pipeline_layout = device.create_pipeline_layout(
std::iter::once(&set_layout),
&[(pso::ShaderStageFlags::VERTEX, 0..8)],
);
).expect("Can't create pipeline layout");
let pipeline = {
let vs_module = {
let glsl = fs::read_to_string("quad/data/quad.vert").unwrap();
Expand Down Expand Up @@ -576,8 +583,9 @@ fn main() {
println!("{:?}", swap_config);
let extent = swap_config.extent.to_extent();

let (new_swap_chain, new_backbuffer) =
device.create_swapchain(&mut surface, swap_config, Some(swap_chain));
let (new_swap_chain, new_backbuffer) = device
.create_swapchain(&mut surface, swap_config, Some(swap_chain))
.expect("Can't create swapchain");

// Clean up the old framebuffers, images and swapchain
for framebuffer in framebuffers {
Expand Down Expand Up @@ -627,7 +635,7 @@ fn main() {
recreate_swapchain = false;
}

device.reset_fence(&frame_fence);
device.reset_fence(&frame_fence).unwrap();
command_pool.reset();
let frame: hal::SwapImageIndex = {
match swap_chain.acquire_image(!0, FrameSync::Semaphore(&mut frame_semaphore)) {
Expand Down Expand Up @@ -670,7 +678,7 @@ fn main() {
queue_group.queues[0].submit(submission, Some(&mut frame_fence));

// TODO: replace with semaphore
device.wait_for_fence(&frame_fence, !0);
device.wait_for_fence(&frame_fence, !0).unwrap();

// present frame
if let Err(_) = swap_chain.present(&mut queue_group.queues[0], frame, &[]) {
Expand Down

0 comments on commit b9ebd07

Please sign in to comment.