@@ -556,26 +556,6 @@ impl ShaderProcessor {
556
556
let current_valid = scopes. last ( ) . unwrap ( ) . is_accepting_lines ( ) ;
557
557
558
558
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
- }
579
559
} else if let Some ( cap) = self . else_ifdef_regex . captures ( line) {
580
560
// When should we accept the code in an
581
561
//
@@ -680,6 +660,26 @@ impl ShaderProcessor {
680
660
. is_match ( line)
681
661
{
682
662
// 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
+ }
683
683
} else {
684
684
let mut line_with_defs = line. to_string ( ) ;
685
685
for capture in self . def_regex . captures_iter ( line) {
@@ -2503,6 +2503,34 @@ defined at end
2503
2503
assert_eq ! ( result. get_wgsl_source( ) . unwrap( ) , EXPECTED ) ;
2504
2504
}
2505
2505
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
+
2506
2534
#[ test]
2507
2535
fn process_shader_define_in_shader_with_value ( ) {
2508
2536
#[ rustfmt:: skip]
0 commit comments