Skip to content

Commit 627c060

Browse files
SYNC POINT: resolve conflicts
2 parents 06ea963 + e76fbb6 commit 627c060

3 files changed

Lines changed: 48 additions & 41 deletions

File tree

naga/src/front/wgsl/parse/conv.rs

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,8 @@ pub fn map_address_space<'a>(
2121
"immediate" => Ok(crate::AddressSpace::Immediate),
2222
"function" => Ok(crate::AddressSpace::Function),
2323
"task_payload" => {
24-
if enable_extensions.contains(ImplementedEnableExtension::WgpuMeshShader) {
25-
Ok(crate::AddressSpace::TaskPayload)
26-
} else {
27-
Err(Box::new(Error::EnableExtensionNotEnabled {
28-
span,
29-
kind: ImplementedEnableExtension::WgpuMeshShader.into(),
30-
}))
31-
}
24+
enable_extensions.check(span, ImplementedEnableExtension::WgpuMeshShader)?;
25+
Ok(crate::AddressSpace::TaskPayload)
3226
}
3327
_ => Err(Box::new(Error::UnknownAddressSpace(span))),
3428
}
@@ -79,12 +73,7 @@ pub fn map_built_in(
7973
};
8074
match built_in {
8175
crate::BuiltIn::ClipDistance => {
82-
if !enable_extensions.contains(ImplementedEnableExtension::ClipDistances) {
83-
return Err(Box::new(Error::EnableExtensionNotEnabled {
84-
span,
85-
kind: ImplementedEnableExtension::ClipDistances.into(),
86-
}));
87-
}
76+
enable_extensions.check(span, ImplementedEnableExtension::ClipDistances)?
8877
}
8978
crate::BuiltIn::CullPrimitive
9079
| crate::BuiltIn::PointIndex
@@ -94,12 +83,7 @@ pub fn map_built_in(
9483
| crate::BuiltIn::Vertices
9584
| crate::BuiltIn::PrimitiveCount
9685
| crate::BuiltIn::Primitives => {
97-
if !enable_extensions.contains(ImplementedEnableExtension::WgpuMeshShader) {
98-
return Err(Box::new(Error::EnableExtensionNotEnabled {
99-
span,
100-
kind: ImplementedEnableExtension::WgpuMeshShader.into(),
101-
}));
102-
}
86+
enable_extensions.check(span, ImplementedEnableExtension::WgpuMeshShader)?
10387
}
10488
_ => {}
10589
}
@@ -216,13 +200,8 @@ pub fn get_scalar_type(
216200
_ => None,
217201
};
218202

219-
if matches!(scalar, Some(Scalar::F16))
220-
&& !enable_extensions.contains(ImplementedEnableExtension::F16)
221-
{
222-
return Err(Box::new(Error::EnableExtensionNotEnabled {
223-
span,
224-
kind: ImplementedEnableExtension::F16.into(),
225-
}));
203+
if matches!(scalar, Some(Scalar::F16)) {
204+
enable_extensions.check(span, ImplementedEnableExtension::F16)?
226205
}
227206

228207
Ok(scalar)

naga/src/front/wgsl/parse/directive/enable_extension.rs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,12 @@ impl EnableExtensions {
4747
}
4848

4949
/// Query whether an enable-extension tracked here has been requested.
50-
pub(crate) const fn contains(&self, ext: ImplementedEnableExtension) -> bool {
51-
match ext {
50+
pub(crate) fn check(
51+
&self,
52+
span: Span,
53+
ext: ImplementedEnableExtension,
54+
) -> core::result::Result<(), EnableExtensionNotAvailableError> {
55+
let is_enabled = match ext {
5256
ImplementedEnableExtension::WgpuMeshShader => self.wgpu.mesh_shader,
5357
ImplementedEnableExtension::WgpuRayQuery => self.wgpu.ray_query,
5458
ImplementedEnableExtension::WgpuRayQueryVertexReturn => {
@@ -58,6 +62,16 @@ impl EnableExtensions {
5862
ImplementedEnableExtension::F16 => self.f16,
5963
ImplementedEnableExtension::ClipDistances => self.clip_distances,
6064
ImplementedEnableExtension::WgpuCooperativeMatrix => self.wgpu.cooperative_matrix,
65+
};
66+
67+
if is_enabled {
68+
Ok(())
69+
} else {
70+
Err(EnableExtensionNotAvailableError {
71+
extension: ext,
72+
span,
73+
reason: EnableExtensionNotAvailableErrorReason::NotEnabled,
74+
})
6175
}
6276
}
6377
}
@@ -98,6 +112,20 @@ impl Default for WgpuEnableExtensions {
98112
}
99113
}
100114

115+
/// An error returned by [`EnableExtensions::contains`].
116+
#[derive(Clone, Debug)]
117+
pub struct EnableExtensionNotAvailableError {
118+
span: Span,
119+
extension: ImplementedEnableExtension,
120+
reason: EnableExtensionNotAvailableErrorReason,
121+
}
122+
123+
/// An [`EnableExtensionNotAvailableError::reason`].
124+
#[derive(Clone, Debug, Eq, PartialEq)]
125+
pub enum EnableExtensionNotAvailableErrorReason {
126+
NotEnabled,
127+
}
128+
101129
/// An enable-extension not guaranteed to be present in all environments.
102130
///
103131
/// WGSL spec.: <https://www.w3.org/TR/WGSL/#enable-extensions-sec>

naga/src/front/wgsl/parse/mod.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ impl<'a> BindingParser<'a> {
225225
"blend_src" => {
226226
if !lexer
227227
.enable_extensions
228-
.contains(ImplementedEnableExtension::DualSourceBlending)
228+
.check(ImplementedEnableExtension::DualSourceBlending)
229229
{
230230
return Err(Box::new(Error::EnableExtensionNotEnabled {
231231
span: name_span,
@@ -242,7 +242,7 @@ impl<'a> BindingParser<'a> {
242242
"per_primitive" => {
243243
if !lexer
244244
.enable_extensions
245-
.contains(ImplementedEnableExtension::WgpuMeshShader)
245+
.check(ImplementedEnableExtension::WgpuMeshShader)
246246
{
247247
return Err(Box::new(Error::EnableExtensionNotEnabled {
248248
span: name_span,
@@ -899,7 +899,7 @@ impl Parser {
899899
let num = res.map_err(|err| Error::BadNumber(span, err))?;
900900

901901
if let Some(enable_extension) = num.requires_enable_extension() {
902-
if !lexer.enable_extensions.contains(enable_extension) {
902+
if !lexer.enable_extensions.check(enable_extension) {
903903
return Err(Box::new(Error::EnableExtensionNotEnabled {
904904
kind: enable_extension.into(),
905905
span,
@@ -2004,7 +2004,7 @@ impl Parser {
20042004
"acceleration_structure" => {
20052005
if !lexer
20062006
.enable_extensions
2007-
.contains(ImplementedEnableExtension::WgpuRayQuery)
2007+
.check(ImplementedEnableExtension::WgpuRayQuery)
20082008
{
20092009
return Err(Box::new(Error::EnableExtensionNotEnabled {
20102010
kind: EnableExtension::Implemented(
@@ -2016,7 +2016,7 @@ impl Parser {
20162016
let vertex_return = lexer.next_acceleration_structure_flags()?;
20172017
if !lexer
20182018
.enable_extensions
2019-
.contains(ImplementedEnableExtension::WgpuRayQueryVertexReturn)
2019+
.check(ImplementedEnableExtension::WgpuRayQueryVertexReturn)
20202020
&& vertex_return
20212021
{
20222022
return Err(Box::new(Error::EnableExtensionNotEnabled {
@@ -2031,7 +2031,7 @@ impl Parser {
20312031
"ray_query" => {
20322032
if !lexer
20332033
.enable_extensions
2034-
.contains(ImplementedEnableExtension::WgpuRayQuery)
2034+
.check(ImplementedEnableExtension::WgpuRayQuery)
20352035
{
20362036
return Err(Box::new(Error::EnableExtensionNotEnabled {
20372037
kind: EnableExtension::Implemented(
@@ -2043,7 +2043,7 @@ impl Parser {
20432043
let vertex_return = lexer.next_acceleration_structure_flags()?;
20442044
if !lexer
20452045
.enable_extensions
2046-
.contains(ImplementedEnableExtension::WgpuRayQueryVertexReturn)
2046+
.check(ImplementedEnableExtension::WgpuRayQueryVertexReturn)
20472047
&& vertex_return
20482048
{
20492049
return Err(Box::new(Error::EnableExtensionNotEnabled {
@@ -2058,7 +2058,7 @@ impl Parser {
20582058
"RayDesc" => {
20592059
if !lexer
20602060
.enable_extensions
2061-
.contains(ImplementedEnableExtension::WgpuRayQuery)
2061+
.check(ImplementedEnableExtension::WgpuRayQuery)
20622062
{
20632063
return Err(Box::new(Error::EnableExtensionNotEnabled {
20642064
kind: EnableExtension::Implemented(
@@ -2072,7 +2072,7 @@ impl Parser {
20722072
"RayIntersection" => {
20732073
if !lexer
20742074
.enable_extensions
2075-
.contains(ImplementedEnableExtension::WgpuRayQuery)
2075+
.check(ImplementedEnableExtension::WgpuRayQuery)
20762076
{
20772077
return Err(Box::new(Error::EnableExtensionNotEnabled {
20782078
kind: EnableExtension::Implemented(
@@ -3030,7 +3030,7 @@ impl Parser {
30303030
"task" => {
30313031
if !lexer
30323032
.enable_extensions
3033-
.contains(ImplementedEnableExtension::WgpuMeshShader)
3033+
.check(ImplementedEnableExtension::WgpuMeshShader)
30343034
{
30353035
return Err(Box::new(Error::EnableExtensionNotEnabled {
30363036
span: name_span,
@@ -3043,7 +3043,7 @@ impl Parser {
30433043
"mesh" => {
30443044
if !lexer
30453045
.enable_extensions
3046-
.contains(ImplementedEnableExtension::WgpuMeshShader)
3046+
.check(ImplementedEnableExtension::WgpuMeshShader)
30473047
{
30483048
return Err(Box::new(Error::EnableExtensionNotEnabled {
30493049
span: name_span,
@@ -3060,7 +3060,7 @@ impl Parser {
30603060
"payload" => {
30613061
if !lexer
30623062
.enable_extensions
3063-
.contains(ImplementedEnableExtension::WgpuMeshShader)
3063+
.check(ImplementedEnableExtension::WgpuMeshShader)
30643064
{
30653065
return Err(Box::new(Error::EnableExtensionNotEnabled {
30663066
span: name_span,

0 commit comments

Comments
 (0)