diff --git a/.gitignore b/.gitignore index c54b2e1..9d74783 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,6 @@ .vscode .idea dist +dist2d +dist3d assets/**/*.bin \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index d3f288c..a8a5ae8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,10 @@ [workspace] members = [ - "crates/wgsparkl-testbed2d", "crates/wgsparkl-testbed3d", "crates/wgsparkl2d", "crates/wgsparkl3d"] + "crates/wgsparkl-testbed2d", + "crates/wgsparkl-testbed3d", + "crates/wgsparkl2d", + "crates/wgsparkl3d", +] resolver = "2" [workspace.dependencies] @@ -15,7 +19,7 @@ encase = { version = "0.10.0", features = ["nalgebra"] } [workspace.lints] rust.unexpected_cfgs = { level = "warn", check-cfg = [ - 'cfg(feature, values("dim2", "dim3"))' + 'cfg(feature, values("dim2", "dim3"))', ] } [patch.crates-io] diff --git a/build_wasm.sh b/build_wasm.sh index 46f5c5d..8b2f27d 100755 --- a/build_wasm.sh +++ b/build_wasm.sh @@ -5,4 +5,7 @@ cargo build --example elasticity3 --release --target wasm32-unknown-unknown --fe wasm-bindgen --no-typescript --target web --out-dir dist2d --out-name elasticity2 ./target/wasm32-unknown-unknown/release/examples/elasticity2.wasm wasm-bindgen --no-typescript --target web --out-dir dist3d --out-name elasticity3 ./target/wasm32-unknown-unknown/release/examples/elasticity3.wasm wasm-opt -Oz -o ./dist2d/opt.wasm ./dist2d/elasticity2_bg.wasm && mv ./dist2d/opt.wasm ./dist2d/elasticity2_bg.wasm -wasm-opt -Oz -o ./dist3d/opt.wasm ./dist3d/elasticity3_bg.wasm && mv ./dist3d/opt.wasm ./dist3d/elasticity3_bg.wasm \ No newline at end of file +wasm-opt -Oz -o ./dist3d/opt.wasm ./dist3d/elasticity3_bg.wasm && mv ./dist3d/opt.wasm ./dist3d/elasticity3_bg.wasm + +brotli ./dist2d/elasticity2_bg.wasm && mv ./dist2d/elasticity2_bg.wasm.br ./dist2d/elasticity2_bg.wasm +brotli ./dist3d/elasticity3_bg.wasm && mv ./dist3d/elasticity3_bg.wasm.br ./dist3d/elasticity3_bg.wasm \ No newline at end of file diff --git a/src/grid/grid.rs b/src/grid/grid.rs index be9df99..00963ca 100644 --- a/src/grid/grid.rs +++ b/src/grid/grid.rs @@ -1,6 +1,6 @@ use crate::dim_shader_defs; use crate::grid::prefix_sum::{PrefixSumWorkspace, WgPrefixSum}; -use crate::grid::sort::{TouchParticleBlocks, WgSort}; +use crate::grid::sort::WgSort; use crate::solver::{GpuParticles, WgParams}; use naga_oil::compose::NagaModuleDescriptor; use std::sync::Arc; @@ -10,6 +10,9 @@ use wgcore::{utils, Shader}; use wgpu::util::DispatchIndirectArgs; use wgpu::{Buffer, BufferAddress, BufferDescriptor, BufferUsages, ComputePipeline, Device}; +#[cfg(target_os = "macos")] +use crate::grid::sort::TouchParticleBlocks; + #[derive(Shader)] #[shader(derive(WgParams), src = "grid.wgsl", shader_defs = "dim_shader_defs")] pub struct WgGrid { @@ -26,8 +29,7 @@ impl WgGrid { grid: &GpuGrid, prefix_sum: &mut PrefixSumWorkspace, sort_module: &'a WgSort, - #[cfg(target_os = "macos")] - touch_particle_blocks: &'a TouchParticleBlocks, + #[cfg(target_os = "macos")] touch_particle_blocks: &'a TouchParticleBlocks, prefix_sum_module: &'a WgPrefixSum, queue: &mut KernelInvocationQueue<'a>, ) { diff --git a/src/grid/sort.rs b/src/grid/sort.rs index 0c42a54..85560d7 100644 --- a/src/grid/sort.rs +++ b/src/grid/sort.rs @@ -25,6 +25,7 @@ pub struct TouchParticleBlocks { pub(crate) touch_particle_blocks: ComputePipeline, } +#[cfg(target_os = "macos")] impl TouchParticleBlocks { pub fn from_device(device: &wgpu::Device) -> Self { #[cfg(feature = "dim2")] diff --git a/src/pipeline.rs b/src/pipeline.rs index 2556eb2..9404d70 100644 --- a/src/pipeline.rs +++ b/src/pipeline.rs @@ -1,6 +1,6 @@ use crate::grid::grid::{GpuGrid, WgGrid}; use crate::grid::prefix_sum::{PrefixSumWorkspace, WgPrefixSum}; -use crate::grid::sort::{TouchParticleBlocks, WgSort}; +use crate::grid::sort::WgSort; use crate::models::GpuModels; use crate::solver::{ GpuParticles, GpuSimulationParams, Particle, SimulationParams, WgG2P, WgGridUpdate, WgP2G, @@ -13,6 +13,9 @@ use wgcore::Shader; use wgpu::Device; use wgrapier::dynamics::{BodyDesc, GpuBodySet, WgIntegrate}; +#[cfg(target_os = "macos")] +use crate::grid::sort::TouchParticleBlocks; + pub struct MpmPipeline { grid: WgGrid, prefix_sum: WgPrefixSum,