Skip to content

Commit

Permalink
Stub mesh shaders
Browse files Browse the repository at this point in the history
  • Loading branch information
MatusT committed May 1, 2020
1 parent 06073f0 commit 01601ad
Show file tree
Hide file tree
Showing 24 changed files with 258 additions and 226 deletions.
13 changes: 4 additions & 9 deletions examples/colour-uniform/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1255,14 +1255,6 @@ impl<B: Backend> PipelineState<B> {
},
);

let shader_entries = pso::GraphicsShaderSet {
vertex: Some(vs_entry),
hull: None,
domain: None,
geometry: None,
fragment: Some(fs_entry),
};

let subpass = pass::Subpass {
index: 0,
main_pass: render_pass,
Expand Down Expand Up @@ -1295,7 +1287,6 @@ impl<B: Backend> PipelineState<B> {
});

let mut pipeline_desc = pso::GraphicsPipelineDesc::new(
shader_entries,
pso::PrimitiveAssembler::Vertex {
buffers: vertex_buffers,
attributes,
Expand All @@ -1304,8 +1295,12 @@ impl<B: Backend> PipelineState<B> {
with_adjacency: false,
restart_index: None,
},
vertex: vs_entry,
geometry: None,
tessellation: None,
},
pso::Rasterizer::FILL,
Some(fs_entry),
&pipeline_layout,
subpass,
);
Expand Down
60 changes: 29 additions & 31 deletions examples/quad/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -671,46 +671,39 @@ where
},
);

let shader_entries = pso::GraphicsShaderSet {
vertex: Some(vs_entry),
hull: None,
domain: None,
geometry: None,
fragment: Some(fs_entry),
};

let subpass = Subpass {
index: 0,
main_pass: &*render_pass,
};

let mut vertex_buffers = Vec::new();
vertex_buffers.push(pso::VertexBufferDesc {
binding: 0,
stride: mem::size_of::<Vertex>() as u32,
rate: VertexInputRate::Vertex,
});

