Skip to content

Commit

Permalink
web linkage on wasm32 only
Browse files Browse the repository at this point in the history
  • Loading branch information
schell committed Nov 8, 2024
1 parent 2fbc4c5 commit f80c026
Show file tree
Hide file tree
Showing 28 changed files with 264 additions and 405 deletions.
53 changes: 8 additions & 45 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ glam = { version = "0.24.2", default-features = false }
gltf = { version = "1.4,1", features = ["KHR_lights_punctual", "KHR_materials_unlit", "KHR_materials_emissive_strength", "extras", "extensions"] }
image = "0.24"
log = "0.4"
naga = { version = "0.19", features = ["spv-in", "wgsl-out", "wgsl-in", "msl-out"] }
naga = { version = "22.1.0", features = ["spv-in", "wgsl-out", "wgsl-in", "msl-out"] }
pretty_assertions = "1.4.0"
proc-macro2 = { version = "1.0", features = ["span-locations"] }
rustc-hash = "1.1"
Expand All @@ -40,6 +40,7 @@ web-sys = "0.3"
winit = { version = "0.30" }
wgpu = "22.1.0"


[profile.dev]
opt-level = 1

Expand Down
5 changes: 1 addition & 4 deletions crates/renderling/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,8 @@ tutorial_slabbed_renderlet = []

wasm = ["wgpu/fragile-send-sync-non-atomic-wasm"]

[patch.crates-io]
spirv-std = { git = "https://github.com/Rust-GPU/rust-gpu" }

[build-dependencies]
naga = { version = "22.1", features = ["spv-in", "wgsl-out", "wgsl-in", "msl-out"] }
naga = {workspace = true}
pathdiff = "0.2.2"
quote = "1.0"
serde = {version = "1.0", features = ["derive"]}
Expand Down
27 changes: 10 additions & 17 deletions crates/renderling/src/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,53 +25,46 @@ impl core::fmt::Display for Linkage {
wgsl_entry_point,
} = self;

let fn_name = self.fn_name();

