Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions demo/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ rafx-empty = ["rafx/rafx-empty"]
rafx-vulkan = ["rafx/rafx-vulkan"]
rafx-metal = ["rafx/rafx-metal"]
rafx-gles2 = ["rafx/rafx-gles2"]
rafx-gles3 = ["rafx/rafx-gles3"]
sdl2-bundled = ["sdl2/bundled"]
sdl2-static-link = ["sdl2/static-link"]
static-vulkan = ["rafx/static-vulkan"]
Expand Down
6 changes: 5 additions & 1 deletion demo/assets/materials/depth.material
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@
shader_module: "../shaders/depth.vert.cookedshaderpackage",
entry_name: "main"
),
// No fragment shader required
(
stage: Fragment,
shader_module: "../shaders/depth.frag.cookedshaderpackage",
entry_name: "main"
),
],
)
]
Expand Down
Binary file modified demo/assets/shaders/bloom_blur.frag.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/bloom_combine.frag.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/bloom_extract.frag.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/debug.frag.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/debug.vert.cookedshaderpackage
Binary file not shown.
Binary file not shown.
5 changes: 5 additions & 0 deletions demo/assets/shaders/depth.frag.cookedshaderpackage.meta
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
(
version: 2,
importer_options: (),
importer_state: (Some("e45ea58c-757a-4d22-8e78-a3769aa16e1c")),
)
Binary file modified demo/assets/shaders/depth.vert.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/imgui.frag.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/imgui.vert.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/mesh.frag.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/mesh.vert.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/postprocess.vert.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/skybox.frag.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/skybox.vert.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/sprite.frag.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/sprite.vert.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/text.frag.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/text.vert.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/tile_layer.frag.cookedshaderpackage
Binary file not shown.
Binary file modified demo/assets/shaders/tile_layer.vert.cookedshaderpackage
Binary file not shown.
1 change: 1 addition & 0 deletions demo/shaders/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ default = []
rafx-vulkan = ["rafx-framework/rafx-vulkan"]
rafx-metal = ["rafx-framework/rafx-metal"]
rafx-gles2 = ["rafx-framework/rafx-gles2"]
rafx-gles3 = ["rafx-framework/rafx-gles2"]

[dev-dependencies]
memoffset = "0.6"
4 changes: 2 additions & 2 deletions demo/shaders/compile_shaders.bat
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ setlocal
cd /D "%~dp0"

