From fde3c4f94c29b7fa3975ea3e20f59ce603bb5acb Mon Sep 17 00:00:00 2001 From: Sergiusz Bazanski Date: Mon, 20 Jan 2020 03:26:06 +0100 Subject: [PATCH] split vertex to vulkan::data, use immutable buffers --- engine/BUILD | 1 + engine/src/render/vulkan/data.rs | 20 ++++++++++++++++++ engine/src/render/vulkan/mod.rs | 32 ++++++++--------------------- engine/src/render/vulkan/shaders.rs | 2 +- 4 files changed, 31 insertions(+), 24 deletions(-) create mode 100644 engine/src/render/vulkan/data.rs diff --git a/engine/BUILD b/engine/BUILD index c72f7da..cb00733 100644 --- a/engine/BUILD +++ b/engine/BUILD @@ -8,6 +8,7 @@ rust_binary( "src/render/mod.rs", "src/render/vulkan/mod.rs", "src/render/vulkan/binding.rs", + "src/render/vulkan/data.rs", "src/render/vulkan/qfi.rs", "src/render/vulkan/shaders.rs", "src/render/vulkan/swapchains.rs", diff --git a/engine/src/render/vulkan/data.rs b/engine/src/render/vulkan/data.rs new file mode 100644 index 0000000..6c9d778 --- /dev/null +++ b/engine/src/render/vulkan/data.rs @@ -0,0 +1,20 @@ +#[derive(Copy, Clone)] +pub struct Vertex { + pos: [f32; 3], + color: [f32; 3], +} + +impl Vertex { + pub fn new(pos: [f32; 3], color: [f32; 3]) -> Self { + Self { pos, color } + } +} +vulkano::impl_vertex!(Vertex, pos, color); + +pub fn vertices() -> [Vertex; 3] { + [ + Vertex::new([0.0, -0.5, 0.0], [1.0, 1.0, 1.0]), + Vertex::new([0.5, 0.5, 0.0], [0.0, 1.0, 0.0]), + Vertex::new([-0.5, 0.5, 0.0], [0.0, 0.0, 1.]) + ] +} diff --git a/engine/src/render/vulkan/mod.rs b/engine/src/render/vulkan/mod.rs index f5d5f39..6feef40 100644 --- a/engine/src/render/vulkan/mod.rs +++ b/engine/src/render/vulkan/mod.rs @@ -11,6 +11,7 @@ use vulkano::pipeline as vp; use vulkano::sync::{FenceSignalFuture, GpuFuture}; mod binding; +mod data; mod shaders; mod swapchains; mod qfi; @@ -102,8 +103,14 @@ impl Instance { let render_pass = self.render_pass.as_ref().unwrap().clone(); let pipeline = shaders::pipeline_forward(device.clone(), chain.dimensions(), render_pass); - let buffer = vb::cpu_access::CpuAccessibleBuffer::from_iter(device.clone(), - vb::BufferUsage::vertex_buffer(), vertices().iter().cloned()).unwrap(); + + let (buffer, future) = vb::immutable::ImmutableBuffer::from_iter( + data::vertices().iter().cloned(), + vb::BufferUsage::vertex_buffer(), + self.binding.as_ref().unwrap().graphics_queue.clone(), + ).unwrap(); + future.flush().unwrap(); + self.create_command_buffers(pipeline, buffer); self.previous_frame_end = None; @@ -230,24 +237,3 @@ impl Instance { }).expect("could not create debug callback") } } - -#[derive(Copy, Clone)] -struct Vertex { - pos: [f32; 3], - color: [f32; 3], -} - -impl Vertex { - pub fn new(pos: [f32; 3], color: [f32; 3]) -> Self { - Self { pos, color } - } -} -vulkano::impl_vertex!(Vertex, pos, color); - -fn vertices() -> [Vertex; 3] { - [ - Vertex::new([0.0, -0.5, 0.0], [1.0, 1.0, 1.0]), - Vertex::new([0.5, 0.5, 0.0], [0.0, 1.0, 0.0]), - Vertex::new([-0.5, 0.5, 0.0], [0.0, 0.0, 1.]) - ] -} diff --git a/engine/src/render/vulkan/shaders.rs b/engine/src/render/vulkan/shaders.rs index bd4254d..a4bb93f 100644 --- a/engine/src/render/vulkan/shaders.rs +++ b/engine/src/render/vulkan/shaders.rs @@ -50,7 +50,7 @@ pub fn pipeline_forward( }; Arc::new(vp::GraphicsPipeline::start() - .vertex_input_single_buffer::() + .vertex_input_single_buffer::() .vertex_shader(vertex.entry_point(), ()) .triangle_list() .primitive_restart(false)