tawasuyu/llimphi
Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.
chore: refresco desde el monorepo — vello 0.9 / wgpu 29, 120 miembros
1[package]
2name = "llimphi-cpu"
3version.workspace = true
4edition.workspace = true
5license.workspace = true
6authors.workspace = true
7publish.workspace = true
8description = "llimphi-cpu — el rasterizador de Llimphi sin GPU. Graba las órdenes de dibujo en una `Escena` (misma forma que `vello::Scene`) y las rinde con `vello_cpu` a un `Pixmap`, que se vuelca a cualquier framebuffer. `no_std + alloc`: es la pieza que deja correr Llimphi sobre el kernel bare-metal de wawa, donde no hay wgpu ni winit. W1 de 03_ukupacha/wawa/PLAN-LLIMPHI.md."
9
10[dependencies]
11# El rasterizador de sparse strips de Linebender, en modo bare-metal:
12#
13# default-features = false — su `default` trae `std` + `png`, y `png` FUERZA
14# `std` a través de vello_common.
15# libm — la matemática de coma flotante sin sistema.
16# u8_pipeline — hace falta AL MENOS un pipeline o el crate emite
17# `compile_error!`. Con sólo u8, el render debe
18# pedir `RenderMode::OptimizeSpeed` (OptimizeQuality
19# exige el pipeline f32).
20vello_cpu = { version = "0.0.9", default-features = false, features = ["u8_pipeline", "text"] }
21
22# `force_support_fallback` es lo que habilita `Level::fallback()`, que es
23# `const fn`. La alternativa, `Level::new()`, usa `is_x86_feature_detected!` —
24# que REQUIERE std y por lo tanto no existe en el kernel.
25fearless_simd = { version = "0.4.1", default-features = false, features = ["force_support_fallback"] }
26
27# -----------------------------------------------------------------------------
28# `std` vs `libm`: hay que elegir UNA, y no es preferencia de estilo.
29# -----------------------------------------------------------------------------
30# `vello_common` importa `peniko::kurbo::common::FloatFuncs` — el trait que da
31# `round`/`sqrt`/etc. sin sistema operativo. kurbo SÓLO define ese trait cuando
32# su feature `std` está APAGADA; con `std` puesto, la stdlib ya provee esos
33# métodos y kurbo configura el trait fuera del binario.
34#
35# De ahí sale una regla que no se puede desobedecer: **el perfil de este crate
36# tiene que coincidir con el de kurbo en el mismo build**. Y en cuanto `vello`
37# entra en la unificación de features, kurbo TIENE std —vello declara `peniko`
38# con `default-features = true`—, así que pedir `libm` acá revienta con
39# «no `FloatFuncs` in `common`» en cuatro archivos de vello_common.
40#
41# Por eso `std` es el default: en Linux, donde vello convive con vello_cpu (o
42# sea, el workspace entero), es el único perfil coherente. wawa pide el otro
43# explícitamente, y ahí no hay vello que unifique nada.
44[features]
45default = ["std"]
46# Linux: además de resolver lo de kurbo, permite detectar el nivel SIMD en
47# tiempo de ejecución en vez de conformarse con el escalar.
48std = ["vello_cpu/std", "fearless_simd/std"]
49# Bare-metal (wawa). Se pide así:
50# cargo check -p llimphi-cpu --target x86_64-wawa \
51# --no-default-features --features libm -Z build-std=core,alloc
52libm = ["vello_cpu/libm", "fearless_simd/libm"]
53
54# Sin dev-dependency sobre `llimphi-text`, a propósito: el puente que camina un
55# `parley::Layout` y emite glifos vive del OTRO lado (feature `cpu` de
56# llimphi-text), y el test de punta a punta con él. Así la flecha va en un solo
57# sentido —llimphi-text → llimphi-cpu— y no hay ciclo que cargo tenga que
58# tolerar. Este crate no sabe qué es parley, y está bien que no lo sepa.