discard!
Discards the current fragment. In WGSL this emits discard;; on CPU it sets a thread-local flag.
Syntax
#![allow(unused)] fn main() { discard!(); }
Behavior
- In WGSL, transpiles to
discard;and stops further output for the fragment. - On CPU, sets a thread-local flag that
dispatch_fragmentschecks; execution continues after the call, matching WGSL's helper-invocation semantics.
Reachable From
discard!() may be called from any function reachable from a #[fragment] entry point, including helper functions.
Example
#![allow(unused)] fn main() { #[wgsl] pub mod alpha { use wgsl_rs::std::*; texture!(group(0), binding(0), MASK: Texture2D<f32>); sampler!(group(0), binding(1), LIN: Sampler); pub fn threshold(uv: Vec2f, min: f32) { let a = texture_sample(MASK, LIN, uv).x(); if a < min { discard!(); } } #[fragment] pub fn fs_main(#[location(0)] uv: Vec2f) -> Vec4f { threshold(uv, 0.5); vec4f(1.0, 0.0, 0.0, 1.0) } } }
Notes
- Execution after
discard!()continues on the CPU side, so code following the call still runs. Guard any side effects accordingly. discard!()is only valid inside fragment shaders. Calling it from a compute or vertex entry point is a validation error.