İşlemcide GPU için bir çerçeve oluşturmak için gereken çok iş var ve bu işin iyi bir kısmı grafik sürücüsünün içinde. DX12 / Vulkan'dan önce, bu grafik sürücüsü çalışması, API tasarımında esas olarak tek işlenmeye zorlandı.
Umut, DX12 / Vulkan'ın bu kısıtlamayı kaldırması, sürücünün bir çerçeve içinde birden fazla CPU iş parçacığına paralel olarak çalışmasını sağlamasıdır. Bu, çok çekirdekli işlemcilerin daha verimli kullanılmasını sağlayacak ve oyun motorlarının işlemciye bağlı olmadan daha karmaşık sahneleri zorlamasını sağlayacak. Umut budur - pratikte gerçekleşip gerçekleşmeyeceği önümüzdeki birkaç yıl boyunca görmek için bekleyeceğimiz bir şeydir.
Bir bitin ayrıntılandırılması: Bir oyun motoru oluşturucusunun çıktısı, bir kareyi oluşturma işlemlerinin sırasını tanımlayan DX / GL API çağrılarının akışıdır. Bununla birlikte, API çağrılarının akışı ile GPU donanımının harcadığı gerçek ikili komut tamponları arasında büyük bir mesafe vardır. Sürücünün, konuşması için, API çağrılarını GPU'nun makine diline çevirmesi gerekir. Bu önemsiz bir işlem değildir; API kavramlarının düşük seviye donanım gerçeklerine çevrilmesi, GPU’nun hiçbir zaman geçersiz bir duruma getirilmediğinden emin olmak için doğrulama, bellek tahsisleri ve verilerden kaçınmak, durum değişikliklerini izlemek için düzeltmek için düşük seviye komutları vb. Tüm bunların sorumluluğu grafik sürücüsü.
DX11 / GL4 ve önceki API’lerde, bu çalışma genellikle tek bir sürücü iş parçacığı tarafından yapılır. Birden fazla iş parçacığından (örneğin, DX11 ertelenmiş komut listelerini kullanarak yapabileceğiniz) API'yi çağırsanız bile, sürücü iş parçacığının daha sonra gözden geçirilmesi için bir kuyruğa bazı işler ekler. Bunun büyük bir nedeni, daha önce bahsettiğim devlet takibi. Donanım düzeyinde GPU yapılandırma ayrıntılarının birçoğu, mevcut grafik boru hattı durumu hakkında bilgi gerektirdiğinden, komut listesini paralel olarak işlenebilecek parçalara bölmenin iyi bir yolu yoktur - her bir parça tam olarak hangi durumda başlayacağını bilmek zorunda kalır Bununla birlikte, önceki öbek henüz işlenmemiş olsa bile.
Bu DX12 / Vulkan'da değişen en büyük şeylerden biri. Bir kere, onlar bir nesnesine neredeyse tüm grafik boru hattı durumunu dahil ve bir komut listesi oluşturmaya başlamak zaman diğeri için (DX12 en az) Eğer gerekir başlangıç boru hattı durumunu sağlamak; durum bir komut listesinden diğerine devralınmaz. Prensip olarak, bu sürücünün, derlemeye başlamadan önce önceki komut listeleri hakkında hiçbir şey bilmemesini sağlar ve sırayla uygulamanın, paralelleştirilebilir parçalara dönüştürülmesi, ardından da derlenmiş komut listeleri üretmesi; bir araya toplanmış ve en az telaş ile GPU'ya gönderildi.
Tabii ki, yeni API'lerde birçok başka değişiklik var, ancak çoklu okumalar söz konusu olduğunda, bu en önemli kısım.