From 9c217bd83c4bab2945b43f3adeed28421605622f Mon Sep 17 00:00:00 2001 From: Sergiusz Bazanski Date: Sat, 14 Mar 2020 17:32:05 +0100 Subject: [PATCH] move projection matrix to push constants --- engine/shaders/forward.vert | 2 +- engine/src/render/vulkan/mod.rs | 8 ++++---- engine/src/render/vulkan/pipeline.rs | 15 +++++++-------- engine/src/render/vulkan/shaders.rs | 17 ++--------------- 4 files changed, 14 insertions(+), 28 deletions(-) diff --git a/engine/shaders/forward.vert b/engine/shaders/forward.vert index b9654ab..a5b0288 100644 --- a/engine/shaders/forward.vert +++ b/engine/shaders/forward.vert @@ -1,7 +1,7 @@ // vim: set ft=glsl: #version 450 -layout(binding = 0) uniform UniformBufferObject { +layout(push_constant) uniform UniformBufferObject { mat4 model; } ubo; diff --git a/engine/src/render/vulkan/mod.rs b/engine/src/render/vulkan/mod.rs index 1a1930d..8e699cc 100644 --- a/engine/src/render/vulkan/mod.rs +++ b/engine/src/render/vulkan/mod.rs @@ -198,14 +198,14 @@ impl Instance { let ubo = data::UniformBufferObject { model: proj.clone() * view.clone() * d.get_transform(), }; - let ub = self.uniform_pool.as_ref().unwrap().next(ubo.clone()).unwrap(); - let ds = self.pipeline.as_mut().unwrap().make_descriptor_set(Box::new(ub)); + //let ub = self.uniform_pool.as_ref().unwrap().next(ubo.clone()).unwrap(); + //let ds = self.pipeline.as_mut().unwrap().make_descriptor_set(Box::new(ub)); let pipeline = self.pipeline.as_ref().unwrap().get_pipeline(); c = c.draw_indexed(pipeline, &vc::DynamicState::none(), vec![vbuffer.clone()], ibuffer.clone(), - ds, - ()).unwrap(); + (), + ubo).unwrap(); } diff --git a/engine/src/render/vulkan/pipeline.rs b/engine/src/render/vulkan/pipeline.rs index ce79294..169dbd6 100644 --- a/engine/src/render/vulkan/pipeline.rs +++ b/engine/src/render/vulkan/pipeline.rs @@ -4,6 +4,7 @@ use std::sync::Arc; use vulkano::buffer as vb; use vulkano::descriptor::descriptor as vdD; use vulkano::descriptor::descriptor_set as vdd; +use vulkano::descriptor::pipeline_layout as vdp; use vulkano::device as vd; use vulkano::format::Format; use vulkano::framebuffer as vf; @@ -53,14 +54,11 @@ impl Forward { name: Some(Cow::Borrowed("fragColor")), } ], - uniforms: vec![ - vdD::DescriptorDesc { - ty: vdD::DescriptorDescTy::Buffer(vdD::DescriptorBufferDesc { - dynamic: Some(false), - storage: false, - }), - array_count: 1, - readonly: true, + uniforms: vec![], + push_constants: vec![ + vdp::PipelineLayoutDescPcRange { + offset: 0, + size: 64usize, stages: vdD::ShaderStages { vertex: true, ..vdD::ShaderStages::none() @@ -85,6 +83,7 @@ impl Forward { } ], uniforms: vec![], + push_constants: vec![], }.load_into(device.clone()).expect("could not load fragment shader"); let dimensions = [viewport_dimensions[0] as f32, viewport_dimensions[1] as f32]; diff --git a/engine/src/render/vulkan/shaders.rs b/engine/src/render/vulkan/shaders.rs index 3d4266f..da846ee 100644 --- a/engine/src/render/vulkan/shaders.rs +++ b/engine/src/render/vulkan/shaders.rs @@ -16,6 +16,7 @@ pub struct ShaderDefinition { pub inputs: Vec, pub outputs: Vec, pub uniforms: Vec, + pub push_constants: Vec, } impl ShaderDefinition { @@ -56,7 +57,7 @@ impl LoadedShader { } fn layout(&self) -> RuntimeShaderLayout { - RuntimeShaderLayout{ descs: vec![self.def.uniforms.clone()], push_constants: vec![], } + RuntimeShaderLayout{ descs: vec![self.def.uniforms.clone()], push_constants: self.def.push_constants.clone(), } } pub fn entry_point<'a, S>(&'a self) -> vps::GraphicsEntryPoint<'a, S, ShaderInterface, ShaderInterface, RuntimeShaderLayout> { @@ -104,20 +105,6 @@ unsafe impl vdp::PipelineLayoutDesc for RuntimeShaderLayout { } Some(self.push_constants[0].clone()) } - //fn num_push_constants_ranges(&self) -> usize { 1 } - //fn push_constants_range(&self, num: usize) -> Option { - // match num { - // 0 => Some(vdp::PipelineLayoutDescPcRange { - // offset: 0, - // size: 64usize, - // stages: vdd::ShaderStages { - // vertex: true, - // ..vdd::ShaderStages::none() - // }, - // }), - // _ => None, - // } - //} } pub struct ShaderInterface {