Aracılığıyla paylaş


Direct2D ve GDI Donanım Hızlandırma karşılaştırması

Direct2D ve GDI hem anında mod 2B işleme API'leridir hem de her ikisi de bir miktar donanım hızlandırma sunar. Bu konu başlığında, her iki API'nin donanım hızlandırma özelliklerindeki geçmiş ve mevcut farklar da dahil olmak üzere Direct2D ile GDI arasındaki farklar incelenmiştir.

Bu konuda aşağıdaki bölümler vardır:

Direct2D ile GDI arasındaki farklar

GDI çokgenler, elipsler ve çizgiler gibi opak, keskin kenarlı geometrileri işler. Kenarlı ve ClearType metinleri işler ve AlphaBlend API'si aracılığıyla şeffaflık harmanlamayı destekleyebilir. Bununla birlikte, saydamlık işleme tutarsızdır ve çoğu GDI API'si basitçe alfa kanalını yok sayar. Bazı GDI API'leri, bir işlem sonrasında alfa kanalının ne içereceğini garanti etmez. Daha da önemlisi, GDI'nin görüntüleme işlemleri 3B işlemlerle kolayca eşleştirilemez ve modern bir GPU, işleme motorunun 3B bölümünde en verimli şekilde çalışır. Örneğin, Direct2Ddiğer adları GPU'da işlenen iki üçgen gibi uygulanacak şekilde tasarlanırken GDI, Bresenham'ın çizgi çizim algoritmasını kullanır.

Direct2D opak, saydam, kenar yumuşatmalı ve yumuşatılmamış temel öğeleri oluşturur. Modern UI'ler genellikle saydamlığı ve animasyonu kullanır. Direct2D, saydam içeriği kabul etme ve işleme konusunda kesin garantileri olduğundan ve tüm temel özellikleri donanım hızlandırma kullanılarak işlendiği için modern bir kullanıcı arabirimi oluşturmayı kolaylaştırır. Direct2D, GDIsaf bir üst kümesi değildir: GPU'ya uygulandığında makul olmayan şekilde yavaş olan temel öğeler Direct2D'de mevcut değildir. Direct2D, 3B hızlandırmaya bu vurguyla oluşturulduğundan Direct3D ile kullanımı da kolaydır.

Windows NT 4'ten bu yana, GDI çekirdek modunda çalıştırılmıştır. Uygulama GDI'yi çağırır ve ardından ilkelleri kendi sürücü modeline geçiren çekirdek modu karşılık gelenini çağırır. Bu sürücü daha sonra sonuçları genel çekirdek modu görüntü sürücüsüne gönderir.

Windows 2000'den başlayarak, GDI ve GDI sürücüleri çekirdekte "oturum alanı" adlı bağımsız bir alanda çalıştırılır. Her oturum açma oturumu için bir oturum adres alanı oluşturulur ve her GDI örneği bu ayrı çekirdek modu adres alanında bağımsız olarak çalışır. Ancak Direct2D, kullanıcı modunda çalışır ve çizim komutlarını kullanıcı modu Direct3D sürücüsünden çekirdek modu sürücüsüne geçirir.

şekil 1 - direct2d'nin gdi ile karşılaştırılması

GDI ve Direct2D donanım hızlandırma

Direct2D ile GDI donanım hızlandırma arasındaki en önemli fark, onları yönlendiren temel teknolojidir. Direct2D üst Direct3D üzerine katmanlıdır ve GDI'nin kendi sürücü modeli olan GDI Cihaz Sürücüsü Arabirimi (DDI), GDI temel öğelerine karşılık gelir. Direct3D sürücü modeli, GPU'daki 3B işleme donanımının ne işlediğine karşılık gelir. GDI DDI ilk tanımlandığında çoğu görüntü hızlandırma donanımı GDI temel öğelerini hedeflemektedir. Zamanla 3B oyun hızlandırmaya daha fazla ve uygulama hızlandırmaya daha az önem verildi. Sonuç olarak BitBlt API'si donanım tarafından hızlandırıldı ancak diğer GDI işlemlerinin çoğu hızlandırılmamıştı.

Bu, GDI'in ekrana nasıl işlendiğine ilişkin bir değişiklik dizisinin zeminini hazırladı. Aşağıdaki çizimde, GDI görüntüleme işlemesinin Windows XP'den Windows 7'ye nasıl değiştirildiği gösterilmektedir.

şekil 2 - GDI işleme görüntüleme evrimi

Aşağıda açıklandığı gibi GDI sürücü modelinde değişikliklere neden olan bir dizi ek faktör de vardır.

Görüntü sürücülerinin karmaşıklığını ve boyutunu artırma

3B sürücüler zaman içinde daha karmaşık hale geldi. Daha karmaşık kodlarda daha fazla hata olması, sürücünün bir sürücü hatasının sistemin yeniden başlatılmasına neden olmadığı kullanıcı modunda mevcut olmasını yararlı hale getirir. Yukarıdaki şekilde görülebileceği gibi, görüntü sürücüsü karmaşık bir kullanıcı modu bileşenine ve daha basit bir çekirdek modu bileşenine ayrılmıştır.

Oturum ve genel çekirdek adres alanlarını eşitleme zorluğu

Windows XP'de, görüntü sürücüsü iki farklı adres alanında bulunur: oturum alanı ve çekirdek alanı. Sürücünün bazı bölümlerinin güç yönetimi olayları gibi olaylara yanıt vermesi gerekir. Bunun oturum adres alanında sürücü durumuyla eşitlenmesi gerekir. Bu zor bir görevdir ve görüntü sürücüleri bu ayrı adres alanlarıyla ilgilenmeye çalıştığında hatalara yol açabilir.

