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
@@ -143,11 +146,12 @@ pub fn Image(item: TokenStream) -> TokenStream {
143
146
/// `#[cfg_attr(target_arch="spirv", rust_gpu::spirv(..))]`.
144
147
#[ proc_macro_attribute]
145
148
pub fn spirv ( attr : TokenStream , item : TokenStream ) -> TokenStream {
149
+ let spirv = format_ident ! ( "{}" , & spirv_attr_with_version( ) ) ;
146
150
let mut tokens: Vec < TokenTree > = Vec :: new ( ) ;
147
151
148
152
// prepend with #[rust_gpu::spirv(..)]
149
153
let attr: proc_macro2:: TokenStream = attr. into ( ) ;
150
- tokens. extend ( quote ! { #[ cfg_attr( target_arch="spirv" , rust_gpu:: spirv( #attr) ) ] } ) ;
154
+ tokens. extend ( quote ! { #[ cfg_attr( target_arch="spirv" , rust_gpu:: # spirv( #attr) ) ] } ) ;
151
155
152
156
let item: proc_macro2:: TokenStream = item. into ( ) ;
153
157
for tt in item {
@@ -166,9 +170,13 @@ pub fn spirv(attr: TokenStream, item: TokenStream) -> TokenStream {
166
170
{
167
171
// group matches [spirv ...]
168
172
// group stream doesn't include the brackets
169
- let inner = group. stream ( ) ;
173
+ let inner = group
174
+ . stream ( )
175
+ . into_iter ( )
176
+ . skip ( 1 )
177
+ . collect :: < proc_macro2:: TokenStream > ( ) ;
170
178
group_tokens. extend (
171
- quote ! { [ cfg_attr( target_arch="spirv" , rust_gpu:: #inner) ] } ,
179
+ quote ! { [ cfg_attr( target_arch="spirv" , rust_gpu:: #spirv # inner) ] } ,
172
180
) ;
173
181
}
174
182
_ => group_tokens. append ( tt) ,
0 commit comments