Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9d04ff2154 | ||
|
|
c6cfb2a02a | ||
|
|
b83f192847 | ||
|
|
ecb648818b | ||
|
|
5fbf8944d7 |
Generated
+25
-25
@@ -1221,7 +1221,7 @@ checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "darkroom-android"
|
name = "darkroom-android"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android_logger",
|
"android_logger",
|
||||||
"dr-plat",
|
"dr-plat",
|
||||||
@@ -1234,7 +1234,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "darkroom-desktop"
|
name = "darkroom-desktop"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"dr-plat",
|
"dr-plat",
|
||||||
@@ -1408,7 +1408,7 @@ checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-bench"
|
name = "dr-bench"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"dr-catalog",
|
"dr-catalog",
|
||||||
@@ -1425,7 +1425,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-catalog"
|
name = "dr-catalog"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dr-face",
|
"dr-face",
|
||||||
"dr-plat",
|
"dr-plat",
|
||||||
@@ -1440,7 +1440,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-decode"
|
name = "dr-decode"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dr-types",
|
"dr-types",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
@@ -1454,7 +1454,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-export"
|
name = "dr-export"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dr-decode",
|
"dr-decode",
|
||||||
"dr-gpu",
|
"dr-gpu",
|
||||||
@@ -1473,7 +1473,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-face"
|
name = "dr-face"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dr-inference-engine",
|
"dr-inference-engine",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
@@ -1486,7 +1486,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-film"
|
name = "dr-film"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"log",
|
"log",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -1495,7 +1495,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-gpu"
|
name = "dr-gpu"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytemuck",
|
"bytemuck",
|
||||||
"dr-decode",
|
"dr-decode",
|
||||||
@@ -1513,7 +1513,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-inference-engine"
|
name = "dr-inference-engine"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libloading",
|
"libloading",
|
||||||
"log",
|
"log",
|
||||||
@@ -1527,7 +1527,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-ingest"
|
name = "dr-ingest"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dr-plat",
|
"dr-plat",
|
||||||
"dr-types",
|
"dr-types",
|
||||||
@@ -1539,7 +1539,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-lens"
|
name = "dr-lens"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lensfun",
|
"lensfun",
|
||||||
"log",
|
"log",
|
||||||
@@ -1547,7 +1547,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-pano"
|
name = "dr-pano"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dr-decode",
|
"dr-decode",
|
||||||
"dr-inference-engine",
|
"dr-inference-engine",
|
||||||
@@ -1561,7 +1561,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-pipeline"
|
name = "dr-pipeline"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dr-types",
|
"dr-types",
|
||||||
"log",
|
"log",
|
||||||
@@ -1570,7 +1570,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-plat"
|
name = "dr-plat"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android-native-keyring-store",
|
"android-native-keyring-store",
|
||||||
"dr-types",
|
"dr-types",
|
||||||
@@ -1586,7 +1586,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-preset-xmp"
|
name = "dr-preset-xmp"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dr-pipeline",
|
"dr-pipeline",
|
||||||
"log",
|
"log",
|
||||||
@@ -1596,7 +1596,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-segment"
|
name = "dr-segment"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dr-inference-engine",
|
"dr-inference-engine",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
@@ -1609,7 +1609,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-sync"
|
name = "dr-sync"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"dr-plat",
|
"dr-plat",
|
||||||
@@ -1623,7 +1623,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-sync-folder"
|
name = "dr-sync-folder"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"dr-sync",
|
"dr-sync",
|
||||||
@@ -1635,7 +1635,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-sync-nextcloud"
|
name = "dr-sync-nextcloud"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"dr-decode",
|
"dr-decode",
|
||||||
@@ -1657,7 +1657,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-thumbs"
|
name = "dr-thumbs"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dr-types",
|
"dr-types",
|
||||||
"jpeg-encoder",
|
"jpeg-encoder",
|
||||||
@@ -1669,7 +1669,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-types"
|
name = "dr-types"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -1678,7 +1678,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-ui"
|
name = "dr-ui"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@@ -1720,7 +1720,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dr-xmp"
|
name = "dr-xmp"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dr-types",
|
"dr-types",
|
||||||
"log",
|
"log",
|
||||||
@@ -7021,7 +7021,7 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "traceability"
|
name = "traceability"
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"serde",
|
"serde",
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,7 @@ members = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.13.0"
|
version = "0.13.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
rust-version = "1.92"
|
rust-version = "1.92"
|
||||||
license = "GPL-3.0-or-later"
|
license = "GPL-3.0-or-later"
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ fn unpack_bundled_models(app: &slint::android::AndroidApp) {
|
|||||||
// The int8 forms beside the three detectors are what the Hexagon runs
|
// The int8 forms beside the three detectors are what the Hexagon runs
|
||||||
// (docs/inference.md §5); the engine loads the sibling when the probe
|
// (docs/inference.md §5); the engine loads the sibling when the probe
|
||||||
// chose that rung and ignores it otherwise.
|
// chose that rung and ignores it otherwise.
|
||||||
const BUNDLED: [(&std::ffi::CStr, &str); 13] = [
|
const BUNDLED: [(&std::ffi::CStr, &str); 14] = [
|
||||||
(c"models/scrfd_500m_640.onnx", "scrfd_500m_640.onnx"),
|
(c"models/scrfd_500m_640.onnx", "scrfd_500m_640.onnx"),
|
||||||
(
|
(
|
||||||
c"models/scrfd_500m_640.int8.onnx",
|
c"models/scrfd_500m_640.int8.onnx",
|
||||||
|
|||||||
@@ -83,10 +83,14 @@ fn main() -> anyhow::Result<()> {
|
|||||||
/// `DARKROOM_ORT_DIR` is for a developer pointing at a runtime that is not
|
/// `DARKROOM_ORT_DIR` is for a developer pointing at a runtime that is not
|
||||||
/// installed — the wheel's `capi` directory, say. Then beside the executable
|
/// installed — the wheel's `capi` directory, say. Then beside the executable
|
||||||
/// and in the package's private library directory, for a package that
|
/// and in the package's private library directory, for a package that
|
||||||
/// bundles its own; then the Flatpak prefix; then the system library
|
/// bundles its own; then the user's own `runtime/` beside the models, where
|
||||||
/// directory, for a distribution that ships ONNX Runtime as a package of its
|
/// `tools/fetch-desktop-runtime.sh` puts one; then the Flatpak prefix; then
|
||||||
/// own. A system copy whose GPU providers do not load is not a problem: the
|
/// the system library directory, for a distribution that ships ONNX Runtime
|
||||||
/// probe builds a real session before believing a provider.
|
/// as a package of its own. The user's copy outranks the system's because
|
||||||
|
/// the system's is the one most likely to be built without the GPU
|
||||||
|
/// providers, or against the wrong cuDNN — and a system copy whose providers
|
||||||
|
/// do not load is not a problem, only a slower app: the probe builds a real
|
||||||
|
/// session before believing a provider.
|
||||||
fn runtime_dirs() -> Vec<PathBuf> {
|
fn runtime_dirs() -> Vec<PathBuf> {
|
||||||
let mut dirs = Vec::new();
|
let mut dirs = Vec::new();
|
||||||
if let Some(dir) = std::env::var_os("DARKROOM_ORT_DIR") {
|
if let Some(dir) = std::env::var_os("DARKROOM_ORT_DIR") {
|
||||||
@@ -98,6 +102,7 @@ fn runtime_dirs() -> Vec<PathBuf> {
|
|||||||
dirs.push(bin.join("../lib/darkroom"));
|
dirs.push(bin.join("../lib/darkroom"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
dirs.push(dr_ui::inference::user_runtime_dir());
|
||||||
#[cfg(target_os = "linux")]
|
#[cfg(target_os = "linux")]
|
||||||
dirs.extend([
|
dirs.extend([
|
||||||
PathBuf::from("/app/lib/darkroom"),
|
PathBuf::from("/app/lib/darkroom"),
|
||||||
|
|||||||
@@ -1347,6 +1347,53 @@ mod tests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn a_grey_step_edge_stays_grey() {
|
||||||
|
// A flat patch cannot tell the Malvar kernels from any other set of
|
||||||
|
// weights that sum to zero. An edge can. A grey vertical step, so
|
||||||
|
// every photosite records the same profile, must come back with the
|
||||||
|
// three channels close together on both sides; any spread is false
|
||||||
|
// colour from interpolating across the edge.
|
||||||
|
//
|
||||||
|
// The bound is set by the paper's kernels, which peak at 0.19 here.
|
||||||
|
// With the ±2 terms of the green-site kernels transposed — the bug
|
||||||
|
// this test was written against — the peak is 0.375.
|
||||||
|
let Some(ctx) = ctx() else { return };
|
||||||
|
let d = Demosaicer::new(&ctx).expect("demosaicer");
|
||||||
|
|
||||||
|
let size = 32u32;
|
||||||
|
let white = 16383u16;
|
||||||
|
let mut raw = flat_cfa(CfaPattern::Rggb, size, [0, 0, 0], 0, white);
|
||||||
|
for y in 0..size {
|
||||||
|
for x in size / 2..size {
|
||||||
|
raw.data[(y * size + x) as usize] = white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let img = d.run(&raw).expect("demosaic");
|
||||||
|
let px = read_rgba(&ctx, &img);
|
||||||
|
let (w, _) = img.size();
|
||||||
|
|
||||||
|
let mut worst = (0.0f32, 0u32, 0u32);
|
||||||
|
for y in 2..size - 2 {
|
||||||
|
for x in 2..size - 2 {
|
||||||
|
let p = px[(y * w + x) as usize];
|
||||||
|
let spread = (p[0] - p[1]).abs().max((p[2] - p[1]).abs());
|
||||||
|
if spread > worst.0 {
|
||||||
|
worst = (spread, x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert!(
|
||||||
|
worst.0 < 0.25,
|
||||||
|
"false colour of {} at ({}, {}) on a grey edge — the green-site \
|
||||||
|
kernels are interpolating across the edge",
|
||||||
|
worst.0,
|
||||||
|
worst.1,
|
||||||
|
worst.2
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn output_is_free_of_nan_and_negatives() {
|
fn output_is_free_of_nan_and_negatives() {
|
||||||
// f16 NaN propagates silently through every later stage; a negative
|
// f16 NaN propagates silently through every later stage; a negative
|
||||||
|
|||||||
@@ -160,12 +160,18 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
|
|||||||
// Green is measured. Red and blue are interpolated from their own
|
// Green is measured. Red and blue are interpolated from their own
|
||||||
// axis, with a correction from the green Laplacian.
|
// axis, with a correction from the green Laplacian.
|
||||||
//
|
//
|
||||||
// Malvar "G at R/B locations" kernels, transposed per axis:
|
// Malvar "R at green in R row" kernel, and its transpose:
|
||||||
// chroma along the row: (5c + 4(w1+e1) - (nw+ne+sw+se) - (n2+s2) + 0.5(w2+e2)) / 8
|
// chroma along the row: (5c + 4(w1+e1) - (nw+ne+sw+se) - (w2+e2) + 0.5(n2+s2)) / 8
|
||||||
|
//
|
||||||
|
// The -1 goes on the two greens *along* the chroma axis and the +0.5
|
||||||
|
// on the pair across it. Transposed, both kernels still sum to zero
|
||||||
|
// and reconstruct a flat patch exactly, but on an edge the correction
|
||||||
|
// at green sites is half strength and the false colour doubles: a
|
||||||
|
// blue/yellow zipper around every clipped highlight.
|
||||||
let along_row =
|
let along_row =
|
||||||
(5.0 * c + 4.0 * (w1 + e1) - diag1 - vert2 + 0.5 * horiz2) * 0.125;
|
(5.0 * c + 4.0 * (w1 + e1) - diag1 - horiz2 + 0.5 * vert2) * 0.125;
|
||||||
let along_col =
|
let along_col =
|
||||||
(5.0 * c + 4.0 * (n1 + s1) - diag1 - horiz2 + 0.5 * vert2) * 0.125;
|
(5.0 * c + 4.0 * (n1 + s1) - diag1 - vert2 + 0.5 * horiz2) * 0.125;
|
||||||
|
|
||||||
let red_horizontal = red_is_horizontal(gid.x, gid.y);
|
let red_horizontal = red_is_horizontal(gid.x, gid.y);
|
||||||
let r = select(along_col, along_row, red_horizontal);
|
let r = select(along_col, along_row, red_horizontal);
|
||||||
|
|||||||
@@ -155,6 +155,8 @@ pub struct Status {
|
|||||||
/// Engines compiled and engines wanted, for a compiling rung; `(0, 0)`
|
/// Engines compiled and engines wanted, for a compiling rung; `(0, 0)`
|
||||||
/// otherwise.
|
/// otherwise.
|
||||||
pub engines: (usize, usize),
|
pub engines: (usize, usize),
|
||||||
|
/// Every rung above the selected one that was tried, and why it lost.
|
||||||
|
pub failed: Vec<(Rung, String)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Status {
|
impl Status {
|
||||||
@@ -399,6 +401,7 @@ pub fn status() -> Status {
|
|||||||
runtime: api::runtime(),
|
runtime: api::runtime(),
|
||||||
rung,
|
rung,
|
||||||
reason: s.cache.reason.clone(),
|
reason: s.cache.reason.clone(),
|
||||||
|
failed: s.cache.failed.clone(),
|
||||||
probing: s.probing,
|
probing: s.probing,
|
||||||
engines: if rung.compiles() {
|
engines: if rung.compiles() {
|
||||||
(s.cache.compiled.len(), s.wanted)
|
(s.cache.compiled.len(), s.wanted)
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@
|
|||||||
# makes `makepkg -si` in this directory install what you are actually working
|
# makes `makepkg -si` in this directory install what you are actually working
|
||||||
# on. Swap `source` for a tagged tarball when there is something to release.
|
# on. Swap `source` for a tagged tarball when there is something to release.
|
||||||
pkgname=darkroom
|
pkgname=darkroom
|
||||||
pkgver=0.13.0
|
pkgver=0.13.1
|
||||||
# Back to 1 with the version: a new pkgver is a new archive name, so there is
|
# Back to 1 with the version: a new pkgver is a new archive name, so there is
|
||||||
# nothing for makepkg to reuse and nothing for a release number to disambiguate.
|
# nothing for makepkg to reuse and nothing for a release number to disambiguate.
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
|
|||||||
Executable
+32
@@ -0,0 +1,32 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Put a GPU-capable ONNX Runtime where the desktop app looks for one
|
||||||
|
# (docs/inference.md §3): `runtime/` beside the models in the user data
|
||||||
|
# directory, ahead of the system library.
|
||||||
|
#
|
||||||
|
# ./tools/fetch-desktop-runtime.sh [DEST]
|
||||||
|
#
|
||||||
|
# The source is the `onnxruntime-gpu` wheel: the one build that carries the
|
||||||
|
# CUDA *and* TensorRT providers against the cuDNN and TensorRT majors current
|
||||||
|
# on this machine. Distribution packages tend to have neither — Arch's
|
||||||
|
# `onnxruntime-opt-cuda` is built without TensorRT and against cuDNN 8 — and
|
||||||
|
# the probe rejects them correctly and leaves the app on the CPU provider,
|
||||||
|
# which is what this script exists to fix. Nothing NVIDIA is bundled here:
|
||||||
|
# the providers load CUDA, cuDNN and TensorRT from the system, and if those
|
||||||
|
# are missing the probe says so and the app stays on the CPU.
|
||||||
|
set -euo pipefail
|
||||||
|
DEST="${1:-${XDG_DATA_HOME:-${HOME}/.local/share}/darkroom/runtime}"
|
||||||
|
WORK="$(mktemp -d -p /var/tmp fetch-desktop-runtime.XXXXXX)"
|
||||||
|
trap 'rm -rf "${WORK}"' EXIT
|
||||||
|
|
||||||
|
echo "==> downloading the onnxruntime-gpu wheel"
|
||||||
|
uv venv --python 3.12 "${WORK}/venv" >/dev/null
|
||||||
|
VIRTUAL_ENV="${WORK}/venv" uv pip install --quiet onnxruntime-gpu
|
||||||
|
CAPI="$(find "${WORK}/venv" -type d -path '*/onnxruntime/capi' | head -1)"
|
||||||
|
[[ -n "${CAPI}" ]] || { echo "error: no capi directory in the wheel" >&2; exit 1; }
|
||||||
|
|
||||||
|
mkdir -p "${DEST}"
|
||||||
|
# The runtime and its provider libraries; not the Python binding.
|
||||||
|
cp "${CAPI}"/libonnxruntime.so* "${CAPI}"/libonnxruntime_providers_*.so "${DEST}/"
|
||||||
|
echo "==> runtime in ${DEST}:"
|
||||||
|
ls -1 "${DEST}" | sed 's/^/ /'
|
||||||
|
echo " (the app finds it on its next launch; Settings › About › Inference says what it chose)"
|
||||||
@@ -60,6 +60,18 @@ pub fn init(runtime_dirs: Vec<PathBuf>) {
|
|||||||
crate::memory::evict_at(crate::memory::Tier::Gpu, dr_inference_engine::release_all);
|
crate::memory::evict_at(crate::memory::Tier::Gpu, dr_inference_engine::release_all);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Where a person can put a runtime by hand: `runtime/` beside the models,
|
||||||
|
/// searched before any system library. The system copy on the reference
|
||||||
|
/// desktop is built without TensorRT and against the wrong cuDNN, and a
|
||||||
|
/// working one is four files from the `onnxruntime-gpu` wheel; this is
|
||||||
|
/// where they go, and `tools/fetch-desktop-runtime.sh` puts them there.
|
||||||
|
pub fn user_runtime_dir() -> PathBuf {
|
||||||
|
crate::library::shared_face_models_dir()
|
||||||
|
.parent()
|
||||||
|
.map(|p| p.join("runtime"))
|
||||||
|
.unwrap_or_else(|| PathBuf::from("runtime"))
|
||||||
|
}
|
||||||
|
|
||||||
/// Which form the current backend loads `detector` in, given the files on
|
/// Which form the current backend loads `detector` in, given the files on
|
||||||
/// this device — the fact `faces.model_id` has to carry (§7).
|
/// this device — the fact `faces.model_id` has to carry (§7).
|
||||||
///
|
///
|
||||||
@@ -94,8 +106,18 @@ pub fn about_lines() -> (String, String) {
|
|||||||
status.engines.0,
|
status.engines.0,
|
||||||
status.engines.1
|
status.engines.1
|
||||||
)
|
)
|
||||||
} else {
|
} else if status.failed.is_empty() {
|
||||||
status.reason
|
status.reason
|
||||||
|
} else {
|
||||||
|
// Every rung that was tried and why it lost, not only the first:
|
||||||
|
// "TensorRT: not enabled in this build" says nothing about why CUDA
|
||||||
|
// was not taken instead.
|
||||||
|
status
|
||||||
|
.failed
|
||||||
|
.iter()
|
||||||
|
.map(|(rung, why)| format!("{}: {why}", rung.label()))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join(" · ")
|
||||||
};
|
};
|
||||||
(line, detail)
|
(line, detail)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user