From 7d486961535ac79742534e3f921b33063e0f307d Mon Sep 17 00:00:00 2001 From: sagudev <16504129+sagudev@users.noreply.github.com> Date: Thu, 23 Jan 2025 08:28:57 +0100 Subject: [PATCH] use local const ctx Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com> --- naga/src/compact/expressions.rs | 9 ++------- naga/src/front/wgsl/lower/mod.rs | 3 ++- naga/src/lib.rs | 2 +- naga/src/valid/expression.rs | 6 +++--- naga/src/valid/function.rs | 3 +-- naga/src/valid/handles.rs | 11 ++--------- naga/src/valid/interface.rs | 3 +-- naga/src/valid/mod.rs | 4 ++-- 8 files changed, 14 insertions(+), 27 deletions(-) diff --git a/naga/src/compact/expressions.rs b/naga/src/compact/expressions.rs index df4f173ce18..3b5e703e224 100644 --- a/naga/src/compact/expressions.rs +++ b/naga/src/compact/expressions.rs @@ -147,10 +147,7 @@ impl ExpressionTracer<'_> { self.expressions_used .insert_iter([image, sampler, coordinate]); self.expressions_used.insert_iter(array_index); - match self.global_expressions_used { - Some(ref mut used) => used.insert_iter(offset), - None => self.expressions_used.insert_iter(offset), - } + self.expressions_used.insert_iter(offset); use crate::SampleLevel as Sl; match *level { Sl::Auto | Sl::Zero => {} @@ -315,9 +312,7 @@ impl ModuleMap { adjust(sampler); adjust(coordinate); operand_map.adjust_option(array_index); - if let Some(ref mut offset) = *offset { - self.global_expressions.adjust(offset); - } + operand_map.adjust_option(offset); self.adjust_sample_level(level, operand_map); operand_map.adjust_option(depth_ref); } diff --git a/naga/src/front/wgsl/lower/mod.rs b/naga/src/front/wgsl/lower/mod.rs index b83ba7956c3..355da1229b8 100644 --- a/naga/src/front/wgsl/lower/mod.rs +++ b/naga/src/front/wgsl/lower/mod.rs @@ -237,6 +237,7 @@ impl<'a, 'temp> StatementContext<'a, 'temp, '_> { } } + #[allow(dead_code)] fn as_global(&mut self) -> GlobalContext<'a, '_, '_> { GlobalContext { ast_expressions: self.ast_expressions, @@ -2949,7 +2950,7 @@ impl<'source, 'temp> Lowerer<'source, 'temp> { let offset = args .next() - .map(|arg| self.expression(arg, &mut ctx.as_global().as_const())) + .map(|arg| self.expression(arg, &mut ctx.as_const())) .ok() .transpose()?; diff --git a/naga/src/lib.rs b/naga/src/lib.rs index 04f3f52bbad..948cf65dbe5 100644 --- a/naga/src/lib.rs +++ b/naga/src/lib.rs @@ -922,7 +922,7 @@ pub struct Override { pub init: Option>, } -/// Constant value. +/// Global constant value. #[derive(Clone, Debug, PartialEq)] #[cfg_attr(feature = "serialize", derive(Serialize))] #[cfg_attr(feature = "deserialize", derive(Deserialize))] diff --git a/naga/src/valid/expression.rs b/naga/src/valid/expression.rs index 9ef3a9edfb3..924108f2ad0 100644 --- a/naga/src/valid/expression.rs +++ b/naga/src/valid/expression.rs @@ -243,7 +243,7 @@ impl super::Validator { module: &crate::Module, info: &FunctionInfo, mod_info: &ModuleInfo, - global_expr_kind: &crate::proc::ExpressionKindTracker, + expr_kind: &crate::proc::ExpressionKindTracker, ) -> Result { use crate::{Expression as E, Scalar as Sc, ScalarKind as Sk, TypeInner as Ti}; @@ -486,11 +486,11 @@ impl super::Validator { // check constant offset if let Some(const_expr) = offset { - if !global_expr_kind.is_const(const_expr) { + if !expr_kind.is_const(const_expr) { return Err(ExpressionError::InvalidSampleOffsetExprType); } - match *mod_info[const_expr].inner_with(&module.types) { + match resolver[const_expr] { Ti::Scalar(Sc { kind: Sk::Sint, .. }) if num_components == 1 => {} Ti::Vector { size, diff --git a/naga/src/valid/function.rs b/naga/src/valid/function.rs index 9f92e708ce3..965e91435e0 100644 --- a/naga/src/valid/function.rs +++ b/naga/src/valid/function.rs @@ -1625,7 +1625,6 @@ impl super::Validator { module: &crate::Module, mod_info: &ModuleInfo, entry_point: bool, - global_expr_kind: &crate::proc::ExpressionKindTracker, ) -> Result> { let mut info = mod_info.process_function(fun, module, self.flags, self.capabilities)?; @@ -1714,7 +1713,7 @@ impl super::Validator { module, &info, mod_info, - global_expr_kind, + &local_expr_kind, ) { Ok(stages) => info.available_stages &= stages, Err(source) => { diff --git a/naga/src/valid/handles.rs b/naga/src/valid/handles.rs index f3b360f7609..ffd88cff83c 100644 --- a/naga/src/valid/handles.rs +++ b/naga/src/valid/handles.rs @@ -208,7 +208,6 @@ impl super::Validator { handle_and_expr, constants, overrides, - global_expressions, types, local_variables, global_variables, @@ -385,7 +384,6 @@ impl super::Validator { (handle, expression): (Handle, &crate::Expression), constants: &Arena, overrides: &Arena, - global_expressions: &Arena, types: &UniqueArena, local_variables: &Arena, global_variables: &Arena, @@ -395,8 +393,6 @@ impl super::Validator { ) -> Result<(), InvalidHandleError> { let validate_constant = |handle| Self::validate_constant_handle(handle, constants); let validate_override = |handle| Self::validate_override_handle(handle, overrides); - let validate_const_expr = - |handle| Self::validate_expression_handle(handle, global_expressions); let validate_type = |handle| Self::validate_type_handle(handle, types); match *expression { @@ -446,15 +442,12 @@ impl super::Validator { level, depth_ref, } => { - if let Some(offset) = offset { - validate_const_expr(offset)?; - } - handle .check_dep(image)? .check_dep(sampler)? .check_dep(coordinate)? - .check_dep_opt(array_index)?; + .check_dep_opt(array_index)? + .check_dep_opt(offset)?; match level { crate::SampleLevel::Auto | crate::SampleLevel::Zero => (), diff --git a/naga/src/valid/interface.rs b/naga/src/valid/interface.rs index a6fff61d826..f8ebede1fd4 100644 --- a/naga/src/valid/interface.rs +++ b/naga/src/valid/interface.rs @@ -619,7 +619,6 @@ impl super::Validator { ep: &crate::EntryPoint, module: &crate::Module, mod_info: &ModuleInfo, - global_expr_kind: &crate::proc::ExpressionKindTracker, ) -> Result> { if ep.early_depth_test.is_some() { let required = Capabilities::EARLY_DEPTH_TEST; @@ -648,7 +647,7 @@ impl super::Validator { } let mut info = self - .validate_function(&ep.function, module, mod_info, true, global_expr_kind) + .validate_function(&ep.function, module, mod_info, true) .map_err(WithSpan::into_other)?; { diff --git a/naga/src/valid/mod.rs b/naga/src/valid/mod.rs index a6380cbe1ee..1810940fb4b 100644 --- a/naga/src/valid/mod.rs +++ b/naga/src/valid/mod.rs @@ -712,7 +712,7 @@ impl Validator { } for (handle, fun) in module.functions.iter() { - match self.validate_function(fun, module, &mod_info, false, &global_expr_kind) { + match self.validate_function(fun, module, &mod_info, false) { Ok(info) => mod_info.functions.push(info), Err(error) => { return Err(error.and_then(|source| { @@ -738,7 +738,7 @@ impl Validator { .with_span()); // TODO: keep some EP span information? } - match self.validate_entry_point(ep, module, &mod_info, &global_expr_kind) { + match self.validate_entry_point(ep, module, &mod_info) { Ok(info) => mod_info.entry_points.push(info), Err(error) => { return Err(error.and_then(|source| {