Günümüzün video oyunları için temel API seti olan DirectX 12, her sürümde muazzam bir şekilde gelişiyor. Bu nedenle, DirectX 12 ile DirectX 11 arasındaki farkı bilmek gerçekten önemlidir. En önemli teknik farklılıklara bir göz atalım ve farklı güncel oyunlarda performansın nasıl değiştiğini görelim. Başlayalım!
API nedir?
DirectX kavramını tanıtmadan önce, programlamada bir API’nin ne olduğunu görelim. API, application program interface veya uygulama programlama arabiriminin kısaltmasıdır. Bu, iki programın birbiriyle iletişim kurmasını sağlayan koddur.
Özellikle, kesinlikle farklı programlama dillerinde ve birbirleriyle hiçbir ilgisi olmayan ekipler veya şirketler tarafından oluşturulan tamamen farklı programlardan bahsediyoruz. API, “program A” geliştiricisinin “program B”ye hizmet talep etmek ve/veya sağlamak için kod yazması için doğru yolu tanımlar.
Kısacası, bir API, tamamen farklı iki programın birbirini anlamasını mümkün kılar. Temelde güvenli, doğru ve etkili bir şekilde iletişim kurmak için uyulması gereken kurallar bütünüdür. Ayrıca programlama arayüzü veya çerçeve kavramıyla da çok ilgisi vardır.
Nasıl iletişim kuracaklarına bağlı olarak tonlarca API türü vardır. İki örnek:
- Genel bir web API’si, herhangi bir programcının bir siteden değerli bilgileri (örneğin, hava durumu tahmini veya mevcut uçak biletleri listesi) yazılımda kullanmak veya sadece veri analizi yapmak için çekmesine olanak tanır.
- Bir program özel API’si, iki yazılım parçasının birbiriyle konuşmasını sağlar, ancak bu belirli yazılım parçaları için yalnızca konuşma yolu sağlanır ve bunların hepsi aynı makinede gerçekleşir.
Bu iki örnekle, API’nin birçok farklı biçimi olduğunu görmenizi istiyoruz. Şimdi DirectX API’sine odaklanma zamanı.
DirectX nedir?
Microsoft DirectX, Windows işletim sistemlerinde grafik ve multimedya öğelerinin oluşturulması ve yönetimi için tasarlanmış bir API’dir. Aslında, DirectX daha çok birkaç farklı API kümesidir, tek bir API olduğunu söylemek basitleştirmeden başka bir şey değildir. Bunlar şunları içerir:
- Direct2D: Bitmapler, geometri ve metin için kaliteli görüntü oluşturmayı içeren donanım hızlandırmalı 2D grafikler için API.
- Direct3D: Oyunlar ve bilimsel uygulamalar için 3D grafikler oluşturmak için API.
- DirectWrite: Yüksek kaliteli metin oluşturma API’si.
- DirectXMath: Vektörler ve matrisler üzerinde lineer cebir ve aritmetik işlemler için API.
- DirectML: Makine öğrenimi ve yapay zekanın oyunlara, motorlara ve diğer programlara entegrasyonu için kullanılır.
DirectX 12 ile DirectX 11 arasındaki analizimiz, oyunları neyin etkilediğine odaklanacak, DirectX’i bir bütün olarak alıyoruz ancak bunun Direct3D veya DirectML gibi API’lerle çok ilgisi var.
DirectX aşağıdaki iletişim akışını yapar:
- Uygulama (oyun), DXGI API (DirectX’ten) ile doğrudan veya ek yazılım aracılığıyla iletişim kurar.
- Ayrıca, kullanıcı modunda ekran kartı sürücüleri ile konuşan Direct3D aracılığıyla DXGI ile ve bunlar da DXGI ile iletişim kurar.
- DXGI (DirectX Graphics Infrastructure), çekirdek modunda (yani en yüksek yetkiye sahip) ekran kartı sürücüleriyle ve bunlar bilgisayarın donanımıyla iletişim kurar.
Windows için çoğu video oyununda geliştiriciler, OpenGL veya Vulkan gibi diğer çok popüler API’ler yerine DirectX kullanır. Bu nedenle DirectX’in her sürümü çok önemlidir: şimdi 12’ye gidiyoruz. DirectX’in video oyunlarımızdaki rolü acımasızdır, bu yüzden şimdi en son sürüm 12 ile DirectX 11’i karşılaştıracağız.
DirectX 12 ve DirectX 11: teknik farklılıklar
Teknik düzeyde, DirectX 12 ile DirectX 11’i karşılaştırırken, video oyunları geliştirirken bu API’lerin nasıl çalıştığı konusunda birçok farklılık görüyoruz. DirectX 12, daha önce doğrudan sürücüler tarafından gerçekleştirilen belirli görevleri gerçekleştirirken geliştiriciye çok daha fazla sorumluluk aktarır. Bu, oyunların çok daha fazla optimizasyonuna ve hepsinden önemlisi, bu görevler doğrudan sürücüde değil, bireysel uygulamalar tarafından gerçekleştirildiğinden daha fazla işlemci çekirdeğinden yararlanmaya izin verir.
Bu nedenle, DirectX 12 oyunları tüm çekirdeklerden yararlanırken, DirectX 11 ise yalnızca bir veya birkaç çekirdekten yararlanır. Bu çok büyük: DX11, 2 çekirdekli CPU’ların en yaygın olduğu 2009’da piyasaya sürüldü ve DX12, 2015’te piyasaya sürüldü. Şimdi PC’lerde 8 veya 10 çekirdek yaygın olarak görülüyor. Kısacası DirectX 12, donanımın her yönden daha iyi kullanılmasını sağlar. Aslında bu, AMD ekran kartlarının birkaç yıl önce DX12 altındaki NVIDIA ekran kartlarından daha iyi performans göstermesinin nedenidir, çünkü daha fazla ham güce sahiptiler.
Yıllar önce NVIDIA, sürücülerde daha iyiydi (daha iyi performans elde etmeyi başardılar), ancak AMD’nin çok fazla “ham gücü” boşa harcandı. DX12’nin gelişi, sürücülere daha az iş bıraktı. Bugün itibariyle her iki şirket de tamamen DirectX 12’ye odaklanmış durumda, ancak AMD yakın zamanda bir sürücü yükseltmesiyle DX11 performansını %10 artırdı. Burada ne açıkladığımızı görüyorsunuz!
DirectX 12 ve DirectX 11 arasında teknik farklılıklar
DirectX 12’ye karşı DirectX 11’de uygulanan diğer bazı teknik farklılıkları ve özellikle normalde motorların kendileri tarafından halledilen daha düşük seviyedekileri göreceğiz:
- Her beraberlik çağrısının kendi durumu vardır. API’nin dahili “durumu”, kaynakların tahsisini ve hangilerinin kullanılabilir olduğunu gösterir. DirectX 11’de kaynakların küresel durumunu koruyan tek bir iş parçacığı vardır. Şimdi, her bir çekme çağrısının kendi durumu vardır, bu da farklı çekme çağrıları için farklı iplikler kullanmanıza ve çekirdekleri daha da iyi kullanmanıza olanak tanır.
- PSO’da durumların gruplandırılması (Pipeline State Objects). Çekilişlerin durumları hakkında konuşmaya devam ediyoruz. Daha önce birbirine bağlı olan bazı unsurlar, donanımın daha fazla kullanılması için birlikte gruplandırılmıştır. GPU daha fazla paralelleştirilir.
- Komut kuyruğu. DirectX 12, yalnızca birini kullanarak CPU’yu daha az kullanan DirectX 11’e kıyasla birkaç komut kuyruğuna (gerçekleştirilecek eylemlerin sıralı bir listesi) sahiptir.
DirectX 12 Ultimate’ın DirectX 11’de olmayan özel özellikleri
DirectX 12, DirectX 11’e kıyasla sadece teknik düzeyde etkileyici yeni özellikler getirmekle kalmıyor, aynı zamanda bugün neredeyse herkesin bildiği yeni özelliklerle muazzam bir ilerleme kaydetti. Son yılların grafik yeniliklerinden bahsediyoruz. Bunlar çoğunlukla DirectX 12 ve onun “Ultimate” versiyonunun yardımı olmadan anlaşılamaz.
Örneğin, AMD ve NVIDIA tarafından gerçek zamanlı ışın izleme desteği sağlayan API olan DirectX Ray Tracing (DXR) ve birçok oyundan bahsediyoruz. Bu API’nin DX12 Ultimate, Işın İzleme’nin çalışma şeklini büyük ölçüde geliştiren 1.1 sürümünü içerir. Ayrıca VRS (Değişken Hız Gölgelendirmesi), CAS (İçerik Uyarlamalı Gölgelendirme), Örnekleyici Geri Bildirimi vb. gibi diğer temel özelliklerden de bahsediyoruz.
DirectX 12 ve DirectX 11: performans farklılıkları
Tüm bu teknik gelişmeler çok açık, ancak performansta kayda değer bir artış eşlik etmiyorsa çok ilginç değiller. Bunu test etmek için, her iki API’yi de destekleyen bir oyun alabilir (eski grafikleri desteklediği için bu mantıklıdır) ve bunları değiştirerek nasıl performans gösterdiğini görebilirsiniz. Bu durumda, bir RTX 3060 Ti kullanarak karşılaştırdıkları bir YouTube videosunu referans olarak alacağız.
Ayrıca işlemci bir Ryzen 5 3600, 6 çekirdekli bir CPU, bu yüzden test için ilginç. Tabii ki, farklılıklar büyük ölçüde PC’ye, sürücülere, oyuna, grafiklere ve işlemciye vb. bağlı olarak her duruma bağlı olacaktır.
Tablodaki bu video ile, bazı oyunlarda DirectX 11’in şaşırtıcı bir şekilde sürüm 12’den daha iyi FPS elde ettiğini görüyoruz. Bu, DX11’in hiç de daha iyi olduğu anlamına gelmiyor ve bunu açıklamak için birkaç neden var: Bir yandan, çoğu oyunda genel olarak çerçeve süresinin DX12 ile çok daha kararlı olduğunu görüyoruz. Bu, kekemelik olmadan daha iyi bir oyun deneyimi anlamına gelir. DX12 Ultimate’ın içerdiği ve daha önce yorumladığımız tüm avantajları da hatırlayalım.
Öte yandan, DirectX 12’ye karşı DirectX 11’e zarar veren şey, geliştiricinin daha büyük sorumluluklarının iki ucu keskin bir kılıç olmasıdır, geliştirici tarafından daha iyi optimizasyona yol açabilir, ancak aynı zamanda DX11 ile elde edilenden daha kötü hale getirebilir. Her durumda, DirectX 12’yi kullanın ve her zaman maksimum optimizasyonun keyfini çıkarmak için sürücülerinizi, yazılımlarınızı ve oyunlarınızı güncel tutun.
Ayrıca DirectX 12’yi kullanmak için Windows 10 veya üstü olması gerektiğini unutmayın.
DirectX 13, ne zaman çıkacak?
DirectX 11’in DirectX 10’un yerini almak üzere 2009’da piyasaya sürüldüğünü unutmayalım. Sonra DirectX 12 2015’te geldi. Yani DirectX 13’ün yakında piyasaya sürülmesi mantıklı, değil mi?
Gerçek şu ki, şu anda bu API’nin görünümü hakkında hiçbir şey bilinmiyor. Ayrıca değişikliklerin çok büyük olduğunu da unutmayalım, bu nedenle geliştiricilerin uyum sağlaması gereken bir şey. Bu, uzun bir geçiş dönemine ve işleri ağırdan alma zorunluluğuna yol açar.
DirectX 13 (veya buna ne demeye karar verirlerse) hakkında bir şey öğrendiğimizde, onu entegre eden ilk oyunları görmemiz aylar ve aylar alacak. Şimdilik çıkacak gibi görünmüyor, kim bilir 2023’te mi, 2024’te mi (ya da daha sonra!).