From c32da78f2a6014c491aa3e975fb83ddb7c80610e Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Mon, 26 Apr 2021 17:59:25 +0200 Subject: Split rigid-bodies and colliders into multiple components --- src/dynamics/solver/parallel_solver_constraints.rs | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'src/dynamics/solver/parallel_solver_constraints.rs') diff --git a/src/dynamics/solver/parallel_solver_constraints.rs b/src/dynamics/solver/parallel_solver_constraints.rs index fcdcbff..dd1a19f 100644 --- a/src/dynamics/solver/parallel_solver_constraints.rs +++ b/src/dynamics/solver/parallel_solver_constraints.rs @@ -5,7 +5,7 @@ use crate::dynamics::solver::{ AnyJointPositionConstraint, AnyPositionConstraint, InteractionGroups, PositionConstraint, PositionGroundConstraint, VelocityConstraint, VelocityGroundConstraint, }; -use crate::dynamics::{IntegrationParameters, JointGraphEdge, RigidBodySet}; +use crate::dynamics::{IntegrationParameters, JointGraphEdge}; use crate::geometry::ContactManifold; #[cfg(feature = "simd-is-enabled")] use crate::{ @@ -20,7 +20,7 @@ use std::sync::atomic::Ordering; // pub fn init_constraint_groups( // &mut self, // island_id: usize, -// bodies: &RigidBodySet, +// bodies: &impl ComponentSet, // manifolds: &mut [&mut ContactManifold], // manifold_groups: &ParallelInteractionGroups, // joints: &mut [JointGraphEdge], @@ -36,9 +36,9 @@ pub(crate) enum ConstraintDesc { NongroundNongrouped(usize), GroundNongrouped(usize), #[cfg(feature = "simd-is-enabled")] - NongroundGrouped([usize; SIMD_WIDTH]), + NongroundGrouped([usize]), #[cfg(feature = "simd-is-enabled")] - GroundGrouped([usize; SIMD_WIDTH]), + GroundGrouped([usize]), } pub(crate) struct ParallelSolverConstraints { @@ -78,7 +78,7 @@ macro_rules! impl_init_constraints_group { pub fn init_constraint_groups( &mut self, island_id: usize, - bodies: &RigidBodySet, + bodies: &impl ComponentSet, interactions: &mut [$Interaction], interaction_groups: &ParallelInteractionGroups, ) { @@ -144,7 +144,7 @@ macro_rules! impl_init_constraints_group { self.constraint_descs.push(( total_num_constraints, ConstraintDesc::NongroundGrouped( - array![|ii| interaction_i[ii]; SIMD_WIDTH], + gather![|ii| interaction_i[ii]], ), )); total_num_constraints += $num_active_constraints(interaction); @@ -172,7 +172,7 @@ macro_rules! impl_init_constraints_group { self.constraint_descs.push(( total_num_constraints, ConstraintDesc::GroundGrouped( - array![|ii| interaction_i[ii]; SIMD_WIDTH], + gather![|ii| interaction_i[ii]], ), )); total_num_constraints += $num_active_constraints(interaction); @@ -223,7 +223,7 @@ impl ParallelSolverConstraints { &mut self, thread: &ThreadContext, params: &IntegrationParameters, - bodies: &RigidBodySet, + bodies: &impl ComponentSet, manifolds_all: &[&mut ContactManifold], ) { let descs = &self.constraint_descs; @@ -244,13 +244,13 @@ impl ParallelSolverConstraints { } #[cfg(feature = "simd-is-enabled")] ConstraintDesc::NongroundGrouped(manifold_id) => { - let manifolds = array![|ii| &*manifolds_all[manifold_id[ii]]; SIMD_WIDTH]; + let manifolds = gather![|ii| &*manifolds_all[manifold_id[ii]]]; WVelocityConstraint::generate(params, *manifold_id, manifolds, bodies, &mut self.velocity_constraints, false); WPositionConstraint::generate(params, manifolds, bodies, &mut self.position_constraints, false); } #[cfg(feature = "simd-is-enabled")] ConstraintDesc::GroundGrouped(manifold_id) => { - let manifolds = array![|ii| &*manifolds_all[manifold_id[ii]]; SIMD_WIDTH]; + let manifolds = gather![|ii| &*manifolds_all[manifold_id[ii]]]; WVelocityGroundConstraint::generate(params, *manifold_id, manifolds, bodies, &mut self.velocity_constraints, false); WPositionGroundConstraint::generate(params, manifolds, bodies, &mut self.position_constraints, false); } @@ -265,7 +265,7 @@ impl ParallelSolverConstraints, joints_all: &[JointGraphEdge], ) { let descs = &self.constraint_descs; @@ -290,7 +290,7 @@ impl ParallelSolverConstraints { - let joints = array![|ii| &joints_all[joint_id[ii]].weight; SIMD_WIDTH]; + let joints = gather![|ii| &joints_all[joint_id[ii]].weight]; let velocity_constraint = AnyJointVelocityConstraint::from_wide_joint(params, *joint_id, joints, bodies); let position_constraint = AnyJointPositionConstraint::from_wide_joint(joints, bodies); self.velocity_constraints[joints[0].constraint_index] = velocity_constraint; @@ -298,7 +298,7 @@ impl ParallelSolverConstraints { - let joints = array![|ii| &joints_all[joint_id[ii]].weight; SIMD_WIDTH]; + let joints = gather![|ii| &joints_all[joint_id[ii]].weight]; let velocity_constraint = AnyJointVelocityConstraint::from_wide_joint_ground(params, *joint_id, joints, bodies); let position_constraint = AnyJointPositionConstraint::from_wide_joint_ground(joints, bodies); self.velocity_constraints[joints[0].constraint_index] = velocity_constraint; -- cgit From 5cf805075ec8612249d692c319d099f4454931da Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Thu, 29 Apr 2021 11:42:44 +0200 Subject: Fix compilation of the parallel version --- src/dynamics/solver/parallel_solver_constraints.rs | 42 +++++++++++++++------- 1 file changed, 30 insertions(+), 12 deletions(-) (limited to 'src/dynamics/solver/parallel_solver_constraints.rs') diff --git a/src/dynamics/solver/parallel_solver_constraints.rs b/src/dynamics/solver/parallel_solver_constraints.rs index dd1a19f..6b00b73 100644 --- a/src/dynamics/solver/parallel_solver_constraints.rs +++ b/src/dynamics/solver/parallel_solver_constraints.rs @@ -1,11 +1,15 @@ use super::ParallelInteractionGroups; use super::{AnyJointVelocityConstraint, AnyVelocityConstraint, ThreadContext}; +use crate::data::ComponentSet; use crate::dynamics::solver::categorization::{categorize_contacts, categorize_joints}; use crate::dynamics::solver::{ AnyJointPositionConstraint, AnyPositionConstraint, InteractionGroups, PositionConstraint, PositionGroundConstraint, VelocityConstraint, VelocityGroundConstraint, }; -use crate::dynamics::{IntegrationParameters, JointGraphEdge}; +use crate::dynamics::{ + IntegrationParameters, IslandManager, JointGraphEdge, RigidBodyIds, RigidBodyMassProps, + RigidBodyPosition, RigidBodyType, RigidBodyVelocity, +}; use crate::geometry::ContactManifold; #[cfg(feature = "simd-is-enabled")] use crate::{ @@ -36,9 +40,9 @@ pub(crate) enum ConstraintDesc { NongroundNongrouped(usize), GroundNongrouped(usize), #[cfg(feature = "simd-is-enabled")] - NongroundGrouped([usize]), + NongroundGrouped([usize; SIMD_WIDTH]), #[cfg(feature = "simd-is-enabled")] - GroundGrouped([usize]), + GroundGrouped([usize; SIMD_WIDTH]), } pub(crate) struct ParallelSolverConstraints { @@ -75,13 +79,14 @@ macro_rules! impl_init_constraints_group { $data: ident$(.$constraint_index: ident)*, $num_active_constraints: path, $empty_velocity_constraint: expr, $empty_position_constraint: expr $(, $weight: ident)*) => { impl ParallelSolverConstraints<$VelocityConstraint, $PositionConstraint> { - pub fn init_constraint_groups( + pub fn init_constraint_groups( &mut self, island_id: usize, - bodies: &impl ComponentSet, + islands: &IslandManager, + bodies: &Bodies, interactions: &mut [$Interaction], interaction_groups: &ParallelInteractionGroups, - ) { + ) where Bodies: ComponentSet + ComponentSet { let mut total_num_constraints = 0; let num_groups = interaction_groups.num_groups(); @@ -113,12 +118,14 @@ macro_rules! impl_init_constraints_group { self.interaction_groups.$group( island_id, + islands, bodies, interactions, &self.not_ground_interactions, ); self.ground_interaction_groups.$group( island_id, + islands, bodies, interactions, &self.ground_interactions, @@ -219,13 +226,18 @@ impl_init_constraints_group!( ); impl ParallelSolverConstraints { - pub fn fill_constraints( + pub fn fill_constraints( &mut self, thread: &ThreadContext, params: &IntegrationParameters, - bodies: &impl ComponentSet, + bodies: &Bodies, manifolds_all: &[&mut ContactManifold], - ) { + ) where + Bodies: ComponentSet + + ComponentSet + + ComponentSet + + ComponentSet, + { let descs = &self.constraint_descs; crate::concurrent_loop! { @@ -261,13 +273,19 @@ impl ParallelSolverConstraints { } impl ParallelSolverConstraints { - pub fn fill_constraints( + pub fn fill_constraints( &mut self, thread: &ThreadContext, params: &IntegrationParameters, - bodies: &impl ComponentSet, + bodies: &Bodies, joints_all: &[JointGraphEdge], - ) { + ) where + Bodies: ComponentSet + + ComponentSet + + ComponentSet + + ComponentSet + + ComponentSet, + { let descs = &self.constraint_descs; crate::concurrent_loop! { -- cgit