queue frees in system nodes

This commit is contained in:
Carter Anderson 2020-05-05 13:12:50 -07:00
parent 0d87ebe866
commit 2b8789dc8c
3 changed files with 12 additions and 31 deletions

View File

@ -32,9 +32,9 @@ impl Node for Camera2dNode {
impl SystemNode for Camera2dNode {
fn get_system(&self, resources: &Resources) -> Box<dyn Schedulable> {
let mut camera_buffer = None;
let mut tmp_buffer = None;
let mut window_resized_event_reader = resources.get_event_reader::<WindowResized>();
let mut command_queue = self.command_queue.clone();
SystemBuilder::new("camera_2d_resource_provider")
.read_resource::<RenderResources>()
// TODO: this write on RenderResourceAssignments will prevent this system from running in parallel with other systems that do the same
@ -69,11 +69,7 @@ impl SystemNode for Camera2dNode {
let camera_matrix: [[f32; 4]; 4] =
camera.view_matrix.to_cols_array_2d();
if let Some(old_tmp_buffer) = tmp_buffer {
render_resources.remove_buffer(old_tmp_buffer);
}
tmp_buffer = Some(render_resources.create_buffer_mapped(
let tmp_buffer = render_resources.create_buffer_mapped(
BufferInfo {
size: matrix_size,
buffer_usage: BufferUsage::COPY_SRC,
@ -82,15 +78,16 @@ impl SystemNode for Camera2dNode {
&mut |data, _renderer| {
data[0..matrix_size].copy_from_slice(camera_matrix.as_bytes());
},
));
);
command_queue.copy_buffer_to_buffer(
tmp_buffer.unwrap(),
tmp_buffer,
0,
camera_buffer.unwrap(),
0,
matrix_size as u64,
);
command_queue.free_buffer(tmp_buffer);
}
}
},

View File

@ -32,9 +32,9 @@ impl Node for CameraNode {
impl SystemNode for CameraNode {
fn get_system(&self, resources: &Resources) -> Box<dyn Schedulable> {
let mut camera_buffer = None;
let mut tmp_buffer = None;
let mut window_resized_event_reader = resources.get_event_reader::<WindowResized>();
let mut command_queue = self.command_queue.clone();
SystemBuilder::new("camera_resource_provider")
.read_resource::<RenderResources>()
// TODO: this write on RenderResourceAssignments will prevent this system from running in parallel with other systems that do the same
@ -69,11 +69,7 @@ impl SystemNode for CameraNode {
let camera_matrix: [[f32; 4]; 4] =
(camera.view_matrix * local_to_world.0).to_cols_array_2d();
if let Some(old_tmp_buffer) = tmp_buffer {
render_resources.remove_buffer(old_tmp_buffer);
}
tmp_buffer = Some(render_resources.create_buffer_mapped(
let tmp_buffer = render_resources.create_buffer_mapped(
BufferInfo {
size: matrix_size,
buffer_usage: BufferUsage::COPY_SRC,
@ -82,15 +78,16 @@ impl SystemNode for CameraNode {
&mut |data, _renderer| {
data[0..matrix_size].copy_from_slice(camera_matrix.as_bytes());
},
));
);
command_queue.copy_buffer_to_buffer(
tmp_buffer.unwrap(),
tmp_buffer,
0,
camera_buffer.unwrap(),
0,
matrix_size as u64,
);
command_queue.free_buffer(tmp_buffer);
}
}
},

View File

@ -429,7 +429,6 @@ where
let mut uniform_buffer_arrays = UniformBufferArrays::<T>::new();
let mut vertex_buffer_descriptors = resources.get_mut::<VertexBufferDescriptors>().unwrap();
let dynamic_uniforms = self.dynamic_uniforms;
let mut staging_buffer_resource = None;
initialize_vertex_buffer_descriptor::<T>(&mut vertex_buffer_descriptors);
// TODO: maybe run "update" here
SystemBuilder::new(format!(
@ -447,10 +446,6 @@ where
(textures, render_resources),
(read_uniform_query, write_uniform_query)| {
let render_resource_context = &*render_resources.context;
if let Some(staging_buffer_resource) = staging_buffer_resource {
render_resource_context.remove_buffer(staging_buffer_resource);
}
staging_buffer_resource = None;
uniform_buffer_arrays.reset_new_item_counts();
// update uniforms info
@ -537,8 +532,7 @@ where
uniform_buffer_arrays
.copy_staging_buffer_to_final_buffers(&mut command_queue, staging_buffer);
staging_buffer_resource = Some(staging_buffer);
command_queue.free_buffer(staging_buffer);
}
},
)
@ -593,7 +587,6 @@ where
let mut uniform_buffer_arrays = UniformBufferArrays::<T>::new();
let mut vertex_buffer_descriptors = resources.get_mut::<VertexBufferDescriptors>().unwrap();
let dynamic_uniforms = self.dynamic_uniforms;
let mut staging_buffer_resource = None;
initialize_vertex_buffer_descriptor::<T>(&mut vertex_buffer_descriptors);
// TODO: maybe run "update" here
SystemBuilder::new("uniform_resource_provider")
@ -609,11 +602,6 @@ where
(assets, textures, render_resources),
(read_handle_query, write_handle_query)| {
let render_resource_context = &*render_resources.context;
if let Some(staging_buffer_resource) = staging_buffer_resource {
render_resource_context.remove_buffer(staging_buffer_resource);
}
staging_buffer_resource = None;
uniform_buffer_arrays.reset_new_item_counts();
// update uniform handles info
@ -714,8 +702,7 @@ where
&mut command_queue,
staging_buffer,
);
staging_buffer_resource = Some(staging_buffer);
command_queue.free_buffer(staging_buffer);
}
},
)