Skip to content

Commit 0747880

Browse files
committed
fix compilation of wesl-c. somehow it should not have been merged in this state.
1 parent 8736d80 commit 0747880

2 files changed

Lines changed: 57 additions & 45 deletions

File tree

Cargo.lock

Lines changed: 9 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/wesl-c/src/lib.rs

Lines changed: 48 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::borrow::Cow;
55
use std::collections::HashMap;
66
use std::ffi::{CStr, CString};
77
use std::ops::Deref;
8-
use std::os::raw::{c_char, c_uint, c_void};
8+
use std::os::raw::{c_char, c_void};
99
use std::ptr;
1010

1111
use 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)]
2830
pub 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")]
180182
fn 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)]
622628
pub 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)]
735741
pub 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

Comments
 (0)