7272#![ doc = include_str ! ( "../README.md" ) ]
7373
7474mod image;
75+ #[ path = "../../../spirv_attr_version.rs" ]
76+ mod spirv_attr_version;
7577
7678use proc_macro:: TokenStream ;
7779use proc_macro2:: { Delimiter , Group , Span , TokenTree } ;
7880
7981use syn:: { ImplItemFn , visit_mut:: VisitMut } ;
8082
81- use quote:: { ToTokens , TokenStreamExt , quote} ;
83+ use crate :: spirv_attr_version:: spirv_attr_with_version;
84+ use quote:: { ToTokens , TokenStreamExt , format_ident, quote} ;
8285use std:: fmt:: Write ;
8386
8487/// A macro for creating SPIR-V `OpTypeImage` types. Always produces a
@@ -144,11 +147,12 @@ pub fn Image(item: TokenStream) -> TokenStream {
144147/// `#[cfg_attr(target_arch="spirv", rust_gpu::spirv(..))]`.
145148#[ proc_macro_attribute]
146149pub fn spirv ( attr : TokenStream , item : TokenStream ) -> TokenStream {
150+ let spirv = format_ident ! ( "{}" , & spirv_attr_with_version( ) ) ;
147151 let mut tokens: Vec < TokenTree > = Vec :: new ( ) ;
148152
149153 // prepend with #[rust_gpu::spirv(..)]
150154 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) ) ] } ) ;
152156
153157 let item: proc_macro2:: TokenStream = item. into ( ) ;
154158 for tt in item {
@@ -167,9 +171,13 @@ pub fn spirv(attr: TokenStream, item: TokenStream) -> TokenStream {
167171 {
168172 // group matches [spirv ...]
169173 // 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 > ( ) ;
171179 group_tokens. extend (
172- quote ! { [ cfg_attr( target_arch="spirv" , rust_gpu:: #inner) ] } ,
180+ quote ! { [ cfg_attr( target_arch="spirv" , rust_gpu:: #spirv # inner) ] } ,
173181 ) ;
174182 }
175183 _ => group_tokens. append ( tt) ,
0 commit comments