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
@@ -143,11 +146,12 @@ pub fn Image(item: TokenStream) -> TokenStream {
143146/// `#[cfg_attr(target_arch="spirv", rust_gpu::spirv(..))]`.
144147#[ proc_macro_attribute]
145148pub fn spirv ( attr : TokenStream , item : TokenStream ) -> TokenStream {
149+ let spirv = format_ident ! ( "{}" , & spirv_attr_with_version( ) ) ;
146150 let mut tokens: Vec < TokenTree > = Vec :: new ( ) ;
147151
148152 // prepend with #[rust_gpu::spirv(..)]
149153 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) ) ] } ) ;
151155
152156 let item: proc_macro2:: TokenStream = item. into ( ) ;
153157 for tt in item {
@@ -166,9 +170,13 @@ pub fn spirv(attr: TokenStream, item: TokenStream) -> TokenStream {
166170 {
167171 // group matches [spirv ...]
168172 // 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 > ( ) ;
170178 group_tokens. extend (
171- quote ! { [ cfg_attr( target_arch="spirv" , rust_gpu:: #inner) ] } ,
179+ quote ! { [ cfg_attr( target_arch="spirv" , rust_gpu:: #spirv # inner) ] } ,
172180 ) ;
173181 }
174182 _ => group_tokens. append ( tt) ,
0 commit comments