Skip to content

Commit 2b7bd9f

Browse files
refactor(core): duplicate naga::BuiltIn to wgpu_core
Shortly, we're going to add our own functionality to it.
1 parent 74aa9cd commit 2b7bd9f

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
@@ -7,7 +7,6 @@ use core::fmt;
77

88
use arrayvec::ArrayVec;
99
use hashbrown::hash_map::Entry;
10-
use naga::BuiltIn;
1110
use shader_io_deductions::{display_deductions_as_optional_list, MaxVertexShaderOutputDeduction};
1211
use thiserror::Error;
1312
use wgt::{
@@ -156,6 +155,117 @@ enum Varying {
156155
BuiltIn(BuiltIn),
157156
}
158157

158+
#[derive(Clone, Debug, Eq, PartialEq)]
159+
enum BuiltIn {
160+
Position { invariant: bool },
161+
ViewIndex,
162+
BaseInstance,
163+
BaseVertex,
164+
ClipDistance,
165+
CullDistance,
166+
InstanceIndex,
167+
PointSize,
168+
VertexIndex,
169+
DrawID,
170+
FragDepth,
171+
PointCoord,
172+
FrontFacing,
173+
PrimitiveIndex,
174+
Barycentric { perspective: bool },
175+
SampleIndex,
176+
SampleMask,
177+
GlobalInvocationId,
178+
LocalInvocationId,
179+
LocalInvocationIndex,
180+
WorkGroupId,
181+
WorkGroupSize,
182+
NumWorkGroups,
183+
NumSubgroups,
184+
SubgroupId,
185+
SubgroupSize,
186+
SubgroupInvocationId,
187+
MeshTaskSize,
188+
CullPrimitive,
189+
PointIndex,
190+
LineIndices,
191+
TriangleIndices,
192+
VertexCount,
193+
Vertices,
194+
PrimitiveCount,
195+
Primitives,
196+
RayInvocationId,
197+
NumRayInvocations,
198+
InstanceCustomData,
199+
GeometryIndex,
200+
WorldRayOrigin,
201+
WorldRayDirection,
202+
ObjectRayOrigin,
203+
ObjectRayDirection,
204+
RayTmin,
205+
RayTCurrentMax,
206+
ObjectToWorld,
207+
WorldToObject,
208+
HitKind,
209+
}
210+
211+
impl BuiltIn {
212+
pub fn to_naga(&self) -> naga::BuiltIn {
213+
match self {
214+
&Self::Position { invariant } => naga::BuiltIn::Position { invariant },
215+
Self::ViewIndex => naga::BuiltIn::ViewIndex,
216+
Self::BaseInstance => naga::BuiltIn::BaseInstance,
217+
Self::BaseVertex => naga::BuiltIn::BaseVertex,
218+
Self::ClipDistance => naga::BuiltIn::ClipDistance,
219+
Self::CullDistance => naga::BuiltIn::CullDistance,
220+
Self::InstanceIndex => naga::BuiltIn::InstanceIndex,
221+
Self::PointSize => naga::BuiltIn::PointSize,
222+
Self::VertexIndex => naga::BuiltIn::VertexIndex,
223+
Self::DrawID => naga::BuiltIn::DrawID,
224+
Self::FragDepth => naga::BuiltIn::FragDepth,
225+
Self::PointCoord => naga::BuiltIn::PointCoord,
226+
Self::FrontFacing => naga::BuiltIn::FrontFacing,
227+
Self::PrimitiveIndex => naga::BuiltIn::PrimitiveIndex,
228+
Self::Barycentric { perspective } => naga::BuiltIn::Barycentric {
229+
perspective: *perspective,
230+
},
231+
Self::SampleIndex => naga::BuiltIn::SampleIndex,
232+
Self::SampleMask => naga::BuiltIn::SampleMask,
233+
Self::GlobalInvocationId => naga::BuiltIn::GlobalInvocationId,
234+
Self::LocalInvocationId => naga::BuiltIn::LocalInvocationId,
235+
Self::LocalInvocationIndex => naga::BuiltIn::LocalInvocationIndex,
236+
Self::WorkGroupId => naga::BuiltIn::WorkGroupId,
237+
Self::WorkGroupSize => naga::BuiltIn::WorkGroupSize,
238+
Self::NumWorkGroups => naga::BuiltIn::NumWorkGroups,
239+
Self::NumSubgroups => naga::BuiltIn::NumSubgroups,
240+
Self::SubgroupId => naga::BuiltIn::SubgroupId,
241+
Self::SubgroupSize => naga::BuiltIn::SubgroupSize,
242+
Self::SubgroupInvocationId => naga::BuiltIn::SubgroupInvocationId,
243+
Self::MeshTaskSize => naga::BuiltIn::MeshTaskSize,
244+
Self::CullPrimitive => naga::BuiltIn::CullPrimitive,
245+
Self::PointIndex => naga::BuiltIn::PointIndex,
246+
Self::LineIndices => naga::BuiltIn::LineIndices,
247+
Self::TriangleIndices => naga::BuiltIn::TriangleIndices,
248+
Self::VertexCount => naga::BuiltIn::VertexCount,
249+
Self::Vertices => naga::BuiltIn::Vertices,
250+
Self::PrimitiveCount => naga::BuiltIn::PrimitiveCount,
251+
Self::Primitives => naga::BuiltIn::Primitives,
252+
Self::RayInvocationId => naga::BuiltIn::RayInvocationId,
253+
Self::NumRayInvocations => naga::BuiltIn::NumRayInvocations,
254+
Self::InstanceCustomData => naga::BuiltIn::InstanceCustomData,
255+
Self::GeometryIndex => naga::BuiltIn::GeometryIndex,
256+
Self::WorldRayOrigin => naga::BuiltIn::WorldRayOrigin,
257+
Self::WorldRayDirection => naga::BuiltIn::WorldRayDirection,
258+
Self::ObjectRayOrigin => naga::BuiltIn::ObjectRayOrigin,
259+
Self::ObjectRayDirection => naga::BuiltIn::ObjectRayDirection,
260+
Self::RayTmin => naga::BuiltIn::RayTmin,
261+
Self::RayTCurrentMax => naga::BuiltIn::RayTCurrentMax,
262+
Self::ObjectToWorld => naga::BuiltIn::ObjectToWorld,
263+
Self::WorldToObject => naga::BuiltIn::WorldToObject,
264+
Self::HitKind => naga::BuiltIn::HitKind,
265+
}
266+
}
267+
}
268+
159269
#[allow(unused)]
160270
#[derive(Debug)]
161271
struct SpecializationConstant {
@@ -1102,7 +1212,57 @@ impl Interface {
11021212
per_primitive,
11031213
},
11041214
},
1105-
Some(&naga::Binding::BuiltIn(built_in)) => Varying::BuiltIn(built_in),
1215+
Some(&naga::Binding::BuiltIn(built_in)) => Varying::BuiltIn(match built_in {
1216+
naga::BuiltIn::Position { invariant } => BuiltIn::Position { invariant },
1217+
naga::BuiltIn::ViewIndex => BuiltIn::ViewIndex,
1218+
naga::BuiltIn::BaseInstance => BuiltIn::BaseInstance,
1219+
naga::BuiltIn::BaseVertex => BuiltIn::BaseVertex,
1220+
naga::BuiltIn::ClipDistance => BuiltIn::ClipDistance,
1221+
naga::BuiltIn::CullDistance => BuiltIn::CullDistance,
1222+
naga::BuiltIn::InstanceIndex => BuiltIn::InstanceIndex,
1223+
naga::BuiltIn::PointSize => BuiltIn::PointSize,
1224+
naga::BuiltIn::VertexIndex => BuiltIn::VertexIndex,
1225+
naga::BuiltIn::DrawID => BuiltIn::DrawID,
1226+
naga::BuiltIn::FragDepth => BuiltIn::FragDepth,
1227+
naga::BuiltIn::PointCoord => BuiltIn::PointCoord,
1228+
naga::BuiltIn::FrontFacing => BuiltIn::FrontFacing,
1229+
naga::BuiltIn::PrimitiveIndex => BuiltIn::PrimitiveIndex,
1230+
naga::BuiltIn::Barycentric { perspective } => BuiltIn::Barycentric { perspective },
1231+
naga::BuiltIn::SampleIndex => BuiltIn::SampleIndex,
1232+
naga::BuiltIn::SampleMask => BuiltIn::SampleMask,
1233+
naga::BuiltIn::GlobalInvocationId => BuiltIn::GlobalInvocationId,
1234+
naga::BuiltIn::LocalInvocationId => BuiltIn::LocalInvocationId,
1235+
naga::BuiltIn::LocalInvocationIndex => BuiltIn::LocalInvocationIndex,
1236+
naga::BuiltIn::WorkGroupId => BuiltIn::WorkGroupId,
1237+
naga::BuiltIn::WorkGroupSize => BuiltIn::WorkGroupSize,
1238+
naga::BuiltIn::NumWorkGroups => BuiltIn::NumWorkGroups,
1239+
naga::BuiltIn::NumSubgroups => BuiltIn::NumSubgroups,
1240+
naga::BuiltIn::SubgroupId => BuiltIn::SubgroupId,
1241+
naga::BuiltIn::SubgroupSize => BuiltIn::SubgroupSize,
1242+
naga::BuiltIn::SubgroupInvocationId => BuiltIn::SubgroupInvocationId,
1243+
naga::BuiltIn::MeshTaskSize => BuiltIn::MeshTaskSize,
1244+
naga::BuiltIn::CullPrimitive => BuiltIn::CullPrimitive,
1245+
naga::BuiltIn::PointIndex => BuiltIn::PointIndex,
1246+
naga::BuiltIn::LineIndices => BuiltIn::LineIndices,
1247+
naga::BuiltIn::TriangleIndices => BuiltIn::TriangleIndices,
1248+
naga::BuiltIn::VertexCount => BuiltIn::VertexCount,
1249+
naga::BuiltIn::Vertices => BuiltIn::Vertices,
1250+
naga::BuiltIn::PrimitiveCount => BuiltIn::PrimitiveCount,
1251+
naga::BuiltIn::Primitives => BuiltIn::Primitives,
1252+
naga::BuiltIn::RayInvocationId => BuiltIn::RayInvocationId,
1253+
naga::BuiltIn::NumRayInvocations => BuiltIn::NumRayInvocations,
1254+
naga::BuiltIn::InstanceCustomData => BuiltIn::InstanceCustomData,
1255+
naga::BuiltIn::GeometryIndex => BuiltIn::GeometryIndex,
1256+
naga::BuiltIn::WorldRayOrigin => BuiltIn::WorldRayOrigin,
1257+
naga::BuiltIn::WorldRayDirection => BuiltIn::WorldRayDirection,
1258+
naga::BuiltIn::ObjectRayOrigin => BuiltIn::ObjectRayOrigin,
1259+
naga::BuiltIn::ObjectRayDirection => BuiltIn::ObjectRayDirection,
1260+
naga::BuiltIn::RayTmin => BuiltIn::RayTmin,
1261+
naga::BuiltIn::RayTCurrentMax => BuiltIn::RayTCurrentMax,
1262+
naga::BuiltIn::ObjectToWorld => BuiltIn::ObjectToWorld,
1263+
naga::BuiltIn::WorldToObject => BuiltIn::WorldToObject,
1264+
naga::BuiltIn::HitKind => BuiltIn::HitKind,
1265+
}),
11061266
None => {
11071267
log::error!("Missing binding for a varying");
11081268
return;
@@ -1608,17 +1768,16 @@ impl Interface {
16081768
let deductions = entry_point.inputs.iter().filter_map(|output| match output {
16091769
Varying::Local { .. } => None,
16101770
Varying::BuiltIn(builtin) => {
1611-
MaxFragmentShaderInputDeduction::from_inter_stage_builtin(*builtin).or_else(
1612-
|| {
1771+
MaxFragmentShaderInputDeduction::from_inter_stage_builtin(builtin.to_naga())
1772+
.or_else(|| {
16131773
unreachable!(
16141774
concat!(
16151775
"unexpected built-in provided; ",
16161776
"{:?} is not used for fragment stage input",
16171777
),
16181778
builtin
16191779
)
1620-
},
1621-
)
1780+
})
16221781
}
16231782
});
16241783

0 commit comments

Comments
 (0)