let quote = quote! {
use crate::linkage::ShaderLinkage;

mod native {
#[cfg(not(target_arch = "wasm32"))]
mod target {
pub const ENTRY_POINT: &str = #entry_point;

pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> {
wgpu::include_spirv!(#spv_include_source_path)
}

pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage {
log::info!("creating native linkage for {}", #fn_name);
super::ShaderLinkage {
entry_point: ENTRY_POINT,
module: device.create_shader_module(descriptor()).into()
}
}
}

mod web {
#[cfg(target_arch = "wasm32")]
mod target {
pub const ENTRY_POINT: &str = #wgsl_entry_point;

pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> {
wgpu::include_spirv!(#wgsl_include_source_path)
wgpu::include_wgsl!(#wgsl_include_source_path)
}

pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage {
log::info!("creating web linkage for {}", #fn_name);
super::ShaderLinkage {
entry_point: ENTRY_POINT,
module: device.create_shader_module(descriptor()).into()
}
}
}

pub fn linkage_native(device: &wgpu::Device) -> ShaderLinkage {
native::linkage(device)
}

pub fn linkage_web(device: &wgpu::Device) -> ShaderLinkage {
web::linkage(device)
}

pub fn linkage(device: &wgpu::Device) -> ShaderLinkage {
if cfg!(feature = "wasm") {
web::linkage(device)
} else {
native::linkage(device)
}
target::linkage(device)
}
};

Expand Down
25 changes: 11 additions & 14 deletions crates/renderling/src/linkage/bloom_downsample_fragment.rs
Original file line number Diff line number Diff line change
@@ -1,40 +1,37 @@
#![allow(dead_code)]
//! Automatically generated by Renderling's `build.rs`.
use crate::linkage::ShaderLinkage;
mod native {
#[cfg(not(target_arch = "wasm32"))]
mod target {
pub const ENTRY_POINT: &str = "bloom::bloom_downsample_fragment";
pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> {
wgpu::include_spirv!("../../shaders/bloom-bloom_downsample_fragment.spv")
}
pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage {
log::info!(
"creating native linkage for {}",
"bloom_downsample_fragment"
);
super::ShaderLinkage {
entry_point: ENTRY_POINT,
module: device.create_shader_module(descriptor()).into(),
}
}
}
mod web {
#[cfg(target_arch = "wasm32")]
mod target {
pub const ENTRY_POINT: &str = "bloombloom_downsample_fragment";
pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> {
wgpu::include_spirv!("../../shaders/bloom-bloom_downsample_fragment.wgsl")
wgpu::include_wgsl!("../../shaders/bloom-bloom_downsample_fragment.wgsl")
}
pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage {
log::info!("creating web linkage for {}", "bloom_downsample_fragment");
super::ShaderLinkage {
entry_point: ENTRY_POINT,
module: device.create_shader_module(descriptor()).into(),
}
}
}
pub fn linkage_native(device: &wgpu::Device) -> ShaderLinkage {
native::linkage(device)
}
pub fn linkage_web(device: &wgpu::Device) -> ShaderLinkage {
web::linkage(device)
}
pub fn linkage(device: &wgpu::Device) -> ShaderLinkage {
if cfg!(feature = "wasm") {
web::linkage(device)
} else {
native::linkage(device)
}
target::linkage(device)
}
22 changes: 8 additions & 14 deletions crates/renderling/src/linkage/bloom_mix_fragment.rs
Original file line number Diff line number Diff line change
@@ -1,40 +1,34 @@
#![allow(dead_code)]
//! Automatically generated by Renderling's `build.rs`.
use crate::linkage::ShaderLinkage;
mod native {
#[cfg(not(target_arch = "wasm32"))]
mod target {
pub const ENTRY_POINT: &str = "bloom::bloom_mix_fragment";
pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> {
wgpu::include_spirv!("../../shaders/bloom-bloom_mix_fragment.spv")
}
pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage {
log::info!("creating native linkage for {}", "bloom_mix_fragment");
super::ShaderLinkage {
entry_point: ENTRY_POINT,
module: device.create_shader_module(descriptor()).into(),
}
}
}
mod web {
#[cfg(target_arch = "wasm32")]
mod target {
pub const ENTRY_POINT: &str = "bloombloom_mix_fragment";
pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> {
wgpu::include_spirv!("../../shaders/bloom-bloom_mix_fragment.wgsl")
wgpu::include_wgsl!("../../shaders/bloom-bloom_mix_fragment.wgsl")
}
pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage {
log::info!("creating web linkage for {}", "bloom_mix_fragment");
super::ShaderLinkage {
entry_point: ENTRY_POINT,
module: device.create_shader_module(descriptor()).into(),
}
}
}
pub fn linkage_native(device: &wgpu::Device) -> ShaderLinkage {
native::linkage(device)
}
pub fn linkage_web(device: &wgpu::Device) -> ShaderLinkage {
web::linkage(device)
}
pub fn linkage(device: &wgpu::Device) -> ShaderLinkage {
if cfg!(feature = "wasm") {
web::linkage(device)
} else {
native::linkage(device)
}
target::linkage(device)
}
22 changes: 8 additions & 14 deletions crates/renderling/src/linkage/bloom_upsample_fragment.rs
Original file line number Diff line number Diff line change
@@ -1,40 +1,34 @@
#![allow(dead_code)]
//! Automatically generated by Renderling's `build.rs`.
use crate::linkage::ShaderLinkage;
mod native {
#[cfg(not(target_arch = "wasm32"))]
mod target {
pub const ENTRY_POINT: &str = "bloom::bloom_upsample_fragment";
pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> {
wgpu::include_spirv!("../../shaders/bloom-bloom_upsample_fragment.spv")
}
pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage {
log::info!("creating native linkage for {}", "bloom_upsample_fragment");
super::ShaderLinkage {
entry_point: ENTRY_POINT,
module: device.create_shader_module(descriptor()).into(),
}
}
}
mod web {
#[cfg(target_arch = "wasm32")]
mod target {
pub const ENTRY_POINT: &str = "bloombloom_upsample_fragment";
pub fn descriptor() -> wgpu::ShaderModuleDescriptor<'static> {
wgpu::include_spirv!("../../shaders/bloom-bloom_upsample_fragment.wgsl")
wgpu::include_wgsl!("../../shaders/bloom-bloom_upsample_fragment.wgsl")
}
pub fn linkage(device: &wgpu::Device) -> super::ShaderLinkage {
log::info!("creating web linkage for {}", "bloom_upsample_fragment");
super::ShaderLinkage {
entry_point: ENTRY_POINT,
module: device.create_shader_module(descriptor()).into(),
}
}
}
pub fn linkage_native(device: &wgpu::Device) -> ShaderLinkage {
native::linkage(device)
}
pub fn linkage_web(device: &wgpu::Device) -> ShaderLinkage {
web::linkage(device)
}
pub fn linkage(device: &wgpu::Device) -> ShaderLinkage {
if cfg!(feature = "wasm") {
web::linkage(device)
} else {
native::linkage(device)
}
target::linkage(device)
}
Loading

0 comments on commit f80c026

Please sign in to comment.