@@ -5,7 +5,7 @@ use std::borrow::Cow;
55use std:: collections:: HashMap ;
66use std:: ffi:: { CStr , CString } ;
77use std:: ops:: Deref ;
8- use std:: os:: raw:: { c_char, c_uint , c_void} ;
8+ use std:: os:: raw:: { c_char, c_void} ;
99use std:: ptr;
1010
1111use wesl:: syntax:: TranslationUnit ;
@@ -25,6 +25,8 @@ pub mod native {
2525 include ! ( concat!( env!( "OUT_DIR" ) , "/bindings.rs" ) ) ;
2626}
2727
28+ // TODO: this seems unfinished. only wesl_create/destroy_compiler is implemented.
29+ #[ allow( unused) ]
2830pub struct WeslCompiler {
2931 compiler : Wesl < wesl:: NoResolver > ,
3032}
@@ -158,7 +160,7 @@ fn wesl_error_to_c(e: wesl::Error) -> native::WeslError {
158160}
159161
160162#[ cfg( feature = "eval" ) ]
161- unsafe fn binding_array_to_vec ( array : * const WeslBindingArray ) -> Vec < WeslBinding > {
163+ unsafe fn binding_array_to_vec ( array : * const native :: WeslBindingArray ) -> Vec < native :: WeslBinding > {
162164 if array. is_null ( ) {
163165 return Vec :: new ( ) ;
164166 }
@@ -178,9 +180,13 @@ unsafe fn binding_array_to_vec(array: *const WeslBindingArray) -> Vec<WeslBindin
178180
179181#[ cfg( feature = "eval" ) ]
180182fn parse_c_binding (
181- b : & WeslBinding ,
183+ b : & native :: WeslBinding ,
182184 wgsl : & wesl:: syntax:: TranslationUnit ,
183185) -> Result < ( ( u32 , u32 ) , RefInstance ) , wesl:: Error > {
186+ use crate :: native:: {
187+ WESL_BINDING_READ_ONLY_STORAGE , WESL_BINDING_STORAGE , WESL_BINDING_UNIFORM ,
188+ } ;
189+
184190 let mut ctx = wesl:: eval:: Context :: new ( wgsl) ;
185191
186192 let ty_expr = wgsl
@@ -208,9 +214,9 @@ fn parse_c_binding(
208214 . map_err ( |e| wesl:: Error :: Custom ( format ! ( "Failed to evaluate type: {e}" ) ) ) ?;
209215
210216 let ( storage, access) = match b. kind {
211- WeslBindingType :: Uniform => ( AddressSpace :: Uniform , AccessMode :: Read ) ,
212- WeslBindingType :: Storage => ( AddressSpace :: Storage , AccessMode :: ReadWrite ) ,
213- WeslBindingType :: ReadOnlyStorage => ( AddressSpace :: Storage , AccessMode :: Read ) ,
217+ WESL_BINDING_UNIFORM => ( AddressSpace :: Uniform , AccessMode :: Read ) ,
218+ WESL_BINDING_STORAGE => ( AddressSpace :: Storage , AccessMode :: ReadWrite ) ,
219+ WESL_BINDING_READ_ONLY_STORAGE => ( AddressSpace :: Storage , AccessMode :: Read ) ,
214220 _ => return Err ( wesl:: Error :: Custom ( "Unsupported binding type" . to_string ( ) ) ) ,
215221 } ;
216222
@@ -232,16 +238,16 @@ fn parse_c_binding(
232238}
233239
234240#[ cfg( feature = "eval" ) ]
235- fn create_c_binding_array ( bindings : Vec < WeslBinding > ) -> * const WeslBindingArray {
241+ fn create_c_binding_array ( bindings : Vec < native :: WeslBinding > ) -> * const native :: WeslBindingArray {
236242 if bindings. is_empty ( ) {
237243 return ptr:: null ( ) ;
238244 }
239245
240246 let items = bindings. into_boxed_slice ( ) ;
241247 let len = items. len ( ) ;
242- let items_ptr = Box :: into_raw ( items) as * const WeslBinding ;
248+ let items_ptr = Box :: into_raw ( items) as * const native :: WeslBinding ;
243249
244- let array = Box :: new ( WeslBindingArray {
250+ let array = Box :: new ( native :: WeslBindingArray {
245251 items : items_ptr,
246252 len,
247253 } ) ;
@@ -620,17 +626,17 @@ pub unsafe extern "C" fn wesl_parse(source: *const c_char) -> native::WeslParseR
620626#[ cfg( feature = "eval" ) ]
621627#[ unsafe( no_mangle) ]
622628pub unsafe extern "C" fn wesl_eval (
623- files : * const WeslStringMap ,
629+ files : * const native :: WeslStringMap ,
624630 root : * const c_char ,
625631 expression : * const c_char ,
626- options : * const WeslCompileOptions ,
627- features : * const WeslBoolMap ,
628- ) -> WeslResult {
632+ options : * const native :: WeslCompileOptions ,
633+ features : * const native :: WeslBoolMap ,
634+ ) -> native :: WeslResult {
629635 if files. is_null ( ) || root. is_null ( ) || expression. is_null ( ) || options. is_null ( ) {
630- return WeslResult {
636+ return native :: WeslResult {
631637 success : false ,
632638 data : ptr:: null ( ) ,
633- error : WeslError {
639+ error : native :: WeslError {
634640 source : ptr:: null ( ) ,
635641 message : create_c_string ( "Invalid parameters" ) ,
636642 diagnostics : ptr:: null ( ) ,
@@ -648,10 +654,10 @@ pub unsafe extern "C" fn wesl_eval(
648654 let root_path = match root_str. parse ( ) {
649655 Ok ( path) => path,
650656 Err ( e) => {
651- return WeslResult {
657+ return native :: WeslResult {
652658 success : false ,
653659 data : ptr:: null ( ) ,
654- error : WeslError {
660+ error : native :: WeslError {
655661 source : ptr:: null ( ) ,
656662 message : create_c_string ( & format ! ( "Invalid root path: {e}" ) ) ,
657663 diagnostics : ptr:: null ( ) ,
@@ -690,27 +696,27 @@ pub unsafe extern "C" fn wesl_eval(
690696 keep_root : opts. keep_root ,
691697 } )
692698 . use_sourcemap ( opts. sourcemap )
693- . set_mangler ( opts. mangler . into ( ) ) ;
699+ . set_mangler ( map_mangler_kind ( opts. mangler ) . expect ( "invalid mangler kind" ) ) ;
694700
695701 match compiler. compile ( & root_path) {
696702 Ok ( result) => match result. eval ( & expr_str) {
697- Ok ( eval_result) => WeslResult {
703+ Ok ( eval_result) => native :: WeslResult {
698704 success : true ,
699705 data : create_c_string ( & eval_result. inst . to_string ( ) ) ,
700- error : WeslError {
706+ error : native :: WeslError {
701707 source : ptr:: null ( ) ,
702708 message : ptr:: null ( ) ,
703709 diagnostics : ptr:: null ( ) ,
704710 diagnostics_len : 0 ,
705711 } ,
706712 } ,
707- Err ( e) => WeslResult {
713+ Err ( e) => native :: WeslResult {
708714 success : false ,
709715 data : ptr:: null ( ) ,
710716 error : wesl_error_to_c ( e) ,
711717 } ,
712718 } ,
713- Err ( e) => WeslResult {
719+ Err ( e) => native :: WeslResult {
714720 success : false ,
715721 data : ptr:: null ( ) ,
716722 error : wesl_error_to_c ( e) ,
@@ -733,19 +739,19 @@ pub unsafe extern "C" fn wesl_eval(
733739#[ cfg( feature = "eval" ) ]
734740#[ unsafe( no_mangle) ]
735741pub unsafe extern "C" fn wesl_exec (
736- files : * const WeslStringMap ,
742+ files : * const native :: WeslStringMap ,
737743 root : * const c_char ,
738744 entrypoint : * const c_char ,
739- options : * const WeslCompileOptions ,
740- resources : * const WeslBindingArray ,
741- overrides : * const WeslStringMap ,
742- features : * const WeslBoolMap ,
743- ) -> WeslExecResult {
745+ options : * const native :: WeslCompileOptions ,
746+ resources : * const native :: WeslBindingArray ,
747+ overrides : * const native :: WeslStringMap ,
748+ features : * const native :: WeslBoolMap ,
749+ ) -> native :: WeslExecResult {
744750 if files. is_null ( ) || root. is_null ( ) || entrypoint. is_null ( ) || options. is_null ( ) {
745- return WeslExecResult {
751+ return native :: WeslExecResult {
746752 success : false ,
747753 resources : ptr:: null ( ) ,
748- error : WeslError {
754+ error : native :: WeslError {
749755 source : ptr:: null ( ) ,
750756 message : create_c_string ( "Invalid parameters" ) ,
751757 diagnostics : ptr:: null ( ) ,
@@ -765,10 +771,10 @@ pub unsafe extern "C" fn wesl_exec(
765771 let root_path = match root_str. parse ( ) {
766772 Ok ( path) => path,
767773 Err ( e) => {
768- return WeslExecResult {
774+ return native :: WeslExecResult {
769775 success : false ,
770776 resources : ptr:: null ( ) ,
771- error : WeslError {
777+ error : native :: WeslError {
772778 source : ptr:: null ( ) ,
773779 message : create_c_string ( & format ! ( "Invalid root path: {e}" ) ) ,
774780 diagnostics : ptr:: null ( ) ,
@@ -807,7 +813,7 @@ pub unsafe extern "C" fn wesl_exec(
807813 keep_root : opts. keep_root ,
808814 } )
809815 . use_sourcemap ( opts. sourcemap )
810- . set_mangler ( opts. mangler . into ( ) ) ;
816+ . set_mangler ( map_mangler_kind ( opts. mangler ) . expect ( "invalid mangler kind" ) ) ;
811817
812818 match compiler. compile ( & root_path) {
813819 Ok ( result) => {
@@ -821,7 +827,7 @@ pub unsafe extern "C" fn wesl_exec(
821827 let parsed_resources = match parsed_resources {
822828 Ok ( resources) => resources,
823829 Err ( e) => {
824- return WeslExecResult {
830+ return native :: WeslExecResult {
825831 success : false ,
826832 resources : ptr:: null ( ) ,
827833 error : wesl_error_to_c ( e) ,
@@ -847,7 +853,7 @@ pub unsafe extern "C" fn wesl_exec(
847853 let parsed_overrides = match parsed_overrides {
848854 Ok ( overrides) => overrides,
849855 Err ( e) => {
850- return WeslExecResult {
856+ return native :: WeslExecResult {
851857 success : false ,
852858 resources : ptr:: null ( ) ,
853859 error : wesl_error_to_c ( e) ,
@@ -860,7 +866,7 @@ pub unsafe extern "C" fn wesl_exec(
860866 match result. exec ( & entrypoint_str, inputs, parsed_resources, parsed_overrides) {
861867 Ok ( exec_result) => {
862868 // convert resources back to C format
863- let output_resources: Vec < WeslBinding > = resources_vec
869+ let output_resources: Vec < native :: WeslBinding > = resources_vec
864870 . iter ( )
865871 . filter_map ( |r| {
866872 let resource = exec_result. resource ( r. group , r. binding ) ?;
@@ -875,25 +881,25 @@ pub unsafe extern "C" fn wesl_exec(
875881 } )
876882 . collect ( ) ;
877883
878- WeslExecResult {
884+ native :: WeslExecResult {
879885 success : true ,
880886 resources : create_c_binding_array ( output_resources) ,
881- error : WeslError {
887+ error : native :: WeslError {
882888 source : ptr:: null ( ) ,
883889 message : ptr:: null ( ) ,
884890 diagnostics : ptr:: null ( ) ,
885891 diagnostics_len : 0 ,
886892 } ,
887893 }
888894 }
889- Err ( e) => WeslExecResult {
895+ Err ( e) => native :: WeslExecResult {
890896 success : false ,
891897 resources : ptr:: null ( ) ,
892898 error : wesl_error_to_c ( e) ,
893899 } ,
894900 }
895901 }
896- Err ( e) => WeslExecResult {
902+ Err ( e) => native :: WeslExecResult {
897903 success : false ,
898904 resources : ptr:: null ( ) ,
899905 error : wesl_error_to_c ( e) ,
@@ -977,14 +983,14 @@ pub unsafe extern "C" fn wesl_free_exec_result(result: *mut native::WeslExecResu
977983 for i in 0 ..resources. len {
978984 let binding = * resources. items . add ( i) ;
979985 if !binding. data . is_null ( ) {
980- let _ = Box :: from_raw ( std:: slice :: from_raw_parts_mut (
986+ let _ = Box :: from_raw ( std:: ptr :: slice_from_raw_parts_mut (
981987 binding. data as * mut u8 ,
982988 binding. data_len ,
983989 ) ) ;
984990 }
985991 }
986992
987- let _ = Box :: from_raw ( std:: slice :: from_raw_parts_mut (
993+ let _ = Box :: from_raw ( std:: ptr :: slice_from_raw_parts_mut (
988994 resources. items as * mut native:: WeslBinding ,
989995 resources. len ,
990996 ) ) ;
0 commit comments