roxify 1.12.11 → 1.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/Cargo.toml +98 -98
  2. package/dist/cli.js +48 -48
  3. package/dist/pack.js +1 -1
  4. package/dist/rox-macos-universal +0 -0
  5. package/dist/roxify_native +0 -0
  6. package/dist/roxify_native-macos-arm64 +0 -0
  7. package/dist/roxify_native-macos-x64 +0 -0
  8. package/dist/roxify_native.exe +0 -0
  9. package/dist/utils/decoder.js +59 -7
  10. package/dist/utils/encoder.js +12 -23
  11. package/dist/utils/optimization.js +2 -24
  12. package/dist/utils/zstd.js +1 -1
  13. package/native/bwt.rs +56 -56
  14. package/native/context_mixing.rs +117 -117
  15. package/native/core.rs +423 -382
  16. package/native/encoder.rs +635 -629
  17. package/native/gpu.rs +116 -116
  18. package/native/hybrid.rs +287 -287
  19. package/native/lib.rs +489 -489
  20. package/native/main.rs +527 -534
  21. package/native/mtf.rs +106 -106
  22. package/native/packer.rs +447 -447
  23. package/native/png_utils.rs +538 -538
  24. package/native/rans_byte.rs +286 -286
  25. package/native/streaming.rs +212 -212
  26. package/native/streaming_encode.rs +7 -4
  27. package/native/test_small_bwt.rs +31 -31
  28. package/package.json +114 -114
  29. package/roxify_native-aarch64-apple-darwin.node +0 -0
  30. package/roxify_native-aarch64-pc-windows-msvc.node +0 -0
  31. package/roxify_native-aarch64-unknown-linux-gnu.node +0 -0
  32. package/roxify_native-i686-pc-windows-msvc.node +0 -0
  33. package/roxify_native-i686-unknown-linux-gnu.node +0 -0
  34. package/roxify_native-x86_64-apple-darwin.node +0 -0
  35. package/roxify_native-x86_64-pc-windows-msvc.node +0 -0
  36. package/roxify_native-x86_64-unknown-linux-gnu.node +0 -0
  37. package/libroxify_native-x86_64-unknown-linux-gnu.node +0 -0
