72
72
#![ doc = include_str ! ( "../README.md" ) ]
73
73
74
74
mod image;
75
+ #[ path = "../../../spirv_attr_version.rs" ]
76
+ mod spirv_attr_version;
75
77
76
78
use proc_macro:: TokenStream ;
77
79
use proc_macro2:: { Delimiter , Group , Span , TokenTree } ;
78
80
79
81
use syn:: { ImplItemFn , visit_mut:: VisitMut } ;
80
82
81
- use quote:: { ToTokens , TokenStreamExt , quote} ;
83
+ use crate :: spirv_attr_version:: spirv_attr_with_version;
84
+ use quote:: { ToTokens , TokenStreamExt , format_ident, quote} ;
82
85
use std:: fmt:: Write ;
83
86
84
87
/// A macro for creating SPIR-V `OpTypeImage` types. Always produces a
@@ -144,11 +147,12 @@ pub fn Image(item: TokenStream) -> TokenStream {
144
147
/// `#[cfg_attr(target_arch="spirv", rust_gpu::spirv(..))]`.
145
148
#[ proc_macro_attribute]
146
149
pub fn spirv ( attr : TokenStream , item : TokenStream ) -> TokenStream {
150
+ let spirv = format_ident ! ( "{}" , & spirv_attr_with_version( ) ) ;
147
151
let mut tokens: Vec < TokenTree > = Vec :: new ( ) ;
148
152
149
153
// prepend with #[rust_gpu::spirv(..)]
150
154
let attr: proc_macro2:: TokenStream = attr. into ( ) ;
151
- tokens. extend ( quote ! { #[ cfg_attr( target_arch="spirv" , rust_gpu:: spirv( #attr) ) ] } ) ;
155
+ tokens. extend ( quote ! { #[ cfg_attr( target_arch="spirv" , rust_gpu:: # spirv( #attr) ) ] } ) ;
152
156
153
157
let item: proc_macro2:: TokenStream = item. into ( ) ;
154
158
for tt in item {
@@ -167,9 +171,13 @@ pub fn spirv(attr: TokenStream, item: TokenStream) -> TokenStream {
167
171
{
168
172
// group matches [spirv ...]
169
173
// group stream doesn't include the brackets
170
- let inner = group. stream ( ) ;
174
+ let inner = group
175
+ . stream ( )
176
+ . into_iter ( )
177
+ . skip ( 1 )
178
+ . collect :: < proc_macro2:: TokenStream > ( ) ;
171
179
group_tokens. extend (
172
- quote ! { [ cfg_attr( target_arch="spirv" , rust_gpu:: #inner) ] } ,
180
+ quote ! { [ cfg_attr( target_arch="spirv" , rust_gpu:: #spirv # inner) ] } ,
173
181
) ;
174
182
}
175
183
_ => group_tokens. append ( tt) ,
0 commit comments