gioser

tawasuyu/llimphi

Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.

Rust 660Markdown 302TOML 157RON 312382 Definiciones

⎇ main llimphi-cpu/Cargo.toml TOML · 58 líneas · 3.4 KB Historia crudo

chore: refresco desde el monorepo — vello 0.9 / wgpu 29, 120 miembros d251eb32b · Sergio ·

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.