Skip to content

Commit 3c3f3c4

Browse files
refactor(core): duplicate naga::BuiltIn to wgpu_core
Shortly, we're going to add our own functionality to it.
1 parent 609d11e commit 3c3f3c4

1 file changed

Lines changed: 165 additions & 6 deletions

File tree

wgpu-core/src/validation.rs

Lines changed: 165 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use core::fmt;
88

99
use arrayvec::ArrayVec;
1010
use hashbrown::hash_map::Entry;
11-
use naga::BuiltIn;
1211
use shader_io_deductions::{display_deductions_as_optional_list, MaxVertexShaderOutputDeduction};
1312
use thiserror::Error;
1413
use wgt::{
@@ -157,6 +156,117 @@ enum Varying {
157156
BuiltIn(BuiltIn),
158157
}
159158

159+
#[derive(Clone, Debug, Eq, PartialEq)]
160+
enum BuiltIn {
161+
Position { invariant: bool },
162+
ViewIndex,
163+
BaseInstance,
164+
BaseVertex,
165+
ClipDistance,
166+
CullDistance,
167+
InstanceIndex,
168+
PointSize,
169+
VertexIndex,
170+
DrawIndex,
171+
FragDepth,
172+
PointCoord,
173+
FrontFacing,
174+
PrimitiveIndex,
175+
Barycentric { perspective: bool },
176+
SampleIndex,
177+
SampleMask,
178+
GlobalInvocationId,
179+
LocalInvocationId,
180+
LocalInvocationIndex,
181+
WorkGroupId,
182+
WorkGroupSize,
183+
NumWorkGroups,
184+
NumSubgroups,
185+
SubgroupId,
186+
SubgroupSize,
187+
SubgroupInvocationId,
188+
MeshTaskSize,
189+
CullPrimitive,
190+
PointIndex,
191+
LineIndices,
192+
TriangleIndices,
193+
VertexCount,
194+
Vertices,
195+
PrimitiveCount,
196+
Primitives,
197+
RayInvocationId,
198+
NumRayInvocations,
199+
InstanceCustomData,
200+
GeometryIndex,
201+
WorldRayOrigin,
202+
WorldRayDirection,
203+
ObjectRayOrigin,
204+
ObjectRayDirection,
205+
RayTmin,
206+
RayTCurrentMax,
207+
ObjectToWorld,
208+
WorldToObject,
209+
HitKind,
210+
}
211+
212+
impl BuiltIn {
213+
pub fn to_naga(&self) -> naga::BuiltIn {
214+
match self {
215+
&Self::Position { invariant } => naga::BuiltIn::Position { invariant },
216+
Self::ViewIndex => naga::BuiltIn::ViewIndex,
217+
Self::BaseInstance => naga::BuiltIn::BaseInstance,
218+
Self::BaseVertex => naga::BuiltIn::BaseVertex,
219+
Self::ClipDistance => naga::BuiltIn::ClipDistance,
220+
Self::CullDistance => naga::BuiltIn::CullDistance,
221+
Self::InstanceIndex => naga::BuiltIn::InstanceIndex,
222+
Self::PointSize => naga::BuiltIn::PointSize,
223+
Self::VertexIndex => naga::BuiltIn::VertexIndex,
224+
Self::DrawIndex => naga::BuiltIn::DrawIndex,
225+
Self::FragDepth => naga::BuiltIn::FragDepth,
226+
Self::PointCoord => naga::BuiltIn::PointCoord,
227+
Self::FrontFacing => naga::BuiltIn::FrontFacing,
228+
Self::PrimitiveIndex => naga::BuiltIn::PrimitiveIndex,
229+
Self::Barycentric { perspective } => naga::BuiltIn::Barycentric {
230+
perspective: *perspective,
231+
},
232+
Self::SampleIndex => naga::BuiltIn::SampleIndex,
233+
Self::SampleMask => naga::BuiltIn::SampleMask,
234+
Self::GlobalInvocationId => naga::BuiltIn::GlobalInvocationId,
235+
Self::LocalInvocationId => naga::BuiltIn::LocalInvocationId,
236+
Self::LocalInvocationIndex => naga::BuiltIn::LocalInvocationIndex,
237+
Self::WorkGroupId => naga::BuiltIn::WorkGroupId,
238+
Self::WorkGroupSize => naga::BuiltIn::WorkGroupSize,
239+
Self::NumWorkGroups => naga::BuiltIn::NumWorkGroups,
240+
Self::NumSubgroups => naga::BuiltIn::NumSubgroups,
241+
Self::SubgroupId => naga::BuiltIn::SubgroupId,
242+
Self::SubgroupSize => naga::BuiltIn::SubgroupSize,
243+
Self::SubgroupInvocationId => naga::BuiltIn::SubgroupInvocationId,
244+
Self::MeshTaskSize => naga::BuiltIn::MeshTaskSize,
245+
Self::CullPrimitive => naga::BuiltIn::CullPrimitive,
246+
Self::PointIndex => naga::BuiltIn::PointIndex,
247+
Self::LineIndices => naga::BuiltIn::LineIndices,
248+
Self::TriangleIndices => naga::BuiltIn::TriangleIndices,
249+
Self::VertexCount => naga::BuiltIn::VertexCount,
250+
Self::Vertices => naga::BuiltIn::Vertices,
251+
Self::PrimitiveCount => naga::BuiltIn::PrimitiveCount,
252+
Self::Primitives => naga::BuiltIn::Primitives,
253+
Self::RayInvocationId => naga::BuiltIn::RayInvocationId,
254+
Self::NumRayInvocations => naga::BuiltIn::NumRayInvocations,
255+
Self::InstanceCustomData => naga::BuiltIn::InstanceCustomData,
256+
Self::GeometryIndex => naga::BuiltIn::GeometryIndex,
257+
Self::WorldRayOrigin => naga::BuiltIn::WorldRayOrigin,
258+
Self::WorldRayDirection => naga::BuiltIn::WorldRayDirection,
259+
Self::ObjectRayOrigin => naga::BuiltIn::ObjectRayOrigin,
260+
Self::ObjectRayDirection => naga::BuiltIn::ObjectRayDirection,
261+
Self::RayTmin => naga::BuiltIn::RayTmin,
262+
Self::RayTCurrentMax => naga::BuiltIn::RayTCurrentMax,
263+
Self::ObjectToWorld => naga::BuiltIn::ObjectToWorld,
264+
Self::WorldToObject => naga::BuiltIn::WorldToObject,
265+
Self::HitKind => naga::BuiltIn::HitKind,
266+
}
267+
}
268+
}
269+
160270
#[allow(unused)]
161271
#[derive(Debug)]
162272
struct SpecializationConstant {
@@ -995,7 +1105,57 @@ impl Interface {
9951105
per_primitive,
9961106
},
9971107
},
998-
Some(&naga::Binding::BuiltIn(built_in)) => Varying::BuiltIn(built_in),
1108+
Some(&naga::Binding::BuiltIn(built_in)) => Varying::BuiltIn(match built_in {
1109+
naga::BuiltIn::Position { invariant } => BuiltIn::Position { invariant },
1110+
naga::BuiltIn::ViewIndex => BuiltIn::ViewIndex,
1111+
naga::BuiltIn::BaseInstance => BuiltIn::BaseInstance,
1112+
naga::BuiltIn::BaseVertex => BuiltIn::BaseVertex,
1113+
naga::BuiltIn::ClipDistance => BuiltIn::ClipDistance,
1114+
naga::BuiltIn::CullDistance => BuiltIn::CullDistance,
1115+
naga::BuiltIn::InstanceIndex => BuiltIn::InstanceIndex,
1116+
naga::BuiltIn::PointSize => BuiltIn::PointSize,
1117+
naga::BuiltIn::VertexIndex => BuiltIn::VertexIndex,
1118+
naga::BuiltIn::DrawIndex => BuiltIn::DrawIndex,
1119+
naga::BuiltIn::FragDepth => BuiltIn::FragDepth,
1120+
naga::BuiltIn::PointCoord => BuiltIn::PointCoord,
1121+
naga::BuiltIn::FrontFacing => BuiltIn::FrontFacing,
1122+
naga::BuiltIn::PrimitiveIndex => BuiltIn::PrimitiveIndex,
1123+
naga::BuiltIn::Barycentric { perspective } => BuiltIn::Barycentric { perspective },
1124+
naga::BuiltIn::SampleIndex => BuiltIn::SampleIndex,
1125+
naga::BuiltIn::SampleMask => BuiltIn::SampleMask,
1126+
naga::BuiltIn::GlobalInvocationId => BuiltIn::GlobalInvocationId,
1127+
naga::BuiltIn::LocalInvocationId => BuiltIn::LocalInvocationId,
1128+
naga::BuiltIn::LocalInvocationIndex => BuiltIn::LocalInvocationIndex,
1129+
naga::BuiltIn::WorkGroupId => BuiltIn::WorkGroupId,
1130+
naga::BuiltIn::WorkGroupSize => BuiltIn::WorkGroupSize,
1131+
naga::BuiltIn::NumWorkGroups => BuiltIn::NumWorkGroups,
1132+
naga::BuiltIn::NumSubgroups => BuiltIn::NumSubgroups,
1133+
naga::BuiltIn::SubgroupId => BuiltIn::SubgroupId,
1134+
naga::BuiltIn::SubgroupSize => BuiltIn::SubgroupSize,
1135+
naga::BuiltIn::SubgroupInvocationId => BuiltIn::SubgroupInvocationId,
1136+
naga::BuiltIn::MeshTaskSize => BuiltIn::MeshTaskSize,
1137+
naga::BuiltIn::CullPrimitive => BuiltIn::CullPrimitive,
1138+
naga::BuiltIn::PointIndex => BuiltIn::PointIndex,
1139+
naga::BuiltIn::LineIndices => BuiltIn::LineIndices,
1140+
naga::BuiltIn::TriangleIndices => BuiltIn::TriangleIndices,
1141+
naga::BuiltIn::VertexCount => BuiltIn::VertexCount,
1142+
naga::BuiltIn::Vertices => BuiltIn::Vertices,
1143+
naga::BuiltIn::PrimitiveCount => BuiltIn::PrimitiveCount,
1144+
naga::BuiltIn::Primitives => BuiltIn::Primitives,
1145+
naga::BuiltIn::RayInvocationId => BuiltIn::RayInvocationId,
1146+
naga::BuiltIn::NumRayInvocations => BuiltIn::NumRayInvocations,
1147+
naga::BuiltIn::InstanceCustomData => BuiltIn::InstanceCustomData,
1148+
naga::BuiltIn::GeometryIndex => BuiltIn::GeometryIndex,
1149+
naga::BuiltIn::WorldRayOrigin => BuiltIn::WorldRayOrigin,
1150+
naga::BuiltIn::WorldRayDirection => BuiltIn::WorldRayDirection,
1151+
naga::BuiltIn::ObjectRayOrigin => BuiltIn::ObjectRayOrigin,
1152+
naga::BuiltIn::ObjectRayDirection => BuiltIn::ObjectRayDirection,
1153+
naga::BuiltIn::RayTmin => BuiltIn::RayTmin,
1154+
naga::BuiltIn::RayTCurrentMax => BuiltIn::RayTCurrentMax,
1155+
naga::BuiltIn::ObjectToWorld => BuiltIn::ObjectToWorld,
1156+
naga::BuiltIn::WorldToObject => BuiltIn::WorldToObject,
1157+
naga::BuiltIn::HitKind => BuiltIn::HitKind,
1158+
}),
9991159
None => {
10001160
log::error!("Missing binding for a varying");
10011161
return;
@@ -1510,17 +1670,16 @@ impl Interface {
15101670
let deductions = entry_point.inputs.iter().filter_map(|output| match output {
15111671
Varying::Local { .. } => None,
15121672
Varying::BuiltIn(builtin) => {
1513-
MaxFragmentShaderInputDeduction::from_inter_stage_builtin(*builtin).or_else(
1514-
|| {
1673+
MaxFragmentShaderInputDeduction::from_inter_stage_builtin(builtin.to_naga())
1674+
.or_else(|| {
15151675
unreachable!(
15161676
concat!(
15171677
"unexpected built-in provided; ",
15181678
"{:?} is not used for fragment stage input",
15191679
),
15201680
builtin
15211681
)
1522-
},
1523-
)
1682+
})
15241683
}
15251684
});
15261685

0 commit comments

Comments
 (0)