@@ -556,26 +556,6 @@ impl ShaderProcessor {
556556 let current_valid = scopes. last ( ) . unwrap ( ) . is_accepting_lines ( ) ;
557557
558558 scopes. push ( Scope :: new ( current_valid && new_scope) ) ;
559- } else if let Some ( cap) = self . define_regex . captures ( line) {
560- let def = cap. get ( 1 ) . unwrap ( ) ;
561- let name = def. as_str ( ) . to_string ( ) ;
562-
563- if let Some ( val) = cap. get ( 2 ) {
564- if let Ok ( val) = val. as_str ( ) . parse :: < u32 > ( ) {
565- shader_defs_unique. insert ( name. clone ( ) , ShaderDefVal :: UInt ( name, val) ) ;
566- } else if let Ok ( val) = val. as_str ( ) . parse :: < i32 > ( ) {
567- shader_defs_unique. insert ( name. clone ( ) , ShaderDefVal :: Int ( name, val) ) ;
568- } else if let Ok ( val) = val. as_str ( ) . parse :: < bool > ( ) {
569- shader_defs_unique. insert ( name. clone ( ) , ShaderDefVal :: Bool ( name, val) ) ;
570- } else {
571- return Err ( ProcessShaderError :: InvalidShaderDefDefinitionValue {
572- shader_def_name : name,
573- value : val. as_str ( ) . to_string ( ) ,
574- } ) ;
575- }
576- } else {
577- shader_defs_unique. insert ( name. clone ( ) , ShaderDefVal :: Bool ( name, true ) ) ;
578- }
579559 } else if let Some ( cap) = self . else_ifdef_regex . captures ( line) {
580560 // When should we accept the code in an
581561 //
@@ -680,6 +660,26 @@ impl ShaderProcessor {
680660 . is_match ( line)
681661 {
682662 // ignore import path lines
663+ } else if let Some ( cap) = self . define_regex . captures ( line) {
664+ let def = cap. get ( 1 ) . unwrap ( ) ;
665+ let name = def. as_str ( ) . to_string ( ) ;
666+
667+ if let Some ( val) = cap. get ( 2 ) {
668+ if let Ok ( val) = val. as_str ( ) . parse :: < u32 > ( ) {
669+ shader_defs_unique. insert ( name. clone ( ) , ShaderDefVal :: UInt ( name, val) ) ;
670+ } else if let Ok ( val) = val. as_str ( ) . parse :: < i32 > ( ) {
671+ shader_defs_unique. insert ( name. clone ( ) , ShaderDefVal :: Int ( name, val) ) ;
672+ } else if let Ok ( val) = val. as_str ( ) . parse :: < bool > ( ) {
673+ shader_defs_unique. insert ( name. clone ( ) , ShaderDefVal :: Bool ( name, val) ) ;
674+ } else {
675+ return Err ( ProcessShaderError :: InvalidShaderDefDefinitionValue {
676+ shader_def_name : name,
677+ value : val. as_str ( ) . to_string ( ) ,
678+ } ) ;
679+ }
680+ } else {
681+ shader_defs_unique. insert ( name. clone ( ) , ShaderDefVal :: Bool ( name, true ) ) ;
682+ }
683683 } else {
684684 let mut line_with_defs = line. to_string ( ) ;
685685 for capture in self . def_regex . captures_iter ( line) {
@@ -2503,6 +2503,34 @@ defined at end
25032503 assert_eq ! ( result. get_wgsl_source( ) . unwrap( ) , EXPECTED ) ;
25042504 }
25052505
2506+ #[ test]
2507+ fn process_shader_define_only_in_accepting_scopes ( ) {
2508+ #[ rustfmt:: skip]
2509+ const WGSL : & str = r"
2510+ #define GUARD
2511+ #ifndef GUARD
2512+ #define GUARDED
2513+ #endif
2514+ #ifdef GUARDED
2515+ This should not be part of the result
2516+ #endif
2517+ " ;
2518+
2519+ #[ rustfmt:: skip]
2520+ const EXPECTED : & str = r"
2521+ " ;
2522+ let processor = ShaderProcessor :: default ( ) ;
2523+ let result = processor
2524+ . process (
2525+ & Shader :: from_wgsl ( WGSL ) ,
2526+ & [ ] ,
2527+ & HashMap :: default ( ) ,
2528+ & HashMap :: default ( ) ,
2529+ )
2530+ . unwrap ( ) ;
2531+ assert_eq ! ( result. get_wgsl_source( ) . unwrap( ) , EXPECTED ) ;
2532+ }
2533+
25062534 #[ test]
25072535 fn process_shader_define_in_shader_with_value ( ) {
25082536 #[ rustfmt:: skip]
0 commit comments