OpenGL’in Yeni Nesil Sürümü: Vulkan

opengl vulkan
YAZAN Sarp Kürkcü

API’lerde ortak dertlere odaklanma zamanı.

Geçen seneye baktığımızda GDC’nin önemli başlığı oyun motorları üzerindeydi. Bu sene ise API’ler manşetleri süslüyor. Belki de donanım ve yazılımın hassas köşelerini seven insanların zamanı gelmiştir artık.

Ama herhangi bir API, yani donanımla yazılım arasındaki ilişkiyi kuran herhangi bir üniteyi değil, grafik API’lerinden bahsediyoruz. Yani DirectX, yani Mantle, yani OpenGL. Ama OpenGL, GLnext ismiyle çıktığı yenilenme yolunda tam bir markaya dönüştü: Vulkan. Bakalım Vulkan hayatımıza neler getirmeyi amaçlıyor.

Daha önce sizlere DirectX 12’nin DirectX11’den farklarını mümkün olan en basit haliyle paylaşmıştık. Ama o bile bazı okurlarımıza karışık gelmişti. Olsun, bu köşeler ne kadar yumuşatırsak yumuşatalım sivri kalmaya devam edecekler biraz. Ama orada yazanlar bu yazının temelini oluşturuyor bir anlamda, o nedenle daha önce gözünüzden kaçtıysa dönüp bir bakmanızı tavsiye ederiz.

 

Şimdi gelelim Vulkan’a, benim de başka bir API ile olan teknik sınavıma. Bu konuların derinlerine indikçe meraklı bir çocuk gibi şaşırıyor ve keyif alıyor olmamın ceremesi işi haberleştirmek olsa gerek. DirectX 12’yi anlatırken sık sık bahsettiğim ve GPU ile CPU arasındaki iletişim yönteminin değişmesi konusu belli ki Khronos firmasını da rahatsız etmiş, çünkü Vulkan da temel olarak bu noktaya parmak basıyor.

CPU ve GPU arasında ilk zamanlarda tek yoldan sürdürülen bir iletişim varken teknoloji geliştikçe farklı işlemcilerde iş hazırlanıp GPU’ya yönlendiriliyordu. Daha sonrasında bu iş simultane hale getirilip farklı yollara çıkmış olsa da GPU’ya ulaşım hep tek boğazdandı (detaylı hali bahsettiğim DirectX 12 yazısında ve anlamanızı kolaylaştırabilir).

Ama DirectX 12, nasıl ki aynı anda birden çok iş paketinin GPU’ya iletilmesine izin verecekse Vulkan da bu konuda uzman. Hatta şöyle bir bakarsak AMD’nin Mantle’ı ve Apple’ın Metal’i de bu işi yapabiliyor. Yani tüm firmalar, bu darboğazın farkında ve çözüm için çabalıyorlar. Ama Mante sadece ATI kartlarda, DirectX sadece Windows’ta, Metal ise sadece iOS’te çalışıyor. Vulkan’ın artısı çok platformda yer alabiliyor olması.

OpenGL’in masaüstü teknolojisi yılların birikimiyle biraz şişmiş, artık kullanılmayan özelliklerle birlikte geliyordu. Mobil sistemler için ise OpenGL ES vardı. Daha temiz, daha sade bir sistemdi kendisi. Ama Vulkan bu iki üniteyi birleştirip tek bir çözüm sunma peşinde. Bu da mobile özel bir API alternatifine çözüm sunuyor.

OpenGL sistemlerde grafik sürücüsü ve API arasındaki ilişki, Vulkan’da da değişmiş durumda. Burada ArsTechnica’dan yardım alacağım, çünkü anlamaya çalışırken başımda oluşan ağrının sebebi onlar. Normalde OpenGL her sürücünün içerisinde C benzeri (C++, C# gibi) bir dille yazılmış shader derleme kodları talep edermiş. Ama bu hatalara imkan tanıyan, karmaşık bir prosedürmüş. Microsoft’un Direct3D teknolojisi ise daha basit ve işi program geliştiricilerine parslıyormuş. Her shader programı bir kereliğine derliyor (Compiling) ve bunu bytecode’da yapıyormuş. Grafik sürücüleri ise bu bytecode ile uğraşıyor, daha az hataya mahal veriliyormuş.

Hah, gelelim Vulkan’ın çözümüne. Vulkan’da SPIR adında bir dilin yeni hali kullanılıyor. SPIR-V, yani Standard Portable Intermediate Representation 2.0’ın üstüne gelen güncellemeyle bu soruna çözüm olma peşinde. Zaten SPIR 2.0 OpenCL 2.1’de (yani bugün itibariyle kullanılabilen, gelişmiş OpenGL) kullanılabilecek. SPIR-V ise hem OpenCL 2.1 desteğine devam edecek, hem de Vulkan’ın belkemiğini oluşturacak. SPIR’in bytecode’a dair üstünlüğü ise grafik dışındaki işlemleri de GPU’lara atabiliyor olması. Akla ilk olarak fizik hesaplamaları geliyor değil mi? Çünkü GPU’lar, aslında birim işlem gücü açısından günümüz tüketici CPU’larından daha yüksek performansa sahipler. Bizim sıkıntımız ise standarda indirgenecek şekilde bu cihazları kullanamıyor olmamızdı. Vulkan ve SPIR-V, bu konuda bir adım atıyor işte. Ha derseniz ki ben hâlâ C++ kullanacağım, OpenCL bu konuda da size imkan tanıyor.

OpenCL, şu anda kullanılabilir durumda. Vulkan ise sadece ön gösterim sürümünde sunuluyor geliştiricilere. Valve ve başka firmalar Vulkan’a sırtını dayamış oyun motorlarıyla sunumlar yapacaklar GDC boyunca (ve Mart sonunda GDC Avrupa’da da). OpenGL ise tümüyle bizleri terk etmiyor. Nasıl ki DirectX 11 yaşamına devam edecek bir süre, alışkın olanlar ve orada verimliliği sağlamış olanlar da OpenGL’den faydalanabilecekler. Khronos da bu sebeple insanları yarı yolda bırakmayı düşünmüyor.

Tahmin edersiniz ki Valve’ın Source 2 grafik motoru ve bundan sonra gelmesi muhtemel Half Life 3 gibi projelerde yük Vulkan’ın omuzlarında olacak. Vulkan, bizdeki çeviriye de yakın aslında. Kendisi Almancada bildiğimiz "volkan" demek. Bu da cebimizde bir bilgi olarak kalsın.

İLGİLİ BÖLÜMLER