@@ -31,15 +31,18 @@ impl<T> RuntimeArray<T> {
31
31
#[ spirv_std_macros:: gpu_only]
32
32
pub unsafe fn index ( & self , index : usize ) -> & T {
33
33
// FIXME(eddyb) `let mut result = T::default()` uses (for `asm!`), with this.
34
- let mut result_slot = core:: mem:: MaybeUninit :: uninit ( ) ;
34
+ let mut result = core:: mem:: MaybeUninit :: uninit ( ) ;
35
35
asm ! {
36
- "%result = OpAccessChain _ {arr} {index}" ,
37
- "OpStore {result_slot} %result" ,
38
- arr = in( reg) self ,
39
- index = in( reg) index,
40
- result_slot = in( reg) result_slot. as_mut_ptr( ) ,
36
+ "OpDecorate %index NonUniform" ,
37
+ "OpDecorate %result NonUniform" ,
38
+ "%index = OpLoad _ {index}" ,
39
+ "%result = OpAccessChain typeof*{result} {this} %index" ,
40
+ "OpStore {result} %result" ,
41
+ result = in( reg) result. as_mut_ptr( ) ,
42
+ this = in( reg) self ,
43
+ index = in( reg) & index,
41
44
}
42
- result_slot . assume_init ( )
45
+ result . assume_init ( )
43
46
}
44
47
45
48
/// Index the array, returning a mutable reference to an element. Unfortunately, because the
@@ -52,14 +55,17 @@ impl<T> RuntimeArray<T> {
52
55
#[ spirv_std_macros:: gpu_only]
53
56
pub unsafe fn index_mut ( & mut self , index : usize ) -> & mut T {
54
57
// FIXME(eddyb) `let mut result = T::default()` uses (for `asm!`), with this.
55
- let mut result_slot = core:: mem:: MaybeUninit :: uninit ( ) ;
58
+ let mut result = core:: mem:: MaybeUninit :: uninit ( ) ;
56
59
asm ! {
57
- "%result = OpAccessChain _ {arr} {index}" ,
58
- "OpStore {result_slot} %result" ,
59
- arr = in( reg) self ,
60
- index = in( reg) index,
61
- result_slot = in( reg) result_slot. as_mut_ptr( ) ,
60
+ "OpDecorate %index NonUniform" ,
61
+ "OpDecorate %result NonUniform" ,
62
+ "%index = OpLoad _ {index}" ,
63
+ "%result = OpAccessChain typeof*{result} {this} %index" ,
64
+ "OpStore {result} %result" ,
65
+ result = in( reg) result. as_mut_ptr( ) ,
66
+ this = in( reg) self ,
67
+ index = in( reg) & index,
62
68
}
63
- result_slot . assume_init ( )
69
+ result . assume_init ( )
64
70
}
65
71
}
0 commit comments