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.
- package/Cargo.toml +98 -98
- package/dist/cli.js +48 -48
- package/dist/pack.js +1 -1
- package/dist/rox-macos-universal +0 -0
- package/dist/roxify_native +0 -0
- package/dist/roxify_native-macos-arm64 +0 -0
- package/dist/roxify_native-macos-x64 +0 -0
- package/dist/roxify_native.exe +0 -0
- package/dist/utils/decoder.js +59 -7
- package/dist/utils/encoder.js +12 -23
- package/dist/utils/optimization.js +2 -24
- package/dist/utils/zstd.js +1 -1
- package/native/bwt.rs +56 -56
- package/native/context_mixing.rs +117 -117
- package/native/core.rs +423 -382
- package/native/encoder.rs +635 -629
- package/native/gpu.rs +116 -116
- package/native/hybrid.rs +287 -287
- package/native/lib.rs +489 -489
- package/native/main.rs +527 -534
- package/native/mtf.rs +106 -106
- package/native/packer.rs +447 -447
- package/native/png_utils.rs +538 -538
- package/native/rans_byte.rs +286 -286
- package/native/streaming.rs +212 -212
- package/native/streaming_encode.rs +7 -4
- package/native/test_small_bwt.rs +31 -31
- package/package.json +114 -114
- package/roxify_native-aarch64-apple-darwin.node +0 -0
- package/roxify_native-aarch64-pc-windows-msvc.node +0 -0
- package/roxify_native-aarch64-unknown-linux-gnu.node +0 -0
- package/roxify_native-i686-pc-windows-msvc.node +0 -0
- package/roxify_native-i686-unknown-linux-gnu.node +0 -0
- package/roxify_native-x86_64-apple-darwin.node +0 -0
- package/roxify_native-x86_64-pc-windows-msvc.node +0 -0
- package/roxify_native-x86_64-unknown-linux-gnu.node +0 -0
- 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
|
+
}
|