Skip to content

[naga]: Add no_std polyfill for round_ties_even for f32 and f64 #7585

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: trunk
Choose a base branch
from

Conversation

bushrat011899
Copy link
Contributor

@bushrat011899 bushrat011899 commented Apr 21, 2025

Connections

Description

  • Generalizes the round_ties_even f16 polyfill for f32 and f64 using num_traits::float::FloatCore, specifically for no_std support
  • Adds naga to the Check no_std CI action now that it is MVP compatible

Testing

  • CI

Squash or Rebase?

Squash

Checklist

  • Run cargo fmt.
  • Run taplo format. N/A
  • Run cargo clippy --tests. If applicable, add:
    • --target wasm32-unknown-unknown
  • Run cargo xtask test to run tests.
  • If this contains user-facing changes, add a CHANGELOG.md entry.

Notes

  • I haven't added a feature to switch back to f32::round_ties_even or f64::round_ties_even, since I don't believe there is substantial value added with such a feature.
  • I have not added tests for the implementation, since it is based on the existing f16 polyfill. However, there are substantial tests for this exact method in this num-traits PR I opened. This PR would just allow us to continue working on no_std support while we wait for that PR to be accepted (or not).

@bushrat011899 bushrat011899 requested a review from a team as a code owner April 21, 2025 10:05
@bushrat011899 bushrat011899 changed the title Add no_std polyfill for round_ties_even for f32 and f64 [naga]: Add no_std polyfill for round_ties_even for f32 and f64 Apr 21, 2025
@ErichDonGubler ErichDonGubler self-assigned this Apr 21, 2025
@cwfitzgerald
Copy link
Member

cwfitzgerald commented Apr 25, 2025

This PR will actually fix cargo check -p naga, whcih is broken

# Check with all features except "std".
cargo clippy --target ${{ matrix.target }} ${{ matrix.extra-flags }} -p wgpu-types --no-default-features --features strict_asserts,fragile-send-sync-non-atomic-wasm,serde,counters
cargo clippy --target ${{ matrix.target }} ${{ matrix.extra-flags }} -p naga --no-default-features --features dot-out,compact
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment isn't correct for naga - I think you should pull them out into their own lines instead of attaching them.

/// <https://github.com/rust-lang/rust/issues/96710>.
///
/// [polyfill source]: https://github.com/imeka/ndarray-ndimage/blob/8b14b4d6ecfbc96a8a052f802e342a7049c68d8f/src/lib.rs#L98
fn round_ties_even<T: num_traits::float::FloatCore>(x: T) -> T {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am really worried about the precision of this. wgsl requires perfect rounding. When it was only used for f16 (using f64 internals) it had a ton of excess precision. But using f64 on f64 I really worry about this.

I think it would be better to take a dep on libm and call rint/rintf which use a slightly different algorithm.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants