mirror of
https://github.com/gfx-rs/wgpu.git
synced 2026-06-01 09:09:48 +09:00
refactor: use plural "clip distances" for cross-platform layers (#9267)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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!();
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -189,7 +189,7 @@ impl Frontend {
|
||||
stride: 4,
|
||||
},
|
||||
builtin: match name {
|
||||
"gl_ClipDistance" => BuiltIn::ClipDistance,
|
||||
"gl_ClipDistance" => BuiltIn::ClipDistances,
|
||||
"gl_CullDistance" => BuiltIn::CullDistance,
|
||||
_ => unreachable!(),
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 => {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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, .. } => {
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
capabilities = "CLIP_DISTANCE"
|
||||
capabilities = "CLIP_DISTANCES"
|
||||
targets = "SPIRV | GLSL | WGSL"
|
||||
|
||||
[glsl]
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ impl MaxFragmentShaderInputDeduction {
|
||||
BuiltIn::ViewIndex => InterStageBuiltIn::ViewIndex,
|
||||
BuiltIn::BaseInstance
|
||||
| BuiltIn::BaseVertex
|
||||
| BuiltIn::ClipDistance
|
||||
| BuiltIn::ClipDistances
|
||||
| BuiltIn::CullDistance
|
||||
| BuiltIn::InstanceIndex
|
||||
| BuiltIn::PointSize
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user