Bileşik pencere yönetimi

Windows 7'de tanıtılan oluşturma penceresi yöneticisi Olan Masaüstü Pencere Yöneticisi (DWM), tüm pencereleri ekran dışı yüzeylere işler ve ardından bunları ekranda görüntülenecek şekilde bir araya getirir. Bunun için GDI, daha sonra görüntülenecek Direct3D tarafından işlenecek bir yüzeye işlenebilmesi gerekir. GDI ve Direct3D paralel sürücü yığınları olduğundan bu durum XP sürücü modelinde bir sorun oluşturuyordu.

Sonuç olarak, Windows Vista'da GDI DDI görüntü sürücüsü, GDI içeriğini ekrana oluşturulacak bir sistem belleği bit eşlemine işleyen Microsoft tarafından sağlanan Kurallı Görüntü Sürücüsü (CDD) olarak uygulandı.

Windows 7'de GDI işleme

Windows Vista'da kullanılan sürücü modeli, her GDI penceresinin hem video bellek yüzeyi hem de sistem bellek yüzeyi tarafından yedeklenmesini gerektiriyordu. Bu, sistem belleğinin her GDI penceresi için kullanılmasına neden oldu.

Bu nedenle, GDI Windows 7'de yeniden değiştirildi. GDI, bir sistem belleği yüzeyine işlemek yerine bir diyafram bellek segmentine işlemek üzere değiştirildi. Diyafram belleği, pencere içeriğini tutan video belleği yüzeyinden güncellenebilir. GDI, diyafram belleğine geri işlenebilir ve sonuç daha sonra pencere yüzeyine geri gönderilebilir. Diyafram açıklığı bellek kesimi GPU tarafından ele alınabildiğinden GPU, video bellek yüzeyindeki bu güncelleştirmeleri hızlandırabilir. Örneğin, metin işleme, BitBlts, AlphaBlend, TransparentBlt ve StretchBlt bu gibi durumlarda hızlandırılır.

Windows 7'de Direct2D ve GDI hızlandırmasını karşılaştırma

Direct2D ve GDI, ikisi de donanım hızlandırmalı 2D anlık mod işleme API'leridir. Ancak, her iki API'de de kalan bir dizi fark vardır.

Kaynakların konumu

GDI kaynaklarını( özellikle bit eşlemleri) varsayılan olarak sistem belleğinde tutar. Direct2D, kaynaklarını görüntü bağdaştırıcısındaki video belleğinde tutar. GDI'nin video belleğini güncelleştirmesi gerektiğinde, kaynak zaten diyafram açıklığı bellek kesiminde değilse veya işlem doğrudan ifade edilemiyorsa bu işlem veri yolu üzerinden yapılmalıdır. Buna karşılık, kaynaklar zaten video belleğinde olduğundan Direct2D yalnızca temel öğelerini Direct3D temel bilgilerine çevirebilir.

İşleme yöntemi

Uyumluluğu korumak için GDI, CPU kullanarak işlemesini büyük ölçüde apertür belleğine gerçekleştirir. Buna karşılık, Direct2D API çağrılarını Direct3D temel değerlerine ve çizim işlemlerine çevirir. Sonuç daha sonra GPU'da işlenir. GDI'nin rendering işlemlerinin bir bölümü, açıklık belleği GDI penceresini temsil eden video bellek yüzeyine kopyalandığında, GPU üzerinde gerçekleştirilir.

Ölçeklenebilirlik

Direct2Dişleme çağrılarının tümü GPU'ya bağımsız komut akışlarıdır. Her Direct2D fabrikası farklı bir Direct3D cihazını temsil eder. GDI sistemdeki tüm uygulamalar için bir komut akışı kullanır. GDI'nin yöntemi, GPU ve CPU görüntüleme bağlamında aşırı yük oluşturabilir.

Yer

Direct2D, Direct3D çalışma süresi ve kullanıcı modu Direct3D sürücüsü de dahil olmak üzere tamamen kullanıcı modunda çalışır. Bu, çekirdekteki kod hatalarından kaynaklanan sistem kilitlenmelerini önlemeye yardımcı olur. GDI , işlevlerinin çoğunu çekirdek modundaki oturum alanında bulundurur, ancak API yüzeyi kullanıcı modundadır.

Donanım Hızlandırma kullanılabilirliği

GDI, Windows XP'de hızlandırılmış donanımdır ve Masaüstü Pencere Yöneticisi çalışırken ve WDDM 1.1 sürücüsü kullanımdayken Windows 7'de hızlandırılır. Direct2D, neredeyse tüm WDDM sürücülerinde ve DWM'nin kullanılıp kullanılmadığı konusunda hızlandırılmış donanımdır. Vista'da GDI her zaman CPU üzerinde işlenir.

Sunu Modeli

Windows ilk tasarlandığında, her pencerenin kendi bit eşleminde depolanmasına izin vermek için yeterli bellek yoktu. Sonuç olarak, GDI her zaman mantıksal olarak doğrudan ekrana işlenir ve uygulamanın penceresinin dışında işlenmediğinden emin olmak için çeşitli kırpma bölgeleri uygulanır. Direct2D modelinde, bir uygulama grafiklerini bir arka tampona işler ve uygulama çizimi tamamlandığında sonuç görüntülenir. Bu, Direct2D'nin animasyon senaryolarını GDI'dan çok daha akıcı bir şekilde işlemesini sağlar.

Sonuç

Mevcut GDI kodu Windows 7 altında düzgün çalışmaya devam edecektir. Ancak yeni grafik işleme kodu yazarken, modern GPU'lardan daha iyi yararlanan Direct2D dikkate alınmalıdır.