From c118227b4e1abe7cc434290edb6c6c298f5014d2 Mon Sep 17 00:00:00 2001 From: Osei Fortune Date: Sat, 14 Nov 2026 06:26:00 -0400 Subject: [PATCH] fix(webgpu): finish the wgpu sync port for napi and Windows canvas-napi did not map the new snorm10-10-10-2 vertex format, and the dx12 texture_from_raw call was missing the new drop callback argument. Also adds the enum value to the generated C headers. --- crates/canvas-c/src/webgpu/gpu_shared_frame.rs | 1 + crates/canvas-napi/src/gpu/enums.rs | 4 ++++ crates/canvas-napi/src/gpu/pipeline.rs | 3 ++- .../canvas/src/main/cpp/include/canvas_native.h | 1 + .../canvas-ios/CanvasNative/include/canvas_native.h | 1 + 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/crates/canvas-c/src/webgpu/gpu_shared_frame.rs b/crates/canvas-c/src/webgpu/gpu_shared_frame.rs index 884b74339..f5b076786 100644 --- a/crates/canvas-c/src/webgpu/gpu_shared_frame.rs +++ b/crates/canvas-c/src/webgpu/gpu_shared_frame.rs @@ -108,6 +108,7 @@ pub(crate) unsafe fn import_and_stage( size, 1, 1, + None, ); let descriptor = wgpu_core::resource::TextureDescriptor { label: Some(Cow::Borrowed("videoBlit:SharedFrame")), diff --git a/crates/canvas-napi/src/gpu/enums.rs b/crates/canvas-napi/src/gpu/enums.rs index 1415f8b8f..aa3d1df2c 100644 --- a/crates/canvas-napi/src/gpu/enums.rs +++ b/crates/canvas-napi/src/gpu/enums.rs @@ -413,6 +413,8 @@ pub enum GPUVertexFormat { unorm1010102, #[napi(value = "unorm8x4-bgra")] unorm8x4Bgra, + #[napi(value = "snorm10-10-10-2")] + snorm1010102, } impl From for GPUVertexFormat { @@ -453,6 +455,7 @@ impl From for GPUVertexFormat { CanvasVertexFormat::Float64x3 => GPUVertexFormat::float64x3, CanvasVertexFormat::Float64x4 => GPUVertexFormat::float64x4, CanvasVertexFormat::Unorm10_10_10_2 => GPUVertexFormat::unorm1010102, + CanvasVertexFormat::Snorm10_10_10_2 => GPUVertexFormat::snorm1010102, CanvasVertexFormat::Uint8 => GPUVertexFormat::uint8, CanvasVertexFormat::Sint8 => GPUVertexFormat::sint8, CanvasVertexFormat::Unorm8 => GPUVertexFormat::unorm8, @@ -505,6 +508,7 @@ impl Into for GPUVertexFormat { GPUVertexFormat::float64x3 => CanvasVertexFormat::Float64x3, GPUVertexFormat::float64x4 => CanvasVertexFormat::Float64x4, GPUVertexFormat::unorm1010102 => CanvasVertexFormat::Unorm10_10_10_2, + GPUVertexFormat::snorm1010102 => CanvasVertexFormat::Snorm10_10_10_2, GPUVertexFormat::uint8 => CanvasVertexFormat::Uint8, GPUVertexFormat::sint8 => CanvasVertexFormat::Sint8, GPUVertexFormat::unorm8 => CanvasVertexFormat::Unorm8, diff --git a/crates/canvas-napi/src/gpu/pipeline.rs b/crates/canvas-napi/src/gpu/pipeline.rs index b8e2daaa0..3f924b8f4 100644 --- a/crates/canvas-napi/src/gpu/pipeline.rs +++ b/crates/canvas-napi/src/gpu/pipeline.rs @@ -94,7 +94,7 @@ pub(crate) fn with_compute_pipeline( Ok(f(c_str(&label), layout(descriptor), &programmable)) } -const VERTEX_FORMATS: [(&str, CanvasVertexFormat); 45] = [ +const VERTEX_FORMATS: [(&str, CanvasVertexFormat); 46] = [ ("uint8", CanvasVertexFormat::Uint8), ("uint8x2", CanvasVertexFormat::Uint8x2), ("uint8x4", CanvasVertexFormat::Uint8x4), @@ -140,6 +140,7 @@ const VERTEX_FORMATS: [(&str, CanvasVertexFormat); 45] = [ ("float64x4", CanvasVertexFormat::Float64x4), ("unorm10-10-10-2", CanvasVertexFormat::Unorm10_10_10_2), ("unorm8x4-bgra", CanvasVertexFormat::Unorm8x4Bgra), + ("snorm10-10-10-2", CanvasVertexFormat::Snorm10_10_10_2), ]; /// A vertex attribute `format`: `parseVertexFormat`'s index (its order is canvas-c's diff --git a/packages/canvas/src-native/canvas-android/canvas/src/main/cpp/include/canvas_native.h b/packages/canvas/src-native/canvas-android/canvas/src/main/cpp/include/canvas_native.h index 0d0fd165e..4d20d82a1 100644 --- a/packages/canvas/src-native/canvas-android/canvas/src/main/cpp/include/canvas_native.h +++ b/packages/canvas/src-native/canvas-android/canvas/src/main/cpp/include/canvas_native.h @@ -599,6 +599,7 @@ typedef enum CanvasVertexFormat { CanvasVertexFormatFloat64x4 = 42, CanvasVertexFormatUnorm10_10_10_2 = 43, CanvasVertexFormatUnorm8x4Bgra = 44, + CanvasVertexFormatSnorm10_10_10_2 = 45, } CanvasVertexFormat; typedef enum CanvasVertexStepMode { diff --git a/packages/canvas/src-native/canvas-ios/CanvasNative/include/canvas_native.h b/packages/canvas/src-native/canvas-ios/CanvasNative/include/canvas_native.h index 9e5598aa1..8257568f8 100644 --- a/packages/canvas/src-native/canvas-ios/CanvasNative/include/canvas_native.h +++ b/packages/canvas/src-native/canvas-ios/CanvasNative/include/canvas_native.h @@ -599,6 +599,7 @@ typedef enum CanvasVertexFormat { CanvasVertexFormatFloat64x4 = 42, CanvasVertexFormatUnorm10_10_10_2 = 43, CanvasVertexFormatUnorm8x4Bgra = 44, + CanvasVertexFormatSnorm10_10_10_2 = 45, } CanvasVertexFormat; typedef enum CanvasVertexStepMode {