Skip to content

Commit 3de1c79

Browse files
authored
Merge pull request #39 from lambda-sh/vmarcella/refactoring-and-testing
Code cleanup & adding tests
2 parents da3d646 + 8bb176f commit 3de1c79

19 files changed

Lines changed: 662 additions & 389 deletions

File tree

.github/workflows/compile_lambda_rs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
rustup default ${{ matrix.rustup-toolchain }}
4848
4949
- name: Build Lambda & other default workspace members.
50-
run: cargo build
50+
run: cargo test --all
5151

5252
- uses: actions/setup-ruby@v1
5353
- name: Send Webhook Notification for build status.

Cargo.lock

Lines changed: 125 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ members = [
99

1010
default-members = [
1111
"lambda",
12+
"crates/lambda-platform",
1213
"tools/lambda_rs_demo"
1314
]

crates/lambda-platform/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ gfx-backend-vulkan = { version="=0.9.0", optional = true }
2020
gfx-backend-dx11 = { version="=0.9.0", optional = true }
2121
gfx-backend-dx12 = { version="=0.9.0", optional = true }
2222

23+
[dev-dependencies]
24+
mockall = "=0.11.2"
25+
2326
[features]
2427
default=["shaderc/build-from-source"]
2528
detect-platform=[]

crates/lambda-platform/src/gfx/api.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
//! GPU API exports to set the platforms primary rendering API for rendering
2+
//! implementations to use.
3+
14
cfg_if::cfg_if! {
25
if #[cfg(feature = "with-gl")] {
36
pub use gfx_backend_gl as RenderingAPI;
Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,6 @@
1-
pub mod internal {
2-
pub use gfx_hal::{
3-
pso::{
4-
EntryPoint,
5-
InputAssemblerDesc,
6-
Primitive,
7-
PrimitiveAssemblerDesc,
8-
},
9-
Backend,
10-
};
1+
//! Primitive assembly for the graphics pipeline.
112
12-
#[inline]
13-
pub fn into_primitive_assembler<'shader, RenderBackend: Backend>(
14-
primitive_assembler: super::PrimitiveAssembler<'shader, RenderBackend>,
15-
) -> PrimitiveAssemblerDesc<'shader, RenderBackend> {
16-
return primitive_assembler.primitive_assembler;
17-
}
18-
}
3+
use gfx_hal::pso;
194

205
/// PrimitiveAssemblerBuilder for preparing PrimitiveAssemblers to use in the
216
/// lambda-platform Rendering pipeline.
@@ -32,14 +17,13 @@ impl PrimitiveAssemblerBuilder {
3217
self,
3318
vertex_shader: &'shader super::shader::ShaderModule<RenderBackend>,
3419
) -> PrimitiveAssembler<'shader, RenderBackend> {
35-
// TODO(vmarcella): The builder should expose more fields for the
36-
let primitive_assembler = internal::PrimitiveAssemblerDesc::Vertex {
20+
let primitive_assembler = pso::PrimitiveAssemblerDesc::Vertex {
3721
buffers: &[],
3822
attributes: &[],
39-
input_assembler: internal::InputAssemblerDesc::new(
40-
internal::Primitive::TriangleList,
23+
input_assembler: pso::InputAssemblerDesc::new(
24+
pso::Primitive::TriangleList,
4125
),
42-
vertex: internal::EntryPoint {
26+
vertex: pso::EntryPoint {
4327
entry: vertex_shader.entry(),
4428
module: super::internal::module_for(vertex_shader),
4529
specialization: vertex_shader.specializations().clone(),
@@ -57,11 +41,22 @@ impl PrimitiveAssemblerBuilder {
5741
/// PrimitiveAssembler for used for describing how Vertex Shaders should
5842
/// construct primitives. Each constructed Primitive Assembler should be alive
5943
/// for as long as the shader module that created it is.
60-
pub struct PrimitiveAssembler<'shader, RenderBackend: internal::Backend> {
61-
primitive_assembler: internal::PrimitiveAssemblerDesc<'shader, RenderBackend>,
44+
pub struct PrimitiveAssembler<'shader, RenderBackend: gfx_hal::Backend> {
45+
primitive_assembler: pso::PrimitiveAssemblerDesc<'shader, RenderBackend>,
6246
}
6347

64-
impl<'shader, RenderBackend: internal::Backend>
48+
impl<'shader, RenderBackend: gfx_hal::Backend>
6549
PrimitiveAssembler<'shader, RenderBackend>
6650
{
6751
}
52+
53+
/// Internal functions for the primitive assembler. User applications most
54+
/// likely should not use these functions directly nor should they need to.
55+
pub mod internal {
56+
#[inline]
57+
pub fn into_primitive_assembler<'shader, RenderBackend: gfx_hal::Backend>(
58+
primitive_assembler: super::PrimitiveAssembler<'shader, RenderBackend>,
59+
) -> gfx_hal::pso::PrimitiveAssemblerDesc<'shader, RenderBackend> {
60+
return primitive_assembler.primitive_assembler;
61+
}
62+
}

crates/lambda-platform/src/gfx/fence.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
//! GPU fence & semaphore implementations for rendering synchronizations. These
2+
//! implementations built on top of gfx-hal and are used by the lambda-platform
3+
//! rendering implementations to synchronize GPU operations.
4+
15
use gfx_hal::device::Device;
26

37
pub struct RenderSemaphoreBuilder {}
@@ -7,6 +11,8 @@ impl RenderSemaphoreBuilder {
711
return Self {};
812
}
913

14+
/// Builds a new render semaphore using the provided GPU. This semaphore can
15+
/// only be used with the GPU that it was created with.
1016
pub fn build<RenderBackend: gfx_hal::Backend>(
1117
self,
1218
gpu: &mut super::gpu::Gpu<RenderBackend>,
@@ -18,6 +24,7 @@ impl RenderSemaphoreBuilder {
1824
return RenderSemaphore { semaphore };
1925
}
2026
}
27+
2128
pub struct RenderSemaphore<RenderBackend: gfx_hal::Backend> {
2229
semaphore: RenderBackend::Semaphore,
2330
}
@@ -36,6 +43,8 @@ pub struct RenderSubmissionFenceBuilder {
3643
}
3744

3845
impl RenderSubmissionFenceBuilder {
46+
/// Creates a new Render Submission Fence Builder that defaults to a 1 second
47+
/// timeout for waiting on the fence.
3948
pub fn new() -> Self {
4049
return Self {
4150
default_render_timeout: 1_000_000_000,
@@ -49,6 +58,8 @@ impl RenderSubmissionFenceBuilder {
4958
return self;
5059
}
5160

61+
/// Builds a new submission fence using the provided GPU. This fence can only
62+
/// be used to block operation on the GPU that created it.
5263
pub fn build<RenderBackend: gfx_hal::Backend>(
5364
self,
5465
gpu: &mut super::gpu::Gpu<RenderBackend>,

0 commit comments

Comments
 (0)