let mut attributes = Vec::new();
attributes.push(pso::AttributeDesc {
location: 0,
binding: 0,
element: pso::Element {
format: f::Format::Rg32Sfloat,
offset: 0,
let vertex_buffers = vec![
pso::VertexBufferDesc {
binding: 0,
stride: mem::size_of::<Vertex>() as u32,
rate: VertexInputRate::Vertex,
},
});
attributes.push(pso::AttributeDesc {
location: 1,
binding: 0,
element: pso::Element {
format: f::Format::Rg32Sfloat,
offset: 8,
];

let attributes = vec![
pso::AttributeDesc {
location: 0,
binding: 0,
element: pso::Element {
format: f::Format::Rg32Sfloat,
offset: 0,
},
},
});
pso::AttributeDesc {
location: 1,
binding: 0,
element: pso::Element {
format: f::Format::Rg32Sfloat,
offset: 8,
},
},
];

let mut pipeline_desc = pso::GraphicsPipelineDesc::new(
shader_entries,
pso::PrimitiveAssembler::Vertex {
buffers: vertex_buffers,
attributes,
Expand All @@ -719,11 +712,16 @@ where
with_adjacency: false,
restart_index: None,
},
vertex: vs_entry,
geometry: None,
tessellation: None,
},
pso::Rasterizer::FILL,
Some(fs_entry),
&*pipeline_layout,
subpass,
);

pipeline_desc.blender.targets.push(pso::ColorBlendDesc {
mask: pso::ColorMask::ALL,
blend: Some(pso::BlendState::ALPHA),
Expand Down
77 changes: 44 additions & 33 deletions src/backend/dx11/src/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -919,51 +919,62 @@ impl device::Device<Backend> for Device {
.map_err(|err| pso::CreationError::Shader(err))
};

let vs = build_shader(pso::Stage::Vertex, desc.shaders.vertex.as_ref())?
.ok_or(pso::CreationError::VertexShaderMissing)?;
let ps = build_shader(pso::Stage::Fragment, desc.shaders.fragment.as_ref())?;
let gs = build_shader(pso::Stage::Geometry, desc.shaders.geometry.as_ref())?;
let ds = build_shader(pso::Stage::Domain, desc.shaders.domain.as_ref())?;
let hs = build_shader(pso::Stage::Hull, desc.shaders.hull.as_ref())?;

let (vertex_buffers, attributes, input_assembler) = match &desc.primitive_assembler {
&pso::PrimitiveAssembler::Vertex {
let (layout, vs, gs, hs, ds) = match desc.primitive_assembler {
pso::PrimitiveAssembler::Vertex {
ref buffers,
ref attributes,
ref input_assembler,
} => (buffers, attributes, input_assembler),
ref vertex,
ref tessellation,
ref geometry,
} => {
let (hs, ds) = if let Some(ts) = tessellation {
(Some(&ts.0), Some(&ts.1))
} else {
(None, None)
};

let vs = build_shader(pso::Stage::Vertex, Some(&vertex))?.unwrap();
let gs = build_shader(pso::Stage::Geometry, geometry.as_ref())?;
let hs = build_shader(pso::Stage::Hull, hs)?;
let ds = build_shader(pso::Stage::Domain, ds)?;

let layout = self.create_input_layout(vs.clone(), buffers, attributes, input_assembler)?;

let vs = self.create_vertex_shader(vs)?;
let gs = if let Some(blob) = gs {
Some(self.create_geometry_shader(blob)?)
} else {
None
};
let hs = if let Some(blob) = hs {
Some(self.create_hull_shader(blob)?)
} else {
None
};
let ds = if let Some(blob) = ds {
Some(self.create_domain_shader(blob)?)
} else {
None
};

(layout, vs, gs, hs, ds)
},
pso::PrimitiveAssembler::Mesh { .. } => {
return Err(pso::CreationError::UnsupportedPipeline)
}
};

let layout =
self.create_input_layout(vs.clone(), vertex_buffers, attributes, input_assembler)?;
let rasterizer_state = self.create_rasterizer_state(&desc.rasterizer)?;
let blend_state = self.create_blend_state(&desc.blender)?;
let depth_stencil_state = Some(self.create_depth_stencil_state(&desc.depth_stencil)?);

let vs = self.create_vertex_shader(vs)?;
let ps = build_shader(pso::Stage::Fragment, desc.fragment.as_ref())?;
let ps = if let Some(blob) = ps {
Some(self.create_pixel_shader(blob)?)
} else {
None
};
let gs = if let Some(blob) = gs {
Some(self.create_geometry_shader(blob)?)
} else {
None
};
let ds = if let Some(blob) = ds {
Some(self.create_domain_shader(blob)?)
} else {
None
};
let hs = if let Some(blob) = hs {
Some(self.create_hull_shader(blob)?)
} else {
None
};
};

let rasterizer_state = self.create_rasterizer_state(&desc.rasterizer)?;
let blend_state = self.create_blend_state(&desc.blender)?;
let depth_stencil_state = Some(self.create_depth_stencil_state(&desc.depth_stencil)?);

Ok(GraphicsPipeline {
vs,
Expand Down
10 changes: 6 additions & 4 deletions src/backend/dx11/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ use hal::{
Limits,
VertexCount,
VertexOffset,
TaskCount,
TaskOffset,
WorkGroupCount,
};

Expand Down Expand Up @@ -782,12 +784,12 @@ impl window::Surface<Backend> for Surface {
window::SurfaceCapabilities {
present_modes: window::PresentMode::FIFO, //TODO
composite_alpha_modes: window::CompositeAlphaMode::OPAQUE, //TODO
image_count: 1 ..= 16, // TODO:
image_count: 1..=16, // TODO:
current_extent,
extents: window::Extent2D {
width: 16,
height: 16,
} ..= window::Extent2D {
}..=window::Extent2D {
width: 4096,
height: 4096,
},
Expand Down Expand Up @@ -2228,7 +2230,7 @@ impl command::CommandBuffer<Backend> for CommandBuffer {
unimplemented!()
}

unsafe fn draw_mesh_tasks(&mut self, _: u32, _: u32) {
unsafe fn draw_mesh_tasks(&mut self, _: TaskCount, _: TaskOffset) {
unimplemented!()
}

Expand All @@ -2248,7 +2250,7 @@ impl command::CommandBuffer<Backend> for CommandBuffer {
_: buffer::Offset,
_: &Buffer,
_: buffer::Offset,
_: u32,
_: hal::DrawCount,
_: u32,
) {
unimplemented!()
Expand Down
6 changes: 4 additions & 2 deletions src/backend/dx12/src/command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ use hal::{
InstanceCount,
VertexCount,
VertexOffset,
TaskCount,
TaskOffset,
WorkGroupCount,
};

Expand Down Expand Up @@ -2505,7 +2507,7 @@ impl com::CommandBuffer<Backend> for CommandBuffer {
);
}

unsafe fn draw_mesh_tasks(&mut self, _: u32, _: u32) {
unsafe fn draw_mesh_tasks(&mut self, _: TaskCount, _: TaskOffset) {
unimplemented!()
}

Expand All @@ -2525,7 +2527,7 @@ impl com::CommandBuffer<Backend> for CommandBuffer {
_: buffer::Offset,
_: &r::Buffer,
_: buffer::Offset,
_: u32,
_: DrawCount,
_: u32,
) {
unimplemented!()
Expand Down
27 changes: 16 additions & 11 deletions src/backend/dx12/src/device.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1790,22 +1790,27 @@ impl d::Device<B> for Device {
}
};

let ps = build_shader(pso::Stage::Fragment, desc.shaders.fragment.as_ref())?;
let ps = build_shader(pso::Stage::Fragment, desc.fragment.as_ref())?;

match desc.primitive_assembler {
pso::PrimitiveAssembler::Vertex {
ref buffers,
ref attributes,
ref input_assembler,
ref vertex,
ref tessellation,
ref geometry,
} => {
let vs = match build_shader(pso::Stage::Vertex, desc.shaders.vertex.as_ref())? {
ShaderBc::Owned(blob) => Ok(ShaderBc::Owned(blob)),
ShaderBc::Borrowed(blob) => Ok(ShaderBc::Borrowed(blob)),
ShaderBc::None => Err(pso::CreationError::VertexShaderMissing),
}?;
let gs = build_shader(pso::Stage::Geometry, desc.shaders.geometry.as_ref())?;
let ds = build_shader(pso::Stage::Domain, desc.shaders.domain.as_ref())?;
let hs = build_shader(pso::Stage::Hull, desc.shaders.hull.as_ref())?;
let (hs, ds) = if let Some(ts) = tessellation {
(Some(&ts.0), Some(&ts.1))
} else {
(None, None)
};

let vs = build_shader(pso::Stage::Vertex, Some(vertex))?;
let gs = build_shader(pso::Stage::Geometry, geometry.as_ref())?;
let hs = build_shader(pso::Stage::Domain, hs)?;
let ds = build_shader(pso::Stage::Hull, ds)?;

// Rebind vertex buffers, see native.rs for more details.
let mut vertex_bindings = [None; MAX_VERTEX_BUFFERS];
Expand Down Expand Up @@ -3298,8 +3303,8 @@ impl d::Device<B> for Device {
const WAIT_OBJECT_LAST: u32 = winbase::WAIT_OBJECT_0 + winnt::MAXIMUM_WAIT_OBJECTS;
const WAIT_ABANDONED_LAST: u32 = winbase::WAIT_ABANDONED_0 + winnt::MAXIMUM_WAIT_OBJECTS;
match hr {
winbase::WAIT_OBJECT_0 ..= WAIT_OBJECT_LAST => Ok(true),
winbase::WAIT_ABANDONED_0 ..= WAIT_ABANDONED_LAST => Ok(true), //TODO?
winbase::WAIT_OBJECT_0..=WAIT_OBJECT_LAST => Ok(true),
winbase::WAIT_ABANDONED_0..=WAIT_ABANDONED_LAST => Ok(true), //TODO?
winerror::WAIT_TIMEOUT => Ok(false),
_ => panic!("Unexpected wait status 0x{:X}", hr),
}
Expand Down
4 changes: 2 additions & 2 deletions src/backend/dx12/src/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,12 @@ impl w::Surface<Backend> for Surface {
w::SurfaceCapabilities {
present_modes: w::PresentMode::FIFO, //TODO
composite_alpha_modes: w::CompositeAlphaMode::OPAQUE, //TODO
image_count: 2 ..= 16, // we currently use a flip effect which supports 2..=16 buffers
image_count: 2..=16, // we currently use a flip effect which supports 2..=16 buffers
current_extent,
extents: w::Extent2D {
width: 16,
height: 16,
} ..= w::Extent2D {
}..=w::Extent2D {
width: 4096,
height: 4096,
},
Expand Down
Loading

0 comments on commit 01601ad

Please # to comment.