package/native/gpu.rs CHANGED
@@ -1,116 +1,116 @@
1
- use anyhow::{anyhow, Result};
2
- use parking_lot::RwLock;
3
- use std::sync::Arc;
4
- use wgpu::*;
5
- use wgpu::util::DeviceExt;
6
-
7
- pub struct GpuDevice {
8
- device: Device,
9
- queue: Queue,
10
- supported: bool,
11
- adapter_info: String,
12
- }
13
-
14
- pub struct GpuContext {
15
- inner: Arc<RwLock<Option<GpuDevice>>>,
16
- }
17
-
18
- impl GpuContext {
19
- pub async fn new() -> Self {
20
- let instance = Instance::new(InstanceDescriptor {
21
- backends: Backends::all(),
22
- ..Default::default()
23
- });
24
-
25
- let adapter = instance.request_adapter(&RequestAdapterOptions {
26
- power_preference: PowerPreference::HighPerformance,
27
- compatible_surface: None,
28
- force_fallback_adapter: false,
29
- }).await;
30
-
31
- let device_info = if let Some(adapter) = adapter {
32
- match adapter.request_device(&DeviceDescriptor {
33
- label: Some("roxify-compute"),
34
- required_features: Features::empty(),
35
- required_limits: Limits::default(),
36
- }, None).await {
37
- Ok((device, queue)) => {
38
- let info = adapter.get_info();
39
- Some(GpuDevice {
40
- device,
41
- queue,
42
- supported: true,
43
- adapter_info: format!("{:?}", info.driver),
44
- })
45
- }
46
- Err(_) => None,
47
- }
48
- } else {
49
- None
50
- };
51
-
52
- GpuContext {
53
- inner: Arc::new(RwLock::new(device_info)),
54
- }
55
- }
56
-
57
- pub fn is_available(&self) -> bool {
58
- self.inner.read().is_some()
59
- }
60
-
61
- pub fn get_adapter_info(&self) -> Option<String> {
62
- self.inner.read().as_ref().map(|d| d.adapter_info.clone())
63
- }
64
-
65
- pub async fn create_compute_pipeline(
66
- &self,
67
- shader_src: &str,
68
- entry_point: &str,
69
- ) -> Result<ComputePipeline> {
70
- let gpu = self.inner.read();
71
- let gpu = gpu.as_ref().ok_or_else(|| anyhow!("No GPU device available"))?;
72
-
73
- let shader_module = gpu.device.create_shader_module(ShaderModuleDescriptor {
74
- label: Some("compute-shader"),
75
- source: ShaderSource::Wgsl(std::borrow::Cow::Borrowed(shader_src)),
76
- });
77
-
78
- let pipeline_layout = gpu.device.create_pipeline_layout(&PipelineLayoutDescriptor {
79
- label: Some("compute-layout"),
80
- bind_group_layouts: &[],
81
- push_constant_ranges: &[],
82
- });
83
-
84
- Ok(gpu.device.create_compute_pipeline(&ComputePipelineDescriptor {
85
- label: Some("compute-pipeline"),
86
- layout: Some(&pipeline_layout),
87
- module: &shader_module,
88
- entry_point,
89
- }))
90
- }
91
-
92
- pub fn create_buffer_init(&self, data: &[u8], usage: BufferUsages) -> Result<Buffer> {
93
- let gpu = self.inner.read();
94
- let gpu = gpu.as_ref().ok_or_else(|| anyhow!("No GPU device available"))?;
95
-
96
- Ok(gpu.device.create_buffer_init(&util::BufferInitDescriptor {
97
- label: None,
98
- contents: data,
99
- usage,
100
- }))
101
- }
102
- }
103
-
104
- pub fn gpu_available() -> bool {
105
- pollster::block_on(async {
106
- let instance = Instance::new(InstanceDescriptor {
107
- backends: Backends::all(),
108
- ..Default::default()
109
- });
110
- instance.request_adapter(&RequestAdapterOptions {
111
- power_preference: PowerPreference::HighPerformance,
112
- compatible_surface: None,
113
- force_fallback_adapter: false,
114
- }).await.is_some()
115
- })
116
- }
1
+ use anyhow::{anyhow, Result};
2
+ use parking_lot::RwLock;
3
+ use std::sync::Arc;
4
+ use wgpu::*;
5
+ use wgpu::util::DeviceExt;
6
+
7
+ pub struct GpuDevice {
8
+ device: Device,
9
+ queue: Queue,
10
+ supported: bool,
11
+ adapter_info: String,
12
+ }
13
+
14
+ pub struct GpuContext {
15
+ inner: Arc<RwLock<Option<GpuDevice>>>,
16
+ }
17
+
18
+ impl GpuContext {
19
+ pub async fn new() -> Self {
20
+ let instance = Instance::new(InstanceDescriptor {
21
+ backends: Backends::all(),
22
+ ..Default::default()
23
+ });
24
+
25
+ let adapter = instance.request_adapter(&RequestAdapterOptions {
26
+ power_preference: PowerPreference::HighPerformance,
27
+ compatible_surface: None,
28
+ force_fallback_adapter: false,
29
+ }).await;
30
+
31
+ let device_info = if let Some(adapter) = adapter {
32
+ match adapter.request_device(&DeviceDescriptor {
33
+ label: Some("roxify-compute"),
34
+ required_features: Features::empty(),
35
+ required_limits: Limits::default(),
36
+ }, None).await {
37
+ Ok((device, queue)) => {
38
+ let info = adapter.get_info();
39
+ Some(GpuDevice {
40
+ device,
41
+ queue,
42
+ supported: true,
43
+ adapter_info: format!("{:?}", info.driver),
44
+ })
45
+ }
46
+ Err(_) => None,
47
+ }
48
+ } else {
49
+ None
50
+ };
51
+
52
+ GpuContext {
53
+ inner: Arc::new(RwLock::new(device_info)),
54
+ }
55
+ }
56
+
57
+ pub fn is_available(&self) -> bool {
58
+ self.inner.read().is_some()
59
+ }
60
+
61
+ pub fn get_adapter_info(&self) -> Option<String> {
62
+ self.inner.read().as_ref().map(|d| d.adapter_info.clone())
63
+ }
64
+
65
+ pub async fn create_compute_pipeline(
66
+ &self,
67
+ shader_src: &str,
68
+ entry_point: &str,
69
+ ) -> Result<ComputePipeline> {
70
+ let gpu = self.inner.read();
71
+ let gpu = gpu.as_ref().ok_or_else(|| anyhow!("No GPU device available"))?;
72
+
73
+ let shader_module = gpu.device.create_shader_module(ShaderModuleDescriptor {
74
+ label: Some("compute-shader"),
75
+ source: ShaderSource::Wgsl(std::borrow::Cow::Borrowed(shader_src)),
76
+ });
77
+
78
+ let pipeline_layout = gpu.device.create_pipeline_layout(&PipelineLayoutDescriptor {
79
+ label: Some("compute-layout"),
80
+ bind_group_layouts: &[],
81
+ push_constant_ranges: &[],
82
+ });
83
+
84
+ Ok(gpu.device.create_compute_pipeline(&ComputePipelineDescriptor {
85
+ label: Some("compute-pipeline"),
86
+ layout: Some(&pipeline_layout),
87
+ module: &shader_module,
88
+ entry_point,
89
+ }))
90
+ }
91
+
92
+ pub fn create_buffer_init(&self, data: &[u8], usage: BufferUsages) -> Result<Buffer> {
93
+ let gpu = self.inner.read();
94
+ let gpu = gpu.as_ref().ok_or_else(|| anyhow!("No GPU device available"))?;
95
+
96
+ Ok(gpu.device.create_buffer_init(&util::BufferInitDescriptor {
97
+ label: None,
98
+ contents: data,
99
+ usage,
100
+ }))
101
+ }
102
+ }
103
+
104
+ pub fn gpu_available() -> bool {
105
+ pollster::block_on(async {
106
+ let instance = Instance::new(InstanceDescriptor {
107
+ backends: Backends::all(),
108
+ ..Default::default()
109
+ });
110
+ instance.request_adapter(&RequestAdapterOptions {
111
+ power_preference: PowerPreference::HighPerformance,
112
+ compatible_surface: None,
113
+ force_fallback_adapter: false,
114
+ }).await.is_some()
115
+ })
116
+ }