refactor: use plural "clip distances" for cross-platform layers (#9267)

This commit is contained in:
Erich Gubler
2026-03-19 17:19:33 -06:00
committed by GitHub
parent 94ee0de5dc
commit b7de7886b4
23 changed files with 38 additions and 32 deletions

View File

@@ -42,6 +42,12 @@ Bottom level categories:
## Unreleased
### Changes
#### General
- `Features::CLIP_DISTANCE`, `naga::Capabilities::CLIP_DISTANCE`, and `naga::BuiltIn::ClipDistance` have been renamed to `CLIP_DISTANCES` and `ClipDistances` (viz., pluralized) as appropriate, to match the WebGPU spec. By @ErichDonGubler in [#9267](https://github.com/gfx-rs/wgpu/pull/9267).
### Bug Fixes
#### General

View File

@@ -76,7 +76,7 @@ pub(in crate::back::glsl) const fn glsl_built_in(
// vertex
Bi::BaseInstance => "uint(gl_BaseInstance)",
Bi::BaseVertex => "uint(gl_BaseVertex)",
Bi::ClipDistance => "gl_ClipDistance",
Bi::ClipDistances => "gl_ClipDistance",
Bi::CullDistance => "gl_CullDistance",
Bi::InstanceIndex => {
if options.draw_parameters {

View File

@@ -618,7 +618,7 @@ impl<W> Writer<'_, W> {
} else if let Some(binding) = binding {
match *binding {
Binding::BuiltIn(built_in) => match built_in {
crate::BuiltIn::ClipDistance => self.features.request(Features::CLIP_DISTANCE),
crate::BuiltIn::ClipDistances => self.features.request(Features::CLIP_DISTANCE),
crate::BuiltIn::CullDistance => self.features.request(Features::CULL_DISTANCE),
crate::BuiltIn::SampleIndex => {
self.features.request(Features::SAMPLE_VARIABLES)

View File

@@ -626,7 +626,7 @@ pub fn supported_capabilities() -> valid::Capabilities {
Caps::IMMEDIATES
| Caps::FLOAT64
| Caps::PRIMITIVE_INDEX
| Caps::CLIP_DISTANCE
| Caps::CLIP_DISTANCES
| Caps::MULTIVIEW
| Caps::EARLY_DEPTH_TEST
| Caps::MULTISAMPLED_SHADING

View File

@@ -1084,7 +1084,7 @@ impl<'a, W: Write> Writer<'a, W> {
}
}
}
crate::BuiltIn::ClipDistance => {
crate::BuiltIn::ClipDistances => {
// Re-declare `gl_ClipDistance` with number of clip planes.
let TypeInner::Array { size, .. } = self.module.types[ty].inner else {
unreachable!();

View File

@@ -153,7 +153,7 @@ impl crate::BuiltIn {
Ok(match self {
Self::Position { .. } => "SV_Position",
// vertex
Self::ClipDistance => "SV_ClipDistance",
Self::ClipDistances => "SV_ClipDistance",
Self::CullDistance => "SV_CullDistance",
Self::InstanceIndex => "SV_InstanceID",
Self::VertexIndex => "SV_VertexID",

View File

@@ -771,7 +771,7 @@ pub fn supported_capabilities() -> crate::valid::Capabilities {
| Caps::STORAGE_TEXTURE_BINDING_ARRAY
// No STORAGE_BUFFER_BINDING_ARRAY
| Caps::ACCELERATION_STRUCTURE_BINDING_ARRAY
// No CLIP_DISTANCE
// No CLIP_DISTANCES
// No CULL_DISTANCE
| Caps::STORAGE_TEXTURE_16BIT_NORM_FORMATS
| Caps::MULTIVIEW

View File

@@ -686,7 +686,7 @@ impl ResolvedBinding {
// vertex
Bi::BaseInstance => "base_instance",
Bi::BaseVertex => "base_vertex",
Bi::ClipDistance => "clip_distance",
Bi::ClipDistances => "clip_distance",
Bi::InstanceIndex => "instance_id",
Bi::PointSize => "point_size",
Bi::VertexIndex => "vertex_id",
@@ -841,7 +841,7 @@ pub fn supported_capabilities() -> crate::valid::Capabilities {
// No BUFFER_BINDING_ARRAY
| Caps::STORAGE_TEXTURE_BINDING_ARRAY
| Caps::STORAGE_BUFFER_BINDING_ARRAY
| Caps::CLIP_DISTANCE // CLIP_DISTANCE isn't supported by metal backend? But is supported by MSL writer
| Caps::CLIP_DISTANCES // CLIP_DISTANCES isn't supported by metal backend? But is supported by MSL writer
// No CULL_DISTANCE
| Caps::STORAGE_TEXTURE_16BIT_NORM_FORMATS
| Caps::MULTIVIEW

View File

@@ -1158,7 +1158,7 @@ pub fn supported_capabilities() -> crate::valid::Capabilities {
| Caps::STORAGE_TEXTURE_BINDING_ARRAY
| Caps::STORAGE_BUFFER_BINDING_ARRAY
| Caps::ACCELERATION_STRUCTURE_BINDING_ARRAY
| Caps::CLIP_DISTANCE
| Caps::CLIP_DISTANCES
// No cull distance
| Caps::STORAGE_TEXTURE_16BIT_NORM_FORMATS
| Caps::MULTIVIEW

View File

@@ -3071,9 +3071,9 @@ impl Writer {
// vertex
Bi::BaseInstance => BuiltIn::BaseInstance,
Bi::BaseVertex => BuiltIn::BaseVertex,
Bi::ClipDistance => {
Bi::ClipDistances => {
self.require_any(
"`clip_distance` built-in",
"`clip_distances` built-in",
&[spirv::Capability::ClipDistance],
)?;
BuiltIn::ClipDistance

View File

@@ -309,7 +309,7 @@ impl<W: Write> Writer<W> {
} => {
needed.dual_source_blending = true;
}
crate::Binding::BuiltIn(crate::BuiltIn::ClipDistance) => {
crate::Binding::BuiltIn(crate::BuiltIn::ClipDistances) => {
needed.clip_distances = true;
}
crate::Binding::BuiltIn(crate::BuiltIn::PrimitiveIndex) => {

View File

@@ -165,7 +165,7 @@ impl TryToWgsl for crate::BuiltIn {
Bi::ViewIndex => "view_index",
Bi::InstanceIndex => "instance_index",
Bi::VertexIndex => "vertex_index",
Bi::ClipDistance => "clip_distances",
Bi::ClipDistances => "clip_distances",
Bi::FragDepth => "frag_depth",
Bi::FrontFacing => "front_facing",
Bi::PrimitiveIndex => "primitive_index",

View File

@@ -189,7 +189,7 @@ impl Frontend {
stride: 4,
},
builtin: match name {
"gl_ClipDistance" => BuiltIn::ClipDistance,
"gl_ClipDistance" => BuiltIn::ClipDistances,
"gl_CullDistance" => BuiltIn::CullDistance,
_ => unreachable!(),
},

View File

@@ -136,7 +136,7 @@ pub(super) fn map_builtin(word: spirv::Word, invariant: bool) -> Result<crate::B
// vertex
Some(Bi::BaseInstance) => crate::BuiltIn::BaseInstance,
Some(Bi::BaseVertex) => crate::BuiltIn::BaseVertex,
Some(Bi::ClipDistance) => crate::BuiltIn::ClipDistance,
Some(Bi::ClipDistance) => crate::BuiltIn::ClipDistances,
Some(Bi::CullDistance) => crate::BuiltIn::CullDistance,
Some(Bi::InstanceIndex) => crate::BuiltIn::InstanceIndex,
Some(Bi::PointSize) => crate::BuiltIn::PointSize,

View File

@@ -99,7 +99,7 @@ pub fn map_built_in(
"vertex_index" => crate::BuiltIn::VertexIndex,
"instance_index" => crate::BuiltIn::InstanceIndex,
"view_index" => crate::BuiltIn::ViewIndex,
"clip_distances" => crate::BuiltIn::ClipDistance,
"clip_distances" => crate::BuiltIn::ClipDistances,
// fragment
"front_facing" => crate::BuiltIn::FrontFacing,
"frag_depth" => crate::BuiltIn::FragDepth,
@@ -148,7 +148,7 @@ pub fn map_built_in(
_ => return Err(Box::new(Error::UnknownBuiltin(span))),
};
match built_in {
crate::BuiltIn::ClipDistance => {
crate::BuiltIn::ClipDistances => {
enable_extensions.require(ImplementedEnableExtension::ClipDistances, span)?
}
crate::BuiltIn::PrimitiveIndex => {

View File

@@ -246,7 +246,7 @@ impl ImplementedEnableExtension {
match self {
Self::F16 => C::SHADER_FLOAT16,
Self::DualSourceBlending => C::DUAL_SOURCE_BLENDING,
Self::ClipDistances => C::CLIP_DISTANCE,
Self::ClipDistances => C::CLIP_DISTANCES,
Self::WgpuMeshShader => C::MESH_SHADER,
Self::WgpuRayQuery => C::RAY_QUERY,
Self::WgpuRayQueryVertexReturn => C::RAY_HIT_VERTEX_POSITION,

View File

@@ -416,7 +416,7 @@ pub enum BuiltIn {
/// Read in vertex shaders
BaseVertex,
/// Written in vertex & mesh shaders
ClipDistance,
ClipDistances,
/// Written in vertex & mesh shaders
CullDistance,
/// Read in vertex, any- and closest-hit shaders

View File

@@ -258,7 +258,7 @@ impl VaryingContext<'_> {
self.built_ins.insert(canonical);
let required = match built_in {
Bi::ClipDistance => Capabilities::CLIP_DISTANCE,
Bi::ClipDistances => Capabilities::CLIP_DISTANCES,
Bi::CullDistance => Capabilities::CULL_DISTANCE,
// Primitive index is allowed w/o any other extensions in any- and closest-hit shaders
Bi::PrimitiveIndex if !matches!(ep.stage, St::AnyHit | St::ClosestHit) => {
@@ -304,7 +304,7 @@ impl VaryingContext<'_> {
&& !self.output,
*ty_inner == Ti::Scalar(crate::Scalar::U32),
),
Bi::ClipDistance | Bi::CullDistance => (
Bi::ClipDistances | Bi::CullDistance => (
(self.stage == St::Vertex || self.stage == St::Mesh) && self.output,
match *ty_inner {
Ti::Array { base, size, .. } => {

View File

@@ -102,10 +102,10 @@ bitflags::bitflags! {
const STORAGE_TEXTURE_BINDING_ARRAY = 1 << 5;
/// Support for binding arrays of storage buffers.
const STORAGE_BUFFER_BINDING_ARRAY = 1 << 6;
/// Support for [`BuiltIn::ClipDistance`].
/// Support for [`BuiltIn::ClipDistances`].
///
/// [`BuiltIn::ClipDistance`]: crate::BuiltIn::ClipDistance
const CLIP_DISTANCE = 1 << 7;
/// [`BuiltIn::ClipDistances`]: crate::BuiltIn::ClipDistances
const CLIP_DISTANCES = 1 << 7;
/// Support for [`BuiltIn::CullDistance`].
///
/// [`BuiltIn::CullDistance`]: crate::BuiltIn::CullDistance
@@ -229,7 +229,7 @@ impl Capabilities {
Self::DUAL_SOURCE_BLENDING => Some(Ext::DualSourceBlending),
// NOTE: `SHADER_FLOAT16_IN_FLOAT32` _does not_ require the `f16` extension
Self::SHADER_FLOAT16 => Some(Ext::F16),
Self::CLIP_DISTANCE => Some(Ext::ClipDistances),
Self::CLIP_DISTANCES => Some(Ext::ClipDistances),
Self::MESH_SHADER => Some(Ext::WgpuMeshShader),
Self::RAY_QUERY => Some(Ext::WgpuRayQuery),
Self::RAY_HIT_VERTEX_POSITION => Some(Ext::WgpuRayQueryVertexReturn),

View File

@@ -1,4 +1,4 @@
capabilities = "CLIP_DISTANCE"
capabilities = "CLIP_DISTANCES"
targets = "SPIRV | GLSL | WGSL"
[glsl]

View File

@@ -4310,7 +4310,7 @@ fn subgroup_invalid_broadcast() {
fn invalid_clip_distances() {
// Missing capability or enable directive
check_extension_validation! {
Capabilities::CLIP_DISTANCE,
Capabilities::CLIP_DISTANCES,
r#"
@vertex
fn vs_main() -> @builtin(clip_distances) array<f32, 8> {
@@ -4330,7 +4330,7 @@ fn invalid_clip_distances() {
Err(naga::valid::ValidationError::EntryPoint {
stage: naga::ShaderStage::Vertex,
source: naga::valid::EntryPointError::Result(
naga::valid::VaryingError::UnsupportedCapability(Capabilities::CLIP_DISTANCE)
naga::valid::VaryingError::UnsupportedCapability(Capabilities::CLIP_DISTANCES)
),
..
})
@@ -4354,11 +4354,11 @@ fn invalid_clip_distances() {
Err(naga::valid::ValidationError::EntryPoint {
stage: naga::ShaderStage::Vertex,
source: naga::valid::EntryPointError::Result(
naga::valid::VaryingError::InvalidBuiltInType(naga::ir::BuiltIn::ClipDistance, _)
naga::valid::VaryingError::InvalidBuiltInType(naga::ir::BuiltIn::ClipDistances, _)
),
..
}),
naga::valid::Capabilities::CLIP_DISTANCE
naga::valid::Capabilities::CLIP_DISTANCES
}
}

View File

@@ -70,7 +70,7 @@ impl MaxFragmentShaderInputDeduction {
BuiltIn::ViewIndex => InterStageBuiltIn::ViewIndex,
BuiltIn::BaseInstance
| BuiltIn::BaseVertex
| BuiltIn::ClipDistance
| BuiltIn::ClipDistances
| BuiltIn::CullDistance
| BuiltIn::InstanceIndex
| BuiltIn::PointSize

View File

@@ -112,7 +112,7 @@ pub fn features_to_naga_capabilities(
features.contains(wgt::Features::DUAL_SOURCE_BLENDING),
);
caps.set(
Caps::CLIP_DISTANCE,
Caps::CLIP_DISTANCES,
features.contains(wgt::Features::CLIP_DISTANCES),
);
caps.set(