· kaynak Hacker News – Front Page (native)
pngine, WebGPU bağlantılarını PNG dosyalarının içinde taşıyan S-ifadelerine dönüştürüyor
Hugo Daniel'in 2,5 yıldır geliştirdiği pngine, WebGPU pipeline'larını ve pass'larını doğrulanabilen S-ifadesi verileri olarak ifade ediyor ve bunları HTML, ZIP ya da kendi runtime yükünü taşıyan bir PNG olarak dışa aktarıyor.

Hugo Daniel, yaklaşık iki buçuk yıldır üzerinde çalıştığını söylediği, WebGPU için deklaratif bir format ve runtime olan pngine'i yayınladı. Hacker News ana sayfasına ulaşan sitesindeki bir yazıda tanıtılan proje, WebGPU kurulumu için genellikle yazılan imperatif JavaScript (veya Rust) kodunun yerine, WebGPU spesifikasyonuyla birebir eşleşen S-ifadelerini kullanıyor. WGSL shader kodu bilinçli olarak dokunulmadan bırakılıyor; makrolarla genişletilmek yerine string alanlara olduğu gibi gömülüyor.
Boru döşemeyi betimlemek yerine deklare etmek
Geleneksel bir WebGPU programı createShaderModule ve createRenderPipeline çağırır, bir render pass açar, pipeline'ları bağlar ve draw çağrıları yapar; oluşturma, bağlantı ve sıralamanın tamamı host dilindeki koda karışmıştır. Daniel bunun büyük kısmının statik yapılandırma olduğunu, deklaratif hale getirilmesinin bağlantıyı sıra bağımlılığından kurtaracağını savunuyor: bir render-pipeline düğümü yalnızca adlandırılmış bir shader-module'a ve onun entry point'lerine atıfta bulunur ve bloklar serbestçe yeniden düzenlenebilir. Sıralamanın anlam taşıdığı tek yapı frame; onun :perform listesi pass'leri — uniform güncellemeleri, bir SDF pass'ı, post-processing — yürütme sırasına göre adlandırır.
İki biçimin eşdeğerliğine kanıt olarak Daniel, yazısındaki prosedürel JavaScript örneğinin, olası çıktılardan biri olarak pngine tarafından S-ifadesi kaynağından üretildiğini belirtiyor.
GPU olmadan doğrulama
Yapılandırmanın tamamı yapılandırılmış, okunabilir veri olduğu için pngine bunu statik olarak denetleyebiliyor. Daniel'e göre WGSL reflection, WebGPU spesifikasyonuna karşı yapılan kontrollerle birleştiğinde, canlı bir WebGPU context'i olmadan hata ve uyarılar üretiyor; bir language server da bunları siz yazarken gösteriyor. Daniel bunu daha önceki SJON çalışmasına bağlıyor: program temsili sıradan veriye dönüştüğünde, aynı temsili doğrulama, replay, inceleme, minification, serialization ve makine tarafından üretim destekliyor — hepsi önceden ve hepsi tek bir ortak biçim üzerinde çalışıyor.
HTML, ZIP veya kendi kendini tanımlayan bir PNG olarak dağıtım
Dışa aktarım üç biçimde yapılıyor: tek bir .html dosyası, bir .zip veya bir .png. PNG seçeneği adın açıklaması. S-ifadeleri küçük bir runtime tarafından yorumlanan ikili bir temsile derleniyor; bu runtime ve yükü, ek bir PNG chunk'ında saklanabiliyor ve görüntünün kendisi de dağıtılan şeyin önizlemesi olarak hizmet ediyor. Daniel, PNG'nin kendi kendine çalışmadığını açıkça belirtiyor — küçük bir player'ın onu okuyup gerektiğinde çalıştırması gerekiyor.
Format tarayıcıya da bağlı değil. Daniel aynı tanımlamaların Rust'ın wgpu'suyla çalıştığını, Android ve iOS için player'ların mevcut olduğunu ve CPU/WASM başlatmasının bundle'a dahil olduğunu söylüyor. Kod CC0 lisansıyla yayımlandı; GitHub sorunlara ve tartışmalara ev sahipliği yapıyor, release'ler ise kendi sunucusunda barındırdığı depodan kesiliyor.
Bir oyun alanı değil, bir temel
Daniel, Shadertoy ve compute.toys'un shader kodu paylaşmak ve öğrenmek için mükemmel mecralar olduğuna işaret ediyor ve pngine'in onlarla rekabet etmediğini de açıkça belirtiyor — bir playground yok, ama bir LSP var. Onun çerçevesine göre bugün bir pipeline'ı paylaşmak, bir dizi önceden yapılmış anlaşmayı zorunlu kılıyor: hangi host dili, handle'ların nasıl temsil edildiği ve geçirildiği, bağlantının küçük bir animasyona mı, bir oyona mu yoksa bambaşka bir şeye mi ait olduğu. Daniel, pngine'in bu seçimleri ortadan kaldıramayacağını ama tek bir bundle'ın çok farklı amaçlara hizmet edip çok farklı hedeflerde çalışabilmesi için onları azaltmaya ciddi şekilde çabaladığını yazıyor.
Neden önemli
WebGPU'nun kendi tasarımı zaten örtük grafik durumunu açık API çağrılarına ve config nesnelerine taşımiştı; pngine bu yörüngeyi bir adım ileri götürerek yapılandırmanın kendisini artifact haline getiriyor. Pipeline'lar, buffer'lar ve pass'lar çevrimdışı doğrulanabilen taşınabilir veriler olarak var olurlarsa, diff'lenebilir, minify edilebilir, makine tarafından üretilebilir ve host kodu yeniden yazılmadan tarayıcılar, wgpu ve mobil player'lar arasında yeniden hedeflenebilirler. Kendi yükünü taşıyan PNG akılda kalıcı bir hile; ama kalıcı fikir temsil biçiminin kendisi — ve CC0 lisansı ile minimal bir runtime ile onunla deney yapma engeli düşük. S-ifadelerinin TypeScript tabanlı WebGPU kurulumu fiili geleneğini yerinden edip edemeyeceği henüz kanıtlanmış değil; ancak araç geliştiricileri — insan ya da makine — için bir temel olarak bu yaklaşım, GPU işinin nasıl paylaşıldığına dair gerçek bir boşluğa el atıyor.
- #webgpu
- #wgsl
- #s-expressions
- #graphics
- #open-source