GoCL: Sıfır Ek Yük Getiren C++20 Vulkan Proxy Katmanı
GoCL, GPU yeteneklerine göre SPIR-V kodunu anında yeniden yazan, tembel yüklemeli arka uçlar kullanan ve sıfır çalışma zamanı ek yükü sunan açık kaynak C++20 Vulkan proxy katmanıdır.
GoCL, Vulkan çağrılarını sürücüye ulaşmadan önce yakalayıp GPU'nun gerçek yeteneklerine göre uyarlayan bir proxy (vulkan_proxy.so / vulkan-1.dll) ve aynı mantığı doğrudan motorlara sunan bir statik kütüphaneden (GoCL_core.a) oluşuyor. Merkezinde, cihaz oluşturma anında tüm ilgili fiziksel cihaz özelliklerini sorgulayıp düz bir DeviceCapabilities yapısında saklayan bir 'capability oracle' yer alıyor; böylece render döngüsünde sanal çağrı veya çalışma zamanı kontrolü olmadan, dallanması öngörülebilir veri odaklı kararlar alınıyor.
Proxy, vkGetDeviceProcAddr benzeri bir dispatch tablosunu vkCreateDevice anında doldurarak Vulkan giriş noktalarını yamalıyor; Linux tarafında -Wl,-z,now bayrağıyla tüm dinamik semboller yükleme sırasında çözülüyor ve Callgrind ölçümleri render döngüsünde sıfır tembel bağlama (lazy-binding) ek yükü olduğunu gösteriyor. Desteklenmeyen shader özellikleri (FP16, aşırı büyük descriptor set'leri) tespit edilip SPIR-V ikili dosyası, LLVM veya harici derleyici gerektirmeden, birkaç C++ fonksiyonuyla sürücüye ulaşmadan hafifçe yeniden yazılıyor; FP16 işlemleri FP32'ye genişletiliyor ve büyük descriptor binding'ler bölünüyor.
Ağır Basis Universal transcoder'ı (ASTC→ETC2 dönüşümü için) ayrı bir gocl_transcoder.so içine konulmuş ve yalnızca bir ASTC dokusuyla karşılaşıldığında dlopen/LoadLibrary ile yükleniyor; bu sayede statik başlatıcılar gereksiz yere tetiklenmiyor ve proxy'nin temel ayak izi minimum kalıyor. Tüm bu çalışma pipeline oluşturma veya doku yükleme anında yapılıyor, render döngüsüne dokunulmuyor. GTX 960M üzerinde 75'ten fazla Sascha Willems Vulkan örneğiyle yapılan Callgrind ölçümlerinde proxy, native koddan yaklaşık %3.8 daha az toplam komut çalıştırıyor (3.806B'ye karşı 3.955B), FPS ve kare süreleri ise gürültü payı içinde aynı kalıyor.
Proje Apache-2.0 veya MIT lisansları altında çift lisanslı olarak sunuluyor ve CI ortamında Mesa Lavapipe ile test ediliyor. Tasarım, çalışma zamanı esnekliği ile sıfıra yakın performans maliyetini bir arada tutmak isteyen C++ ve grafik motoru geliştiricileri için ilgi çekici bir örnek teşkil ediyor.