cargo run --package rafx-shader-processor -- ^
--glsl-path glsl/*.vert glsl/*.frag glsl/*.comp ^
--glsl-path glsl/*.vert glsl/*.frag ^
--rs-path src ^
--metal-generated-src-path generated_msl ^
--cooked-shaders-path ../assets/shaders ^
--package-vk ^
--package-metal ^
&& cargo fmt && cargo test --package shaders
--package-gles3 && cargo fmt && cargo test --package shaders
30 changes: 30 additions & 0 deletions demo/shaders/generated_msl/depth.frag.metal
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include <metal_stdlib>
#include <simd/simd.h>

using namespace metal;

struct PerViewData
{
float4x4 view;
float4x4 view_proj;
};

struct PerObjectData
{
float4x4 model;
};

struct spvDescriptorSetBuffer0
{
constant PerViewData* per_view_data [[id(0)]];
};

struct spvDescriptorSetBuffer2
{
constant PerObjectData* per_object_data [[id(0)]];
};

fragment void main0(constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]], constant spvDescriptorSetBuffer2& spvDescriptorSet2 [[buffer(2)]])
{
}

34 changes: 0 additions & 34 deletions demo/shaders/glsl/compute_test.comp

This file was deleted.

9 changes: 9 additions & 0 deletions demo/shaders/glsl/depth.frag
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#version 450
#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_shading_language_420pack : enable

#include "depth.glsl"

void main() {

}
226 changes: 226 additions & 0 deletions demo/shaders/src/depth_frag.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
// This code is auto-generated by the shader processor.

#[allow(unused_imports)]
use rafx_framework::RafxResult;

#[allow(unused_imports)]
use rafx_framework::{
DescriptorSetAllocator, DescriptorSetArc, DescriptorSetBindings, DescriptorSetInitializer,
DescriptorSetWriter, DescriptorSetWriterContext, DynDescriptorSet, ImageViewResource,
ResourceArc,
};

#[derive(Copy, Clone, Debug)]
#[repr(C)]
pub struct PerObjectDataStd140 {
pub model: [[f32; 4]; 4], // +0 (size: 64)
} // 64 bytes

impl Default for PerObjectDataStd140 {
fn default() -> Self {
PerObjectDataStd140 {
model: <[[f32; 4]; 4]>::default(),
}
}
}

pub type PerObjectDataUniform = PerObjectDataStd140;

#[derive(Copy, Clone, Debug)]
#[repr(C)]
pub struct PerViewDataStd140 {
pub view: [[f32; 4]; 4], // +0 (size: 64)
pub view_proj: [[f32; 4]; 4], // +64 (size: 64)
} // 128 bytes

impl Default for PerViewDataStd140 {
fn default() -> Self {
PerViewDataStd140 {
view: <[[f32; 4]; 4]>::default(),
view_proj: <[[f32; 4]; 4]>::default(),
}
}
}

pub type PerViewDataUniform = PerViewDataStd140;

pub const PER_VIEW_DATA_DESCRIPTOR_SET_INDEX: usize = 0;
pub const PER_VIEW_DATA_DESCRIPTOR_BINDING_INDEX: usize = 0;
pub const PER_OBJECT_DATA_DESCRIPTOR_SET_INDEX: usize = 2;
pub const PER_OBJECT_DATA_DESCRIPTOR_BINDING_INDEX: usize = 0;

pub struct DescriptorSet0Args<'a> {
pub per_view_data: &'a PerViewDataUniform,
}

impl<'a> DescriptorSetInitializer<'a> for DescriptorSet0Args<'a> {
type Output = DescriptorSet0;

fn create_dyn_descriptor_set(
descriptor_set: DynDescriptorSet,
args: Self,
) -> Self::Output {
let mut descriptor = DescriptorSet0(descriptor_set);
descriptor.set_args(args);
descriptor
}

fn create_descriptor_set(
descriptor_set_allocator: &mut DescriptorSetAllocator,
descriptor_set: DynDescriptorSet,
args: Self,
) -> RafxResult<DescriptorSetArc> {
let mut descriptor = Self::create_dyn_descriptor_set(descriptor_set, args);
descriptor.0.flush(descriptor_set_allocator)?;
Ok(descriptor.0.descriptor_set().clone())
}
}

impl<'a> DescriptorSetWriter<'a> for DescriptorSet0Args<'a> {
fn write_to(
descriptor_set: &mut DescriptorSetWriterContext,
args: Self,
) {
descriptor_set.set_buffer_data(
PER_VIEW_DATA_DESCRIPTOR_BINDING_INDEX as u32,
args.per_view_data,
);
}
}

pub struct DescriptorSet0(pub DynDescriptorSet);

impl DescriptorSet0 {
pub fn set_args_static(
descriptor_set: &mut DynDescriptorSet,
args: DescriptorSet0Args,
) {
descriptor_set.set_buffer_data(
PER_VIEW_DATA_DESCRIPTOR_BINDING_INDEX as u32,
args.per_view_data,
);
}

pub fn set_args(
&mut self,
args: DescriptorSet0Args,
) {
self.set_per_view_data(args.per_view_data);
}

pub fn set_per_view_data(
&mut self,
per_view_data: &PerViewDataUniform,
) {
self.0
.set_buffer_data(PER_VIEW_DATA_DESCRIPTOR_BINDING_INDEX as u32, per_view_data);
}

pub fn flush(
&mut self,
descriptor_set_allocator: &mut DescriptorSetAllocator,
) -> RafxResult<()> {
self.0.flush(descriptor_set_allocator)
}
}

pub struct DescriptorSet2Args<'a> {
pub per_object_data: &'a PerObjectDataUniform,
}

impl<'a> DescriptorSetInitializer<'a> for DescriptorSet2Args<'a> {
type Output = DescriptorSet2;

fn create_dyn_descriptor_set(
descriptor_set: DynDescriptorSet,
args: Self,
) -> Self::Output {
let mut descriptor = DescriptorSet2(descriptor_set);
descriptor.set_args(args);
descriptor
}

fn create_descriptor_set(
descriptor_set_allocator: &mut DescriptorSetAllocator,
descriptor_set: DynDescriptorSet,
args: Self,
) -> RafxResult<DescriptorSetArc> {
let mut descriptor = Self::create_dyn_descriptor_set(descriptor_set, args);
descriptor.0.flush(descriptor_set_allocator)?;
Ok(descriptor.0.descriptor_set().clone())
}
}

impl<'a> DescriptorSetWriter<'a> for DescriptorSet2Args<'a> {
fn write_to(
descriptor_set: &mut DescriptorSetWriterContext,
args: Self,
) {
descriptor_set.set_buffer_data(
PER_OBJECT_DATA_DESCRIPTOR_BINDING_INDEX as u32,
args.per_object_data,
);
}
}

pub struct DescriptorSet2(pub DynDescriptorSet);

impl DescriptorSet2 {
pub fn set_args_static(
descriptor_set: &mut DynDescriptorSet,
args: DescriptorSet2Args,
) {
descriptor_set.set_buffer_data(
PER_OBJECT_DATA_DESCRIPTOR_BINDING_INDEX as u32,
args.per_object_data,
);
}

pub fn set_args(
&mut self,
args: DescriptorSet2Args,
) {
self.set_per_object_data(args.per_object_data);
}

pub fn set_per_object_data(
&mut self,
per_object_data: &PerObjectDataUniform,
) {
self.0.set_buffer_data(
PER_OBJECT_DATA_DESCRIPTOR_BINDING_INDEX as u32,
per_object_data,
);
}

pub fn flush(
&mut self,
descriptor_set_allocator: &mut DescriptorSetAllocator,
) -> RafxResult<()> {
self.0.flush(descriptor_set_allocator)
}
}

#[cfg(test)]
mod test {
use super::*;

#[test]
fn test_struct_per_object_data_std140() {
assert_eq!(std::mem::size_of::<PerObjectDataStd140>(), 64);
assert_eq!(std::mem::size_of::<[[f32; 4]; 4]>(), 64);
assert_eq!(std::mem::align_of::<[[f32; 4]; 4]>(), 4);
assert_eq!(memoffset::offset_of!(PerObjectDataStd140, model), 0);
}

#[test]
fn test_struct_per_view_data_std140() {
assert_eq!(std::mem::size_of::<PerViewDataStd140>(), 128);
assert_eq!(std::mem::size_of::<[[f32; 4]; 4]>(), 64);
assert_eq!(std::mem::align_of::<[[f32; 4]; 4]>(), 4);
assert_eq!(memoffset::offset_of!(PerViewDataStd140, view), 0);
assert_eq!(std::mem::size_of::<[[f32; 4]; 4]>(), 64);
assert_eq!(std::mem::align_of::<[[f32; 4]; 4]>(), 4);
assert_eq!(memoffset::offset_of!(PerViewDataStd140, view_proj), 64);
}
}
2 changes: 1 addition & 1 deletion demo/shaders/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
pub mod bloom_blur_frag;
pub mod bloom_combine_frag;
pub mod bloom_extract_frag;
pub mod compute_test_comp;
pub mod debug_frag;
pub mod debug_vert;
pub mod depth_frag;
pub mod depth_vert;
pub mod imgui_frag;
pub mod imgui_vert;
Expand Down
3 changes: 0 additions & 3 deletions demo/src/assets/ldtk/importer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -325,9 +325,6 @@ impl Importer for LdtkImporter {

*stable_state = unstable_state.into();

println!("state: {:#?}", stable_state);
println!("imported assets: {}", imported_assets.len());

Ok(ImporterValue {
assets: imported_assets,
})
Expand Down
Loading