initial commit
This commit is contained in:
125
src/layouts.rs
Normal file
125
src/layouts.rs
Normal file
@@ -0,0 +1,125 @@
|
||||
use crate::vk;
|
||||
use vk::pipeline::shader::*;
|
||||
use vk::descriptor::descriptor::*;
|
||||
use vk::descriptor::pipeline_layout::*;
|
||||
use crate::reflection::LayoutData;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Entry {
|
||||
pub frag_input: FragInput,
|
||||
pub frag_output: FragOutput,
|
||||
pub frag_layout: FragLayout,
|
||||
pub vert_input: VertInput,
|
||||
pub vert_output: VertOutput,
|
||||
pub vert_layout: VertLayout,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct FragInput {
|
||||
pub inputs: Vec<ShaderInterfaceDefEntry>,
|
||||
}
|
||||
|
||||
unsafe impl ShaderInterfaceDef for FragInput {
|
||||
type Iter = FragInputIter;
|
||||
|
||||
fn elements(&self) -> FragInputIter {
|
||||
self.inputs.clone().into_iter()
|
||||
}
|
||||
}
|
||||
|
||||
pub type FragInputIter = std::vec::IntoIter<ShaderInterfaceDefEntry>;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct FragOutput {
|
||||
pub outputs: Vec<ShaderInterfaceDefEntry>,
|
||||
}
|
||||
|
||||
unsafe impl ShaderInterfaceDef for FragOutput {
|
||||
type Iter = FragOutputIter;
|
||||
|
||||
fn elements(&self) -> FragOutputIter {
|
||||
self.outputs.clone().into_iter()
|
||||
}
|
||||
}
|
||||
|
||||
pub type FragOutputIter = std::vec::IntoIter<ShaderInterfaceDefEntry>;
|
||||
|
||||
// Layout same as with vertex shader.
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct FragLayout {
|
||||
pub stages: ShaderStages,
|
||||
pub layout_data: LayoutData,
|
||||
}
|
||||
unsafe impl PipelineLayoutDesc for FragLayout {
|
||||
fn num_sets(&self) -> usize {
|
||||
self.layout_data.num_sets
|
||||
}
|
||||
fn num_bindings_in_set(&self, set: usize) -> Option<usize> {
|
||||
self.layout_data.num_bindings.get(&set).map(|&i| i)
|
||||
}
|
||||
fn descriptor(&self, _set: usize, _binding: usize) -> Option<DescriptorDesc> {
|
||||
None
|
||||
}
|
||||
fn num_push_constants_ranges(&self) -> usize {
|
||||
0
|
||||
}
|
||||
fn push_constants_range(&self, _num: usize) -> Option<PipelineLayoutDescPcRange> {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct VertInput {
|
||||
pub inputs: Vec<ShaderInterfaceDefEntry>,
|
||||
}
|
||||
|
||||
unsafe impl ShaderInterfaceDef for VertInput {
|
||||
type Iter = VertInputIter;
|
||||
|
||||
fn elements(&self) -> VertInputIter {
|
||||
self.inputs.clone().into_iter()
|
||||
}
|
||||
}
|
||||
|
||||
pub type VertInputIter = std::vec::IntoIter<ShaderInterfaceDefEntry>;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct VertOutput {
|
||||
pub outputs: Vec<ShaderInterfaceDefEntry>,
|
||||
}
|
||||
|
||||
unsafe impl ShaderInterfaceDef for VertOutput {
|
||||
type Iter = VertOutputIter;
|
||||
|
||||
fn elements(&self) -> VertOutputIter {
|
||||
self.outputs.clone().into_iter()
|
||||
}
|
||||
}
|
||||
|
||||
pub type VertOutputIter = std::vec::IntoIter<ShaderInterfaceDefEntry>;
|
||||
|
||||
// This structure describes layout of this stage.
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
pub struct VertLayout(pub ShaderStages);
|
||||
unsafe impl PipelineLayoutDesc for VertLayout {
|
||||
// Number of descriptor sets it takes.
|
||||
fn num_sets(&self) -> usize {
|
||||
0
|
||||
}
|
||||
// Number of entries (bindings) in each set.
|
||||
fn num_bindings_in_set(&self, _set: usize) -> Option<usize> {
|
||||
None
|
||||
}
|
||||
// Descriptor descriptions.
|
||||
fn descriptor(&self, _set: usize, _binding: usize) -> Option<DescriptorDesc> {
|
||||
None
|
||||
}
|
||||
// Number of push constants ranges (think: number of push constants).
|
||||
fn num_push_constants_ranges(&self) -> usize {
|
||||
0
|
||||
}
|
||||
// Each push constant range in memory.
|
||||
fn push_constants_range(&self, _num: usize) -> Option<PipelineLayoutDescPcRange> {
|
||||
None
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user