Direct3D - Direct3D

Doğrudan3D
Geliştirici(ler) Microsoft
İlk sürüm 2 Haziran 1996 ; 25 yıl önce ( 1996-06-02 )
kararlı sürüm
12 / 29 Temmuz 2015 ; 6 yıl önce ( 2015-07-29 )
İşletim sistemi pencereler
Platformu x86 , KOL
Tip 3D grafik API'sı
Lisans tescilli
İnternet sitesi msdn .microsoft .com /tr-tr /library /windows /desktop /hh309466

Direct3D , Microsoft Windows için bir grafik uygulama programlama arabirimidir (API) . DirectX'in bir parçası olan Direct3D, oyunlar gibi performansın önemli olduğu uygulamalarda üç boyutlu grafikler oluşturmak için kullanılır . Direct3D , grafik kartında mevcutsa donanım hızlandırmayı kullanır , bu da tüm 3B işleme hattının donanım hızlandırmasına veya hatta yalnızca kısmi hızlandırmaya izin verir. Direct3D, Z-arabelleğe alma , W-arabelleğe alma, şablon arabelleğe alma , uzamsal kenar yumuşatma , alfa harmanlama , renk karıştırma, mipmapping , doku karıştırma, kırpma , ayırma , atmosferik efektler, perspektif düzeltmeli doku dahil olmak üzere 3D grafik donanımının gelişmiş grafik yeteneklerini ortaya çıkarır. haritalama , programlanabilir HLSL gölgelendiricileri ve efektleri. Diğer DirectX teknolojileriyle entegrasyon, Direct3D'nin video eşleme, 2B kaplama düzlemlerinde donanım 3B oluşturma ve hatta hareketli grafikler gibi özellikleri sunmasını sağlayarak, etkileşimli medya bağlarında 2B ve 3B grafiklerin kullanılmasını sağlar.

Direct3D, 3B bilgisayar grafikleri oluşturma için birçok komut içerir ; ancak sürüm 8'den bu yana Direct3D, DirectDraw çerçevesinin yerini almıştır ve ayrıca 2D grafiklerin oluşturulmasının sorumluluğunu da almıştır . Microsoft, 3D grafik kartlarında bulunan en son teknolojiyi desteklemek için Direct3D'yi sürekli olarak güncellemeye çalışmaktadır. Direct3D, tam köşe yazılım öykünmesi sunar, ancak donanımda bulunmayan özellikler için piksel yazılım öykünmesi sunmaz. Örneğin, Direct3D kullanılarak programlanan yazılım piksel gölgelendirici gerektiriyorsa ve kullanıcının bilgisayarındaki video kartı bu özelliği desteklemiyorsa, Direct3D, 3D modellerin çokgenlerini ve dokularını hesaplayıp işlemesine rağmen, genellikle bir donanım eşdeğerine kıyasla düşük kalite ve performans. API, çoğu gerçek zamanlı 3D uygulama için çok yavaş olmasına ve genellikle yalnızca hata ayıklama için kullanılmasına rağmen, yazılımda genel bir grafik kartını taklit eden bir Referans Rasterleştirici (veya REF aygıtı) içerir. Direct3D 10.1'in eksiksiz özellik setini taklit etmek için tasarlanmış yeni bir gerçek zamanlı yazılım rasterleştiricisi, WARP , Windows 7 ve Windows Vista Service Pack 2 ile Platform Güncellemesi ile birlikte gelir; performansının çok çekirdekli CPU'lardaki alt uç 3D kartlarla eşit olduğu söyleniyor.

DirectX'in bir parçası olarak Direct3D, Windows 95 ve üzeri için mevcuttur ve Xbox konsol sistemlerinin farklı sürümlerinde vektör grafik API'sinin temelidir . Şarap uyumluluk katmanı, bir özgür yazılım birkaç Windows API'larından reimplementation, Direct3D bir uygulamayı içermektedir.

Direct3D'nin ana rakibi Khronos' OpenGL ve onun devamı olan Vulkan'dır . Fahrenheit , Microsoft ve SGI tarafından 1990'larda OpenGL ve Direct3D'yi birleştirme girişimiydi , ancak sonunda iptal edildi.

genel bakış

  • Direct3D 6.0 – Çoklu doku oluşturma
  • Direct3D 7.0 – Donanım Dönüşümü, Kırpma ve Aydınlatma (TCL/T&L)
  • Direct3D 8.0 – Pixel Shader 1.0 ve Vertex Shader 1.0
  • Direct3D 8.0a - Pixel Shader 1.1, Pixel Shader 1.2, Pixel Shader 1.3
  • Direct3D 8.1 – Pixel Shader 1.4 ve Vertex Shader 1.1
  • Direct3D 9.0 – Shader Model 2.0 (Pixel Shader 2.0 ve Vertex Shader 2.0)
  • Direct3D 9.0b – Piksel Gölgelendirici 2.0b
  • Direct3D 9.0c – Shader Model 3.0 (Pixel Shader 3.0 ve Vertex Shader 3.0), GPGPU
  • Direct3D 9.0L – Yalnızca Windows Vista , Direct3D 9.0c, Shader Model 3.0, Windows Graphics Foundation 1.0, DXVA 1.0, GPGPU
  • Direct3D 10.0 – Windows Vista/Windows 7, Shader Model 4.0 , Windows Graphics Foundation 2.0, DXVA 2.0, GPGPU
  • Direct3D 10.1 – Windows Vista SP1/Windows 7, Shader Model 4.1, Windows Graphics Foundation 2.1, DXVA 2.1, GPGPU
  • Direct3D 11.0 – Windows Vista SP2/ Windows 7 , Shader Model 5.0, Mozaikleme, Çok iş parçacıklı işleme, Hesaplama gölgelendiricileri, Direct3D 9/10/10.1, GPGPU çalıştıran donanım ve yazılım tarafından uygulanır
  • Direct3D 11.1 – Windows 7 SP1/ Windows 8 , Stereoskopik 3D İşleme, GPGPU
  • Direct3D 11.2 – Windows 8.1 , Döşenmiş kaynaklar, GPGPU
  • Direct3D 11.3 – Windows 10 , Shader Model 5.1, GPGPU
  • Direct3D 12.0 – Windows 10 , düşük seviyeli işleme API'si , Shader Model 6.0, GPGPU

Direct3D 2.0 ve 3.0

1992'de Servan Keondjian ve Doug Rabson , tıbbi görüntüleme ve CAD yazılımında kullanılan Reality Lab adlı bir 3D grafik API'si geliştiren RenderMorphics adlı bir şirket kurdular . Bu API'nin iki sürümü yayınlandı. Microsoft, RenderMorphics'i Şubat 1995'te satın alarak Keondjian'ı Windows 95 için bir 3D grafik motoru uygulamak üzere görevlendirdi . Direct3D'nin ilk sürümü DirectX 2.0 (2 Haziran 1996) ve DirectX 3.0'da (26 Eylül 1996) gönderildi.

Direct3D başlangıçta hem " korunan mod " hem de " anında mod " 3D API'lerini uyguladı . DirectDraw gibi diğer DirectX API'leri gibi , her ikisi de COM'a dayalıydı . Korunan mod, çok az benimsenen bir sahne grafiği API'siydi. Oyun geliştiricileri, donanımın etkinlikleri üzerinde Direct3D tutulan modunun sağlayabileceğinden daha fazla doğrudan kontrol talep etti. Önemli bir hacim satan yalnızca iki oyun, Lego Island ve Lego Rock Raiders , Direct3D tutulan modunu temel alıyordu, bu nedenle Microsoft, DirectX 3.0'dan sonra tutulan modunu güncellemedi.

DirectX 2.0 ve 3.0 için Direct3D anında modu, Microsoft'un donanım satıcılarının doğrudan destekleyeceğini umduğu bir "yürütme arabelleği" programlama modeli kullandı. Yürütme arabelleklerinin donanım belleğinde ayrılması ve 3B oluşturmayı gerçekleştirmek için donanım tarafından ayrıştırılması amaçlanmıştır. O zamanlar programlamak için son derece garip olarak kabul edildiler, ancak yeni API'nin benimsenmesini engellediler ve Microsoft'un OpenGL'yi oyunlar ve iş istasyonu uygulamaları için resmi 3D işleme API'si olarak benimsemesini istedi. (bkz. OpenGL ve Direct3D )

Aksine bir oyun API olarak OpenGL benimsemek yerine, Microsoft Direct3D geliştirmeye devam etmek, sadece OpenGL ile rekabet etmek istemem, fakat gibi diğer mülkiyet API'larla daha etkin rekabet seçti 3dfx'in 'ın Glide .

Başından beri acil modu da desteklenmektedir Tılsım 'ın render kiremitli IDirect3DDevice arayüzünün BeginScene / EndScene yöntemleriyle.

Doğrudan3D 4.0

1996 sonlarında piyasaya sürülmesi planlanan ve ardından iptal edilen DirectX 4.0 için Direct3D'de önemli bir değişiklik planlanmadı .

Doğrudan3D 5.0

Aralık 1996'da Redmond'daki bir ekip Direct3D Immediate Modunun geliştirilmesini devralırken, Londra merkezli RenderMorphics ekibi Retained Mode üzerinde çalışmaya devam etti. Redmond ekibi, uygulamaların yürütme arabellekleri oluşturma ihtiyacını ortadan kaldıran DrawPrimitive API'sini ekleyerek Direct3D'yi Glide ve OpenGL gibi diğer anında mod oluşturma API'lerine daha çok benzemesini sağladı . DrawPrimitive'in ilk beta sürümü Şubat 1997'de ve son sürüm DirectX 5.0 ile Ağustos 1997'de gönderildi.

DirectX 5.0, kullanımı daha kolay bir anında mod API'sinin yanı sıra, Direct3D cihazlarının grafik çıktılarını çeşitli DirectDraw yüzeylerine yazmasını sağlayan SetRenderTarget yöntemini ekledi.

Direct3D 6.0

DirectX 6.0 (Ağustos 1998'de piyasaya sürüldü), çağdaş donanımları (çok dokulu ve şablon arabellekleri gibi ) ve ayrıca x87 , SSE ve 3DNow için optimize edilmiş geometri boru hatlarını kapsayacak çok sayıda özellik tanıttı ! ve programlamayı basitleştirmek için isteğe bağlı doku yönetimi. Direct3D 6.0 ayrıca, lisans satıcısına pazara sunma süresi avantajı karşılığında API'ye dahil edilmek üzere belirli donanım satıcılarından Microsoft tarafından lisanslanan özellikler için destek içeriyordu. S3 doku sıkıştırma desteği, API'ye dahil edilmesi amacıyla DXTC olarak yeniden adlandırılan böyle bir özellikti. Bir diğeri, TriTech'in tescilli tümsek haritalama tekniğiydi. Microsoft bu özellikleri DirectX'e dahil etti, ardından diğer satıcıların donanımlarındaki özelliklerin geniş çapta benimsenmesini teşvik etmek için sürücülerin bir Windows logosu alması için gereken gereksinimlere ekledi .

DirectX 6.0 için küçük bir güncelleme Şubat 1999 DirectX 6.1 güncellemesinde geldi. Bu sürüm, DirectMusic desteğini ilk kez eklemenin yanı sıra , Intel Pentium III 3D uzantıları için desteği geliştirdi .

1997'de gönderilen gizli bir not, Microsoft'un DirectX 6.0'da Talisman için tam desteği duyurmayı planladığını , ancak API'nin iptal edildiğini gösteriyor (Ayrıntılar için Microsoft Tılsım sayfasına bakın).

Direct3D 7.0

DirectX 7.0 (Eylül 1999'da piyasaya sürüldü), .dds doku biçimini ve dönüştürme ve aydınlatma donanımı hızlandırma desteğini (ilk olarak Nvidia'nın GeForce 256 ile PC donanımında mevcut ) ve ayrıca donanım belleğinde köşe arabellekleri ayırma yeteneğini tanıttı . Donanım tepe arabellekleri, DirectX tarihinde OpenGL'ye göre ilk önemli gelişmeyi temsil eder. Direct3D 7.0 ayrıca çok dokulu donanım için DirectX desteğini artırdı ve sabit işlevli çok dokulu boru hattı özelliklerinin zirvesini temsil etti: güçlü olmasına rağmen, programlamak o kadar karmaşıktı ki, grafik donanımının gölgeleme yeteneklerini ortaya çıkarmak için yeni bir programlama modeline ihtiyaç duyuldu.

Direct3D 8.0

2000 yılının Kasım ayında piyasaya sürülen DirectX 8.0 , programlanabilirliği köşe ve piksel gölgelendiricileri biçiminde sunarak geliştiricilerin gereksiz donanım durumu hakkında endişelenmeden kod yazabilmelerini sağladı. Gölgelendirici programlarının karmaşıklığı, görevin karmaşıklığına bağlıydı ve ekran sürücüsü , bu gölgelendiricileri donanım tarafından anlaşılabilecek talimatlara göre derledi . Direct3D 8.0 ve programlanabilir gölgeleme yetenekleri, çizimin karmaşık bir durum makinesi tarafından kontrol edildiği bir OpenGL tarzı sabit işlevli mimariden ilk büyük ayrılıktı. Direct3D 8.0 ayrıca DirectDraw'ı ayrı bir API olarak ortadan kaldırdı . Direct3D, oluşturma sonuçlarını görüntülemek için kullanılan Present() gibi uygulama geliştirme için hala gerekli olan tüm DirectDraw API çağrılarını içeriyordu.

Direct3D, kullanıcı dostu olarak kabul edilmedi, ancak DirectX sürüm 8.1'den itibaren birçok kullanılabilirlik sorunu çözüldü. Direct3D 8, tepe gölgelendiriciler , piksel gölgelendiriciler , sis , çarpma haritalama ve doku haritalama gibi birçok güçlü 3B grafik özelliği içeriyordu .

Doğrudan3D 9

Aralık 2002'de piyasaya sürülen Direct3D 9.0 , kayan nokta doku biçimleri, Çoklu İşleme Hedefleri (MRT), Çoklu Öğe Dokuları, tepe gölgelendiricisinde doku aramaları ve şablon arabellek teknikleri için Yüksek Düzeyli Gölgelendirici Dili desteğinin yeni bir sürümünü ekledi .

Direct3D 9Ex [1]

Direct3D 9Ex (önceki sürüm 9.0L (L - kod adı Windows Longhorn)) olarak adlandırılan yalnızca Windows Vista ve daha yeni sürümlerde (7, 8, 8.1 ve 10) bulunan bir uzantı , Windows Vista'nın Windows Ekran Sürücüsü Modeli tarafından sunulan avantajların kullanılmasına olanak tanır (WDDM) ve Windows Aero için kullanılır . Direct3D 9EX, DirectX 9 sınıfı WDDM sürücülerle bağlantılı olarak grafik bellek sanallaştırıldı sağlar belleğine , sistem belleğine grafik işlemleri kesintiye ve planlanmış ve DirectX süreçler arasında paylaşılmasına yüzeyleri sağlar sağlar. Direct3D 9Ex, daha önce Windows Graphics Foundation'ın (WGF) 1.0 sürümü olarak biliniyordu.

Doğrudan3D 10

Windows Vista , Direct3D API için büyük bir güncelleme içerir. Başlangıçta WGF 2.0 (Windows Graphics Foundation 2.0), ardından DirectX 10 ve DirectX Next olarak adlandırıldı. Direct3D 10 , güncellenmiş bir gölgelendirici modeli 4.0 ve gölgelendirici programları için isteğe bağlı kesintiye sahiptir. Bu modelde gölgelendiriciler önceki sürümlerde olduğu gibi hala sabit aşamalardan oluşur, ancak tüm aşamalar neredeyse birleşik bir arabirimin yanı sıra dokular ve gölgelendirici sabitleri gibi kaynaklar için birleşik bir erişim paradigmasını destekler. Dilin kendisi, tamsayı işlemleri, büyük ölçüde artan talimat sayısı ve daha fazla C benzeri dil yapısı dahil olmak üzere daha anlamlı olacak şekilde genişletildi. Daha önce mevcut olan tepe noktası ve piksel gölgelendirici aşamalarına ek olarak, API, geometrinin bir gölgelendirici içinden gerçekten oluşturulmasına izin vermek için eski bir tepe noktası içeri/bir tepe noktası modelini kıran bir geometri gölgelendirici aşaması içerir . tamamen grafik donanımında oluşturulabilir.

Windows XP, DirectX 10.0 ve üzeri tarafından desteklenmez.

API'nin önceki sürümlerinden farklı olarak, Direct3D 10 artık belirli bir grafik aygıtında hangi özelliklerin desteklendiğini belirtmek için "yetenek bitleri" (veya "büyük harfler") kullanmamaktadır. Bunun yerine, bir görüntüleme sisteminin "Direct3D 10 uyumlu" olması için desteklenmesi gereken minimum donanım yetenekleri standardını tanımlar. Bu, yetenek kontrol kodunu ve belirli yeteneklerin varlığına veya yokluğuna dayalı özel durumları kaldırarak uygulama kodunu düzene sokma hedefiyle önemli bir sapmadır.

Direct3D 10 donanımı, Windows Vista'nın ilk sürümünden sonra nispeten nadir olduğundan ve Direct3D 10 uyumlu olmayan grafik kartlarının büyük yüklü tabanı nedeniyle, ilk Direct3D 10 uyumlu oyunlar hala Direct3D 9 işleme yolları sağlar. Bu tür oyunlara örnek olarak, Company of Heroes gibi orijinal olarak Direct3D 9 için yazılmış ve yayınlandıktan sonra Direct3D 10'a aktarılan oyunlar veya Hellgate: London veya Crysis gibi daha sonra geliştirme aşamasında bir Direct3D 10 yolu ile Direct3D 9 için geliştirilmiş oyunlar verilebilir. . DirectX 10 SDK, Şubat 2007'de kullanıma sunuldu.

Doğrudan3D 10.0

Direct3D 10.0 seviyesi donanım aşağıdaki özellikleri desteklemelidir: Yeni geometri-gölgelendirici aşamasında tüm ilkelleri işleme yeteneği, akış-çıktı aşamasını kullanarak ardışık düzen tarafından oluşturulan köşe verilerini belleğe çıkarma yeteneği, çoklu örneklemeli alfadan kapsama desteği, artık bir oluşturma hedefi olarak bağlı olmadığında bir derinlik/kalıp yüzeyinin veya çok örnekli bir kaynağın yeniden okunması, tam HLSL entegrasyonu - tüm Direct3D 10 gölgelendiriciler HLSL'de yazılır ve ortak gölgelendirici çekirdeği, tamsayı ve bit düzeyinde gölgelendirici işlemleri ile uygulanır, organizasyon ardışık düzen durumunun 5 değişmez durum nesnesine dönüştürülmesi, gölgelendirici sabitlerinin sabit arabellekler halinde düzenlenmesi, artan sayıda oluşturma hedefi, doku ve örnekleyici, gölgelendirici uzunluk sınırı yok, yeni kaynak türleri ve kaynak biçimleri, katmanlı çalışma zamanı/API katmanları, gerçekleştirme seçeneği -bir geometri gölgelendirici kullanarak ilkel malzeme takası ve kurulumu, bir görünüm kullanarak kaynak erişiminin daha fazla genelleştirilmesi, eski donanım yeteneği bitleri (büyük harfler) kaldırıldı.

  • Sabit boru hatları, tamamen programlanabilir boru hatları (genellikle birleşik boru hattı mimarisi olarak adlandırılır) lehine kaldırılıyor ve aynı şekilde taklit edilecek şekilde programlanabiliyor.
  • CPU'nun durumları verimli bir şekilde değiştirmesini (çoğunlukla) etkinleştirmek için yeni durum nesnesi.
  • Shader model 4.0 , grafik işlem hattının programlanabilirliğini geliştirir . Tamsayı ve bitsel hesaplamalar için talimatlar ekler.
  • Ortak gölgelendirici çekirdeği, tam bir IEEE uyumlu 32 bit tamsayı ve bitsel işlemler seti sağlar. Bu işlemler, grafik donanımında yeni bir algoritma sınıfını etkinleştirir; örnekler arasında sıkıştırma ve paketleme teknikleri, FFT'ler ve bit alanı program akışı denetimi bulunur.
  • Bir oluşturan bitişik üçgenler üzerinde çalışan geometri gölgelendiricileri .
  • Doku dizileri, CPU müdahalesi olmadan GPU'daki dokuların değiştirilmesini sağlar.
  • Tahmini İşleme , çizim çağrılarının diğer bazı koşullara göre yok sayılmasına izin verir. Bu, nesnelerin görünür olmadığı veya görülemeyecek kadar uzak olduğu durumlarda oluşturulmasını önleyen hızlı kapatma ayırmayı sağlar .
  • Örnekleme 2.0 desteği, ordular, çimenler veya ağaçlar gibi birden çok benzer ağ örneğinin tek bir çizim çağrısında oluşturulmasına izin vererek, birden çok benzer nesne için gereken işlem süresini tek bir nesneye indirger.

Direct3D 10.1

Direct3D 10.1 , Direct3D 10'un küçük bir güncelleme olarak yayınlanmasından kısa bir süre sonra Microsoft tarafından duyuruldu. Spesifikasyon, Kasım 2007 DirectX SDK'nın piyasaya sürülmesiyle tamamlandı ve çalışma zamanı, Mart 2008'in ortasından beri mevcut olan Windows Vista SP1 ile birlikte gönderildi .

Direct3D 10.1, grafik satıcıları için birkaç görüntü kalitesi standardı daha belirler ve geliştiricilere görüntü kalitesi üzerinde daha fazla kontrol sağlar. Özellikler arasında kenar yumuşatma üzerinde daha hassas kontrol (hem örnek başına gölgeleme ile süper örnekleme hem de örnek konumu üzerinde uygulama kontrolü) ve mevcut özelliklerin bazılarında (küp harita dizileri ve bağımsız karıştırma modları) daha fazla esneklik bulunur. Direct3D 10.1 seviyesi donanım aşağıdaki özellikleri desteklemelidir: Kapsama dayalı şeffaflığı genelleştirmek ve çoklu örneklemenin çok geçişli işleme, daha iyi ayırma davranışı ile daha verimli çalışmasını sağlamak için çoklu örnekleme geliştirildi – Sıfır alanlı yüzler otomatik olarak ayıklanır; bu yalnızca tel kafes oluşturmayı etkiler, oluşturma hedefi başına bağımsız karışım modları, ilkel rasterleştirme ile yeni örnek frekans piksel gölgelendirici yürütme, artırılmış boru hattı aşaması bant genişliği, hem renk hem de derinlik/kalıp MSAA yüzeyleri artık CopyResource ile kaynak veya hedef olarak kullanılabilir, MultisampleEnable yalnızca çizgi rasterleştirmeyi etkiler (noktalar ve üçgenler etkilenmez) ve bir çizgi çizme algoritması seçmek için kullanılır. Bu, Direct3D 10'dan bazı çok örnekli rasterleştirmenin artık desteklenmediği, Texture Sampling – sample_c ve sample_c_lz talimatlarının hem Texture2DArrays hem de TextureCubeArrays ile çalışacak şekilde tanımlandığı anlamına gelir, bir dizi dizini belirtmek için Location üyesini (alfa bileşeni) kullanır, TextureCubeArrays için destek.

  • Zorunlu 32 bit kayan nokta filtreleme.
  • Kayan Nokta Kuralları – Kayan nokta için aynı IEEE-754 kurallarını kullanır DIŞINDA 32-bit kayan nokta işlemleri, sonsuz kesinlikteki sonucun 0,5 birim-son-yerinde (0,5 ULP) bir sonuç üretmek için sıkılaştırılmıştır. Bu toplama, çıkarma ve çarpma için geçerlidir. (Çarpma için 0,5 ULP'ye, karşılıklılık için 1.0 ULP'ye kadar doğruluk).
  • Formatlar – float16 harmanlamanın hassasiyeti 0,5 ULP'ye yükseldi. UNORM16/SNORM16/SNORM8 formatları için de karıştırma gereklidir.
  • Belirli 32/64/128 bit önceden yapılandırılmış, daktilo edilmiş kaynaklar ve aynı bit genişliklerinin sıkıştırılmış temsilleri arasında kopyalama yaparken Dönüştürmeyi Biçimlendir.
  • R32G32B32A32 ve R32G32B32 dışındaki tüm işleme hedefleri için 4x MSAA için zorunlu destek.
  • Gölgelendirici modeli 4.1

Direct3D 10 sınıfı donanım ve sürücü arabirimlerini kesinlikle gerektiren Direct3D 10'un aksine, Direct3D 10.1 çalışma zamanı, " özellik seviyeleri " kavramını kullanarak Direct3D 10.0 donanımında çalışabilir , ancak yeni özellikler, özellik düzeyi 10_1'i ortaya çıkaran yeni donanımlar tarafından özel olarak desteklenir.

Haziran 2008 itibariyle mevcut olan tek Direct3D 10.1 donanımı , ATI'nin Radeon HD 3000 serisi ve Radeon HD 4000 serisiydi ; 2009 yılında, onlar katıldı Krom 430 / 440GT gelen GPU'ları S3 Graphics ve alt uç belirli modellerde 200 serisi GeForce gelen Nvidia . 2011'de Intel yonga setleri, Intel HD Graphics 2000'in (GMA HD) tanıtımıyla Direct3D 10.1'i desteklemeye başladı .

Doğrudan3D 11

Direct3D 11 , Windows 7'nin bir parçası olarak yayınlandı. 22 Temmuz 2008'de Gamefest 2008'de sunuldu ve 26 Ağustos 2008'de Nvision 08 teknik konferansında gösterildi. Direct3D 11 Teknik Önizleme, DirectX SDK'nın Kasım 2008 sürümüne dahil edildi. . AMD, 3 Haziran 2009'da Computex'te çalışan DirectX11 donanımının önizlemesini yaptı ve bazı DirectX 11 SDK örneklerini çalıştırdı.

Direct3D 11 çalışma zamanı, Direct3D 10.1 çalışma zamanında ilk kez sunulan işlevselliği genişleterek, "özellik seviyeleri" kavramını kullanarak Direct3D 9 ve 10.x sınıfı donanım ve sürücüler üzerinde çalışabilir. Özellik seviyeleri, geliştiricilerin işleme hattını Direct3D 11 API altında birleştirmesine ve daha iyi kaynak yönetimi ve çoklu iş parçacığı oluşturma gibi API iyileştirmelerinden giriş seviyesi kartlarda bile faydalanmasına olanak tanır, ancak yeni gölgelendirici modelleri ve işleme aşamaları gibi gelişmiş özellikler yalnızca yukarı doğru gösterilecektir. -seviye donanım. Popüler DirectX 9.0a kartlarının çeşitli özelliklerini kapsayan üç "10 Düzey 9" profili vardır ve Direct3D 10, 10.1 ve 11'in her birinin ayrı bir özellik düzeyi vardır; her üst düzey, bir alt düzeyin katı bir üst kümesidir.

Mozaikleme daha önce Direct3D 10 için düşünülmüştü, ancak daha sonra terk edildi. Radeon R600 gibi GPU'lar , Direct3D 9/10/0.1 ve OpenGL ile kullanılabilen bir mozaikleme motoruna sahiptir, ancak Direct3D 11 ile uyumlu değildir (Microsoft'a göre). Radeon 8xxx, GeForce 3/4 gibi daha eski grafik donanımları, başka bir mozaikleme biçimini (RT yamaları, N yamaları) destekliyordu, ancak bu teknolojiler hiçbir zaman önemli bir kullanım görmedi. Bu nedenle, destekleri daha yeni donanımlardan kesildi.

Microsoft ayrıca Direct3D API tarafından hiçbir zaman gösterilmeyen, ancak Videologic'in PowerVR çip serisi gibi erken Direct3D donanımları tarafından neredeyse şeffaf bir şekilde desteklenen siparişten bağımsız şeffaflık gibi diğer özelliklere de işaret etti .

Direct3D 11.0

Direct3D 11.0 özellikleri şunları içerir: Shader Model 5.0 desteği, Dinamik gölgelendirici bağlantısı, adreslenebilir kaynaklar, ek kaynak türleri, alt rutinler, geometri örnekleme, piksel gölgelendirici girişi olarak kapsama, girişlerin programlanabilir enterpolasyonu, yeni doku sıkıştırma biçimleri (1 yeni LDR biçimi ve 1 yeni HDR formatı), WDDM önyüklemesini sınırlamak için doku kıskaçları, doku filtrelemede 8 bitlik alt metin ve alt mip hassasiyeti gerektirir, 16K doku sınırları, Gather4(çok bileşenli dokular için destek, programlanabilir ofsetler için destek), DrawIndirect, muhafazakar oDepth, Derinlik Sapması, adreslenebilir akış çıkışı, kaynak başına mipmap sıkıştırma, kayan nokta görünüm pencereleri, gölgelendirici dönüştürme talimatları, geliştirilmiş çoklu kullanım.

  • Gölgelendirici Modeli 5
  • Çalışma zamanında düşük ayrıntılı bir çokgen modelden görünen çokgen sayısını artırmak için Mozaikleme ve Mozaik Gölgelendiriciler için destek
  • Çok iş parçacıklı işleme — çok çekirdekli CPU'lar için farklı iş parçacıklarından aynı Direct3D cihaz nesnesine işlemek için
  • Hesaplayın shaderlar - gibi grafiksel olmayan görevler için gölgelendirici boru hattı ortaya akışı işleme ne ruhu içindeki fizik ivme, OpenCL Nvidia CUDA , ATI Stream ve HLSL Shader Model 5 diğerleri arasında elde eder.
  • Tüm işleme hedefleri için 4x MSAA ve R32G32B32A32 biçimleri dışındaki tüm oluşturma hedefi biçimleri için 8x MSAA için zorunlu destek.

Diğer dikkate değer özellikler, yüksek kaliteli ve HDR/alfa dokuların daha verimli bir şekilde paketlenmesi ve artırılmış bir doku önbelleği için iki yeni doku sıkıştırma algoritmasının eklenmesidir .

İlk olarak Sürüm Adayı sürümünde görülen Windows 7 , ilk yayınlanan Direct3D 11 desteğini entegre eder. Platform Güncelleme için Windows Vista tam özellikli Direct3D 11 çalışma zamanını ve DXGI 1.1 güncellemesini yanı sıra gibi Windows 7 den diğer ilgili bileşenleri içerir ÇÖZGÜ , Direct2D'yi , DirectWrite ve WIC .

Doğrudan3D 11.1

Direct3D 11.1 , Windows 8 ile birlikte gelen bir API güncellemesidir . Windows 8'deki Direct3D çalışma zamanı, DXGI 1.2'ye sahiptir ve yeni WDDM 1.2 aygıt sürücüleri gerektirir . Windows 8 Developer Preview için Windows SDK'nın ön sürümü 13 Eylül 2011'de yayınlandı.

Yeni API, gölgelendirici izleme ve HLSL derleyici geliştirmeleri, minimum hassasiyette HLSL skaler veri türleri için destek, her boru hattı aşamasında UAV'ler (Sırasız Erişim Görünümleri), hedeften bağımsız rasterleştirme (TIR), NO_OVERWRITE ile dinamik arabelleklerin SRV'lerini eşleme seçeneği, gölgelendirici içerir video kaynaklarının işlenmesi, bir oluşturma hedefinde mantıksal işlemleri kullanma seçeneği, sabit bir arabelleğin bir alt aralığını bir gölgelendiriciye bağlama ve geri alma seçeneği, bir gölgelendiricinin erişebileceğinden daha büyük sabit arabellekler oluşturma seçeneği, kaynakları ve kaynak görünümlerini atma seçeneği , alt kaynakları yeni kopyalama seçenekleriyle değiştirme seçeneği, örnek sayısını bir rasterleştirici durumu oluşturmaya zorlama seçeneği, bir kaynak görünümünün tamamını veya bir kısmını temizleme seçeneği, Oturum 0 işlemlerinde Direct3D kullanma seçeneği, HLSL'de kullanıcı klip düzlemlerini belirleme seçeneği özellik seviyesi 9 ve üzerinde, özellik seviyesi 9'da gölge arabelleği desteği, video oynatma desteği, paylaşılan Texture2D kaynakları için genişletilmiş destek ve Dire arasında anında geçiş ct3D 10 ve 11 bağlamları ve özellik seviyeleri. Direct3D 11.1, daha büyük sabit arabellekler ve isteğe bağlı çift duyarlıklı yönergeler gibi gölgelendirici diline küçük güncellemeler getiren yeni özellik düzeyi 11_1'in yanı sıra, giriş performansını artırmak için geliştirilmiş karıştırma modları ve 16 bit renk biçimleri için zorunlu destek içerir. Intel HD Graphics gibi -seviyeli GPU'lar . WARP, özellik düzeyi 11_1'i destekleyecek şekilde güncellendi.

Platform Güncelleştirme için Windows 7 gibi - WDDM 1.2 bağlıdır bileşenler de, Direct3D 11.1 özellikleri sınırlı bir kümesini içerir özellik seviyesi 11_1 ve ilgili API'ler veya dört tamponlama için stereoskopik oluşturma - mevcut değildir.

Doğrudan3D 11.2

Direct3D 11.2 , Windows 8.1 ile birlikte gönderildi . Yeni donanım özellikleri, WDDM 1.3 sürücüleri ile DXGI 1.3 gerektirir ve çalışma zamanı gölgelendirici modifikasyonu ve bağlantısı, İşlev bağlantı grafiği (FLG), gelen kutusu HLSL derleyicisi, grafik komutlarına açıklama ekleme seçeneğini içerir. Özellik düzeyleri 11_0 ve 11_1, gölgelendirici ayrıntı kıskacı düzeyi (Tier2) ile döşenmiş kaynaklar için isteğe bağlı destek sunar. İkinci özellik, mevcut birçok GPU'da bulunan donanım sayfası tabloları üzerinde etkin bir şekilde kontrol sağlar . WARP , yeni özellikleri tam olarak desteklemek için güncellendi. Ancak 11_2 düzeyinde bir özellik yoktur; yeni özellikler, mevcut özellik seviyelerine dağılmıştır. Donanıma bağlı olanlar üzerinden ayrı ayrı kontrol edilebilir CheckFeatureSupport. Direct3D 11.2'deki bazı "yeni" özellikler aslında bazı eski donanım özelliklerini daha ayrıntılı bir şekilde ortaya koyuyor; örneğin D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT, özellik seviyesi 9_1 ve 9_2 donanım üzerinde örnekleme için kısmi destek sunar, aksi takdirde özellik seviyesi 9_3'ten itibaren tam olarak desteklenir.

Direct3D 11.X

Direct3D 11.X , Xbox One üzerinde çalışan DirectX 11.2'nin bir üst kümesidir . Daha sonra DirectX 12'nin bir parçası olarak duyurulan beraberlik paketleri gibi bazı özellikleri içerir.

Doğrudan3D 11.3

Direct3D 11.3 , Temmuz 2015'te Windows 10 ile birlikte gönderildi; Direct3D 11.x API'sinin genel yapısını korurken, Direct3D 12'den küçük işleme özellikleri içerir. Direct3D 11.3, Shader Model 5.1, isteğe bağlı Shader Özel Şablon Referans Değeri, Yazılan Sırasız Erişim Görünümü Yükleri, Rasterleştirici Sıralı Görünümler (ROV'ler), isteğe bağlı Standart Swizzle, isteğe bağlı Varsayılan Doku Eşleme, Muhafazakar Rasterleştirme (üç katmandan), isteğe bağlı Birleşik Bellek Erişimi ( UMA) desteği ve ek Döşenmiş Kaynaklar(kat 2)(Birim döşenmiş kaynaklar).

Doğrudan3D 11.4

  • Direct3D 11.4 sürüm 1511 – İlk Direct3D 11.4, harici grafik bağdaştırıcıları desteğini ve DXGI 1.5'i geliştiren Windows 10 Threshold 2 güncellemesi (sürüm 1511) ile tanıtıldı.
  • Direct3D 11.4 sürüm 1607 – Windows 10 Yıldönümü Güncellemesi (sürüm 1607) ile güncellenmiş Direct3D 11.4, WDDM 2.1 desteği ve UHDTV HDR10 formatı ( ST 2084 ) ve UWP uygulamaları için değişken yenileme hızları desteği içerir.

Doğrudan3D 12

Direct3D 12 , önceki sürümlere göre daha düşük düzeyde donanım soyutlamasına izin vererek, gelecekteki oyunların çok iş parçacıklı ölçeklemeyi önemli ölçüde iyileştirmesini ve CPU kullanımını azaltmasını sağlar. Bu, Direct3D soyutlama katmanının, Dolaylı Çizim, tanımlayıcı tablolar, özlü ardışık düzen durum nesneleri ve çizim çağrı demetleri gibi yeni özellikler aracılığıyla temel alınan donanımla daha iyi eşleştirilmesiyle elde edilir. AMD'nin Mantle'ına benzer şekilde Direct3D 12'nin ana cazibesi aslında sürücü yükünü azaltmaktır ; Baş geliştiricisi Max McMullen'in sözleriyle, Direct3D 12'nin ana hedefi "konsol düzeyinde verimlilik" ve gelişmiş CPU paralelliği elde etmektir.

Nvidia, Direct3D 12 için geniş desteği açıklamış olsa da, yeni API'nin evrensel çekiciliği konusunda da biraz çekingen davrandılar ve oyun motoru geliştiricilerinin GPU kaynaklarını uygulama kodlarından doğrudan yönetme konusunda hevesli olabileceklerine dikkat çektiler. millet bunu yapmaktan mutlu olmaz.

Shader Model 5.1, Volume Tied Resources(Tier 2), Shader Specified Stencil Reference Value, Typed UAV Load, Conservative Rasterization(Tier 1), Conservative Rasterization ile daha iyi çarpışma ve ayıklama, Rasterizer Sıralı Görünümler (ROV'ler), Standart Swizzles, Varsayılan Doku Eşleme, Takas Zincirleri, swizzled kaynaklar ve sıkıştırılmış kaynaklar , ek karışım modları , programlanabilir karışım ve piksel sıralı UAV ile verimli siparişten bağımsız şeffaflık (OIT).

İşlem hattı durumu nesneleri Direct3D 11'den evrimleşmiştir ve yeni kısa işlem hattı durumları, işlemin basitleştirildiği anlamına gelir. DirectX 11, durumlarının nasıl değiştirilebileceği konusunda performansa zarar verecek şekilde esneklik sundu. Süreci basitleştirmek ve ardışık düzenleri birleştirmek (örneğin piksel gölgelendirici durumları) daha akıcı bir sürece yol açar, genel giderleri önemli ölçüde azaltır ve grafik kartının her çerçeve için daha fazla çağrı çekmesine izin verir.

Direct3D 12 , CPU ve GPU'nun birlikte daha dengeli bir şekilde çalışmasını sağlamayı amaçlayan komut listelerinde ve paketlerde AMD Mantle'dan da bilgi aldı .

Direct3D 11'de komutlar CPU'dan GPU'ya tek tek gönderilir ve GPU bu komutlar üzerinden sırayla çalışır. Bu, komutların CPU'nun bu komutları doğrusal bir şekilde gönderebildiği hız tarafından darboğaz olduğu anlamına gelir. DirectX 12 içinde bu komutlar, tek bir paket içinde gerekli tüm bilgileri içeren komut listeleri olarak gönderilir. GPU daha sonra CPU'dan herhangi bir ek bilgi beklemek zorunda kalmadan bu komutu tek bir işlemde hesaplayabilir ve yürütebilir.

Bu komut listelerinin içinde demetler bulunur. Önceden komutların alındığı, kullanıldığı ve ardından GPU tarafından unutulduğu durumlarda, demetler yeniden kullanılabilir. Bu, GPU'nun iş yükünü azaltır ve tekrarlanan varlıkların çok daha hızlı kullanılabileceği anlamına gelir.

Kaynak bağlama, şu anda geliştiriciler için Direct3D 11'de oldukça uygun olsa da, verimsizliği, birçok modern donanım yeteneğinin büyük ölçüde yetersiz kullanıldığı anlamına gelir. Bir oyun motoru DX11'de kaynaklara ihtiyaç duyduğunda, verileri her seferinde sıfırdan çizmek zorundaydı, bu da işlemleri tekrarlamak ve gereksiz kullanımlar anlamına geliyordu. Direct3D 12'de, tanımlayıcı yığınları ve tabloları, geliştiriciler tarafından en sık kullanılan kaynakların GPU'nun hızlı ve kolay bir şekilde erişebileceği tablolarda tahsis edilebileceği anlamına gelir. Bu, eşdeğer donanımda Direct3D 11'den daha iyi performansa katkıda bulunabilir, ancak geliştirici için daha fazla iş gerektirir.

Dinamik Yığınlar ayrıca Direct3D 12'nin bir özelliğidir.

Direct3D 12, birden fazla GPU yapılandırma sisteminin açık kontrolüne izin veren açık çoklu adaptör desteğine sahiptir. Bu tür konfigürasyonlar, aynı donanım satıcısının grafik bağdaştırıcısının yanı sıra farklı donanım satıcısının bir arada kullanılmasıyla oluşturulabilir.

  • Direct3D 12 sürüm 1607 – 2 Ağustos 2016'da yayınlanan Windows 10 yıldönümü güncellemesi (sürüm 1607) ile Direct3D 12 çalışma zamanı, açık çoklu kullanım ve süreçler arası iletişim için yapıları destekleyecek şekilde güncellendi ve geliştiricilerin modernden toplu olarak yararlanmasına izin verdi. paralel GPU'lar. Diğer özellikler arasında, güncellenmiş kök imzaları sürüm 1.1 ile HDR10 formatı ve değişken yenileme hızları desteği yer alıyor .
  • Direct3D 12 sürüm 1703 – 11 Nisan 2017'de yayınlanan Windows 10 Creators Güncellemesi (sürüm 1703) ile Direct3D 12 çalışma zamanı, Shader Model 6.0 ve DXIL'i destekleyecek şekilde güncellendi . ve Shader Model 6.0, Windows 10 Yıldönümü Güncellemesi (sürüm 1607), WDDM 2.1 gerektirir. Yeni grafiksel özellikler Derinlik Sınırları Testi ve Programlanabilir MSAA'dır.
  • Direct3D 12 sürüm 1709 – 17 Ekim 2017'de yayımlanan Windows 10 Fall Creators Update'teki (sürüm 1709) Direct3D, geliştirilmiş hata ayıklama içerir.
  • Direct3D 12 sürüm 1809 – Windows 10 Ekim 2018 Güncellemesi (sürüm 1809), GPU'ların API'sinden yararlanabilmesi için DirectX Raytracing desteği sağlar .
  • Direct3D 12 sürüm 1903 – Windows 10 Mayıs 2019 Güncellemesi (sürüm 1903), DirectML için destek getiriyor .
  • Direct3D 12 sürüm 2004 – Windows 10 Mayıs 2020 Güncellemesi (sürüm 2004), Mesh & Amplification Shader, Sampler Feedback, DirectX Raytracing Tier 1.1 ve bellek ayırma iyileştirmeleri için destek getiriyor.

Mimari

Soyut Katman

Direct3D, bir Microsoft DirectX API alt sistemi bileşenidir. Direct3D'nin amacı, bir grafik uygulaması ile grafik donanım sürücüleri arasındaki iletişimi soyutlamaktır. GDI ile karşılaştırılabilir düzeyde ince bir soyut katman gibi sunulur (ekli şemaya bakın). Direct3D, GDI'da eksik olan çok sayıda özellik içerir.

Direct3D, bir Anında mod grafik API'sidir. Her video kartı 3D işlevine ( dönüşümler, kırpma, aydınlatma , malzemeler , dokular , derinlik tamponlama vb.) düşük seviyeli bir arayüz sağlar . Bir zamanlar daha yüksek bir Tutma modu bileşenine sahipti , şimdi resmi olarak durduruldu.

Direct3D anında modu üç ana soyutlama sunar: cihazlar , kaynaklar ve Takas Zincirleri (ekli şemaya bakın). Cihazlar , 3B sahneyi oluşturmaktan sorumludur. Farklı işleme yeteneklerine sahip bir arayüz sağlarlar. Örneğin, mono cihaz beyaz ve siyah işleme sağlarken RGB cihazı renkli olarak işler. Dört tür cihaz vardır:

Cihaz
  • Referans cihaz: Donanımda henüz mevcut olmayan yeni işlevleri simüle eder. Bu cihaz tipini kullanmak için Direct3D SDK kurulumu gereklidir .
  • Null referans cihazı: Hiçbir şey yapmaz. Bu cihaz, SDK kurulu olmadığında ve bir referans cihazı istendiğinde kullanılır.
  • Takılabilir yazılım cihazı: Yazılım oluşturma işlemini gerçekleştirir. Bu cihaz DirectX 9.0 ile tanıtıldı .

Her cihaz en az bir takas zinciri içerir . Bir takas zinciri , bir veya daha fazla arka tampon yüzeyinden oluşur. İşleme, arka arabellekte gerçekleşir .

Ayrıca, cihazlar bir kaynak koleksiyonu içerir ; oluşturma sırasında kullanılan belirli veriler. Her kaynağın dört özelliği vardır:

  • Tür : Kaynağın türünü belirler: yüzey, hacim, doku, küp dokusu, hacim dokusu, yüzey dokusu, dizin arabelleği veya köşe arabelleği.
  • Havuz : Kaynağın çalışma zamanı tarafından nasıl yönetildiğini ve nerede depolandığını açıklar. Gelen Standart havuz kaynak cihaz hafızasında sadece var olacaktır. Yönetilen havuzdakikaynaklarsistem belleğinde depolanacak ve gerektiğinde cihaza gönderilecektir. Sistem belleği havuzundakikaynaklaryalnızca sistem belleğinde bulunur. Son olarak, çizilmeye havuzu temelde sistem belleği havuzu olarak aynıdır, ancak kaynaklar donanım kısıtlamalarına bağlı değildir.
  • Format : Kaynak verilerinin bellekteki düzenini açıklar. Örneğin, D3DFMT_R8G8B8 format değeri, 24 bit renk derinliği anlamına gelir (kırmızı için 8 bit, yeşil için 8 bit ve mavi için 8 bit).
  • Kullanım : Bir bayrak bitleri koleksiyonu ile kaynağın uygulama tarafından nasıl kullanılacağını açıklar . Bu bayraklar, dinamik veya statik erişim modellerinde hangi kaynakların kullanıldığını belirler. Statik kaynak değerleri yüklendikten sonra değişmezken dinamik kaynak değerleri değiştirilebilir.

Direct3D iki görüntüleme modu uygular:

  • Tam ekran modu: Direct3D uygulaması, bir görüntüleme cihazı için tüm grafik çıktısını üretir. Bu modda Direct3D, Alt-Tab'i otomatik olarak yakalar ve programlayıcı müdahalesi olmadan ekran çözünürlüğünü ve piksel biçimini ayarlar/geri yükler. Bu ayrıca 'Özel İşbirliği Modu' nedeniyle hata ayıklama için birçok sorun sağlar.
  • Pencereli mod: Sonuç, bir pencere alanı içinde gösterilir. Direct3D , ekranda grafik çıktı oluşturmak için GDI ile iletişim kurar . Pencereli mod, sürücü desteğine bağlı olarak tam ekranla aynı performans düzeyine sahip olabilir.

Boru hattı

Grafik boru hattı süreci

Microsoft Direct3D 11 API, bir grup tepe noktası, doku, arabellek ve durumu ekrandaki bir görüntüye dönüştürmek için bir süreç tanımlar. Bu süreç, birkaç farklı aşamadan oluşan bir işleme hattı olarak tanımlanır. Direct3D 11 boru hattının farklı aşamaları şunlardır:

  1. Input Assembler : Uygulama tarafından sağlanan köşe arabelleğinden köşe verilerini okur ve bunları boru hattından besler.
  2. Vertex Shader : Dönüşümler, kaplama veya aydınlatma gibi işlemleri tek seferde tek bir tepe noktasında gerçekleştirir.
  3. Hull Shader : Yama kontrol noktaları kümeleri üzerinde işlemler gerçekleştirir ve yama sabitleri olarak bilinen ek veriler üretir.
  4. Mozaikleme aşaması : Gövdenin daha yüksek dereceli temsillerini oluşturmak için geometriyi alt bölümlere ayırır.
  5. Etki Alanı Gölgelendiricisi: Mozaikleme aşaması tarafından köşe çıktıları üzerinde, köşe gölgelendiricisine çok benzer şekilde işlemler gerçekleştirir.
  6. Geometri Gölgelendirici : Üçgenler, noktalar veya çizgiler gibi tüm temel öğeleri işler . Bir ilkel verildiğinde, bu aşama onu atar veya bir veya daha fazla yeni ilkel oluşturur.
  7. Akış Çıkışı : Bir önceki aşamanın sonuçlarını belleğe yazabilir. Bu, verileri boru hattına geri döndürmek için kullanışlıdır.
  8. Rasterleştirici : İlkelleri piksellere dönüştürerek bu pikselleri piksel gölgelendiriciye besler. Rasterleştirici, görünmeyenleri kırpmak veya köşe verilerini piksel başına verilere enterpolasyon yapmak gibi başka görevleri de gerçekleştirebilir.
  9. Pixel Shader : Render hedefine yazılacak son piksel rengini belirler ve ayrıca derinlik tamponuna yazılacak derinlik değerini de hesaplayabilir.
  10. Çıktı Birleşmesi : Nihai sonucu oluşturmak için çeşitli çıktı verilerini ( piksel gölgelendirici değerleri, alfa harmanlama, derinlik/kalıp...) birleştirir.

Yuvarlak bir kutu ile gösterilen boru hattı aşamaları tamamen programlanabilir. Uygulama, o aşama için tamamlanması gereken işlemleri tam olarak açıklayan bir gölgelendirici programı sağlar. Birçok aşama isteğe bağlıdır ve tamamen devre dışı bırakılabilir.

Özellik seviyeleri

Direct3D 5 ila 9'da, API'nin yeni sürümleri yeni donanım yetenekleri için destek sunduğunda, bunların çoğu isteğe bağlıydı - her grafik satıcısı, gerekli temel işlevselliğe ek olarak kendi desteklenen özellikler setini sürdürdü. Bireysel özellikler için desteğin "yetenek bitleri" veya "büyük harfler" kullanılarak belirlenmesi gerekiyordu, bu da satıcılar arası grafik programlamayı karmaşık bir görev haline getiriyordu.

Direct3D 10, desteklenen doku biçimleri ve işlemleri için yalnızca birkaç isteğe bağlı yetenekle birlikte, tüm destekleyici grafik kartlarının uymak zorunda olduğu en popüler Direct3D 9 yeteneklerine dayanan, çok basitleştirilmiş bir zorunlu donanım gereksinimleri seti getirdi.

Direct3D 10.1, birkaç yeni zorunlu donanım gereksinimi ekledi ve 10.0 donanım ve sürücülerle uyumlu kalmak için bu özellikler, 10.1 düzeyi 10.0 düzeyinin bir üst kümesini oluşturan "özellik düzeyleri" olarak adlandırılan iki kümede kapsüllendi. Direct3D 11.0, 11.1 ve 12 yeni donanım için destek ekledikçe, yeni zorunlu yetenekler daha üst özellik seviyelerinde gruplandırıldı.

Direct3D 11 ayrıca, "10level9" tanıtıldı üç özellik seviyeleri ile çeşitli Direct3D 9 kartları kapsülleyiciyle Direct3D 10 API bir alt kümesi WDDM sürücüleri ve Direct3D 11.2 ve üstü Direct3D'de genişletildi her düzeyde, için 11.1 yeniden tanıtılan birkaç isteğe bağlı özellikler sürümler.

Bu yaklaşım, geliştiricilerin işleme hattını birleştirmesine ve hem yeni hem de eski donanımda API'nin tek bir sürümünü kullanmasına olanak tanıyarak daha yeni çalışma zamanında performans ve kullanılabilirlik iyileştirmelerinden yararlanır.

API'nin güncellenmiş sürümleriyle birlikte yeni özellik seviyeleri sunulur ve genellikle şunları içerir:

  • önemli zorunlu özellikler – (Direct3D 11.0, 12),
  • birkaç küçük özellik (Direct3D 10.1, 11.1) veya
  • önceden isteğe bağlı ortak özellikler seti (Direct3D 11.0 "10 seviye 9").

Her bir üst düzey, bir üst düzeydeki temel işlevselliğe taşınan yalnızca birkaç yeni veya önceden isteğe bağlı özellik içeren, alt düzeyin katı bir üst kümesidir. Direct3D API'nin büyük bir revizyonundaki yeni gölgelendirici modelleri ve işleme aşamaları gibi daha gelişmiş özellikler yalnızca üst düzey donanımda gösterilir.

Belirli doku işlemleri ve kaynak biçimleri için desteği belirtmek için ayrı yetenekler mevcuttur; bunlar, yetenek bayraklarının bir kombinasyonu kullanılarak her doku formatı için belirtilir.

Özellik seviyeleri, sınırlayıcı olarak alt çizgi (yani "12_1") kullanırken, API/çalışma zamanı sürümleri nokta (yani "Direct3D 11.4") kullanır.

Direct3D 11 seviye

Windows 10 için Direct3D 11.4'te, D3D_FEATURE_LEVELyapı tarafından sağlanan dokuz özellik düzeyi vardır ; 9_1, 9_2 ve 9_3 seviyeleri (topluca Direct3D 10 Seviye 9 olarak bilinir ) popüler Direct3D 9 kartlarının çeşitli özelliklerini yeniden kapsar, 10_0, 10_1 seviyeleri Direct3D 10'un ilgili eski sürümlerine atıfta bulunur, 11_0 ve 11_1 Direct3D 11 ile sunulan özelliği yansıtır ve Direct3D 11.1 API'leri ve çalışma zamanları, 12_0 ve 12_1 seviyeleri Direct3D 12 API ile sunulan yeni özellik seviyelerine karşılık gelir.

Direct3D 11.4'teki özellik seviyeleri
Özellik düzeyi Zorunlu donanım özellikleri Opsiyonel özellikler
9_1 Shader Model 2.0 ( vs_2_0/ ps_2_0), 2K dokular, hacim dokuları, olay sorguları, BC1-3 (aka DXTn), diğer birkaç özel yetenek. Yok
9_2 Kapatma sorguları, kayan nokta biçimleri (karıştırma yok), genişletilmiş büyük harfler, tüm 9_1 özellikleri.
9_3 vs_2_a/ ps_2_xörnekleme ve ek gölgelendirici başlıkları, 4K dokular, çoklu işleme hedefleri (4 MRT), kayan nokta karıştırma (sınırlı), tüm 9_2 özellikleriyle.
10_0 Shader Model 4.0, geometri gölgelendirici, akış çıkışı, alfadan kapsamaya, 8K dokular, MSAA dokuları, 2 taraflı şablon, genel işleme hedef görünümleri, doku dizileri, BC4/BC5, tam kayan nokta biçimi desteği, tüm 9_3 özellikleri. Mantıksal karıştırma işlemleri, DirectCompute (CS 4.0/4.1), genişletilmiş piksel biçimleri.
10_1 Shader Model 4.1, küp eşlem dizileri, genişletilmiş MSAA, tüm 10_0 özellikleri.
11_0 Shader Model 5.0/5.1, gövde ve etki alanı gölgelendiricileri, DirectCompute (CS 5.0/5.1), 16K dokular, BC6H/BC7, genişletilmiş piksel biçimleri, tüm 10_1 özellikleri. İHA yalnızca kuvvet örnek sayımı, sabit arabellek ofseti ve kısmi güncellemeler, çift duyarlıklı (64-bit) kayan nokta işlemleri, minimum kayan nokta kesinliği (10- veya 16-bit ), min/maks filtreleme ile işleme.
11_1 Mantıksal harmanlama işlemleri, hedeften bağımsız rasterleştirme, artırılmış yuva sayısı ile her boru hattı aşamasında İHA'lar, yalnızca kuvvet örnek sayımı ile İHA oluşturma, sabit tampon dengeleme ve kısmi güncellemeler, tümü 11_0 özellikleri. Döşenmiş kaynaklar (dört katman), muhafazakar rasterleştirme (üç katman), Pixel Shader'dan şablon referans değeri, rasterleştirici sıralı görünümler, ek biçimler için yazılan UAV yükleri.
12_0 Döşenmiş Kaynaklar Katman 2 (Texture2D), Yazılan İHA Yükleri (ek biçimler).
12_1 Muhafazakar Rasterleştirme Katmanı 1, Rasterleştirici Sıralı Görünümler.

Direct3D 12 seviye

Windows 10 için Direct3D 12, sanal bellek adresi çevirilerini destekleyen ve WDDM 2.0 sürücüleri gerektiren özellik düzeyleri 11_0 ve 11_1 ile uyumlu grafik donanımı gerektirir. 11_0 ve 11_1 düzeylerinde isteğe bağlı olan Direct3D 12 tarafından sunulan bazı yeni özellikleri içeren 12_0 ve 12_1 olmak üzere iki yeni özellik düzeyi vardır. Önceden isteğe bağlı bazı özellikler, 11_0 ve 11_1 düzeylerinde temel olarak yeniden hizalanır. Shader Model 6.0, Windows 10 Creators Güncellemesi ile piyasaya sürüldü ve Windows 10 Yıldönümü Güncellemesi, WDDM 2.1 sürücüleri gerektirir.

Direct3D 12 özellik seviyesi
Seviye Zorunlu özellikler Opsiyonel özellikler
11_0 Direct3D 11, Shader Model 5.1, Kaynak bağlama Katmanı 1'den tüm zorunlu 11_0 özellikleri. Mantıksal harmanlama işlemleri, çift duyarlıklı (64-bit) kayan nokta operasyonları, minimum kayan nokta kesinliği (10- veya 16-bit).

Kaynak bağlama (üç katman), kiremitli kaynaklar (dört katman), muhafazakar rasterleştirme (üç katman), Pixel Shader'dan şablon referans değeri, rasterleştirici sıralı görünümler, ek biçimler için yazılan UAV yükleri, görünüm örneği.

Gölgelendirici Modeli 6.0-6.6

Üst komutlar, değişken gölgeleme hızı, ışın izleme, ağ gölgelendiricileri, örnekleyici geri bildirimi.

Diğer isteğe bağlı özellikler.

Her boru hattı aşamasında İHA'lar, İHA yalnızca kuvvet örnek sayımı, sabit arabellek dengeleme ve kısmi güncellemeler ile işleme.
11_1 Mantıksal harmanlama işlemleri, hedeften bağımsız rasterleştirme, artırılmış İHA yuva sayısı.
12_0 Kaynak Bağlama Katmanı 2, Döşenmiş Kaynaklar Katmanı 2 (Texture2D), Yazılan UAV Yükleri (ek biçimler), Shader Model 6.0.
12_1 Muhafazakar Rasterleştirme Katmanı 1, Rasterleştirici Sıralı Görünümler.
12_2 DirectX 12 Ultimate : Shader Model 6.5, Raytracing Tier 1.1, Mesh Shader, Değişken Hızlı Gölgelendirme, Örnekleyici Geri Bildirimi, Kaynak Bağlama Katmanı 3, Döşemeli Kaynaklar Katmanı 3 (Texture3D), Muhafazakar Rasterleştirme Katmanı 3, 40 bit sanal adres alanı.

Direct3D 12, belleğin açık kontrolüne izin veren yenilenmiş bir kaynak bağlama modeli sunar. Soyut "kaynak görünümü" nesneleri artık bellek yığınları ve tabloları kullanılarak ayrılan kaynak tanımlayıcılarla temsil edilmektedir. Kaynak Bağlama katmanları, doku örnekleyici birimlerinin yanı sıra CBV (sabit arabellek görünümü), SRV (gölgelendirici kaynak görünümü) ve UAV (sırasız erişim görünümü) kullanılarak adreslenebilecek maksimum kaynak sayısını tanımlar. Katman 3 donanımı, yalnızca tanımlayıcı yığınının boyutuyla sınırlandırılan tamamen bağlantısız kaynaklara izin verirken, Katman 1 ve Katman 2 donanımı, aynı anda kullanılabilecek tanımlayıcıların ("görünümler") sayısına bazı sınırlamalar getirir.

Kaynak bağlama katmanları
Kaynak sınırları 1. kat 2. Aşama 3. Aşama
CBV/SRV/UAV yığınındaki tanımlayıcılar 1 milyon 1 milyon >1 milyon
Gölgelendirici aşaması başına CBV'ler 14 14 tam yığın
Gölgelendirici aşaması başına SRV'ler 128 tam yığın
Tüm aşamalarda İHA'lar 8, 64 64 tam yığın
Gölgelendirici aşaması başına örnekleyiciler 16 tam yığın
özellik düzeyi 11_1 donanımda 64 yuva

çoklu kullanım

Windows Vista ve üzeri sürümlerdeki WDDM sürücü modeli, donanımda veya yazılımda keyfi olarak çok sayıda yürütme bağlamını (veya iş parçacığını) destekler. Windows XP yalnızca Direct3D'ye çok görevli erişimi destekledi, burada ayrı uygulamalar farklı pencerelerde yürütülebilir ve donanım hızlandırılabilir ve işletim sistemi GPU'nun neler yapabileceği ve sürücünün yürütme dizilerini keyfi olarak değiştirebileceği konusunda sınırlı kontrole sahipti.

Çalışma zamanını çok iş parçacıklı modda yürütme yeteneği Direct3D 11 çalışma zamanı ile tanıtıldı. Her yürütme bağlamı, GPU'nun bir kaynak görünümüyle sunulur. Yürütme bağlamları birbirinden korunur, ancak sahte veya kötü yazılmış bir uygulama, kullanıcı modu sürücüsündeki yürütmenin kontrolünü ele geçirebilir ve değiştirilmiş komutlar göndererek GPU belleğindeki başka bir işlemden verilere potansiyel olarak erişebilir. Başka bir uygulamanın erişiminden korunmasına rağmen, iyi yazılmış bir uygulamanın kendisini diğer uygulamaların neden olduğu arızalara ve cihaz kaybına karşı koruması gerekir.

İşletim sistemi iş parçacıklarını kendi başına yöneterek donanımın uygun olduğunda bir iş parçacığından diğerine geçmesine izin verir ve ayrıca entegre işletim sistemi çekirdeği bellek yönetimi aracılığıyla bellek yönetimini ve sayfalamayı (sistem belleğine ve diske) yönetir.

Daha ayrıntılı bağlam değiştirme, yani tek komut düzeyi veya hatta toplu komutlar yerine gölgelendirici talimatı düzeyinde iki yürütme iş parçacığının değiştirilebilmesi, Windows 8 ile birlikte gelen WDDM/DXGI 1.2'de tanıtıldı. Uygulamanın tek bir komutu/komut grubunu çok uzun süre yürütmesi gerektiğinde ve işletim sistemi bekçisi zamanlayıcısı tarafından sonlandırılması gerektiğinde zamanlama sorunu.

WDDM 2.0 ve DirectX 12, tamamen çok iş parçacıklı çekme çağrılarına izin verecek şekilde yeniden tasarlandı. Bu, tüm kaynakları değiştirilemez hale getirerek (yani salt okunur hale getirerek), oluşturma durumlarını serileştirerek ve çekme çağrısı paketleri kullanarak elde edildi. Bu, çekirdek modu sürücüsündeki karmaşık kaynak yönetiminden kaçınarak, aynı uygulamada ayrı işleme iş parçacıkları tarafından sağlanan eşzamanlı yürütme bağlamları aracılığıyla kullanıcı modu sürücüsüne birden çok yeniden giriş çağrısını mümkün kılar.

Direct3D Mobil

Direct3D Mobile, Direct3D'den türetilmiştir ancak daha küçük bir bellek ayak izine sahiptir . Windows CE , Direct3D Mobil desteği sağlar.

Alternatif uygulamalar

Direct3D API'nin aşağıdaki alternatif uygulamaları mevcuttur. Windows olmayan platformlar ve bazı DX desteği sürümleri olmayan donanımlar için kullanışlıdırlar:

  • WineD3D - Şarap açık kaynak projesi için çeviri yoluyla Direct3D API'larından uygulamaları çalışma etmiştir OpenGL . Wine uygulaması, belirli koşullar altında Windows'ta da çalıştırılabilir.
  • vkd3d - vkd3d üstünde Direct3D 12 uygulamaları çalıştırmak için izin verir Vulkan üstünde geliştirilmiş açık kaynak kodlu 3D grafik kütüphanesi Vulkan . Öncelikli olarak Wine projesi tarafından kullanılmaktadır ve şimdi Valve'ın linux üzerinde steam ile birlikte gelen Proton projesine dahil edilmiştir.
  • DXVK – Direct3D 9/10/11 için Wine kullanarak Linux üzerinde 3D uygulamaların çalıştırılmasına izin veren açık kaynaklı Vulkan tabanlı bir çeviri katmanı . Linux için Proton / Steam tarafından kullanılır . DXVK, Linux altında çok sayıda modern Windows oyununu çalıştırabilir.
    • D9VK – Direct3D 9 desteği eklemek için bir DXVK çatalı, Linux'ta Steam/Proton'a dahildir. 16 Aralık 2019'da D9VK, DXVK ile birleştirildi.
  • Gallium Nine – Gallium Nine, Direct3D 9 uygulamalarını Linux üzerinde yerel olarak çalıştırmayı mümkün kılar, yani neredeyse yerel hıza izin veren herhangi bir çağrı çevirisi olmadan. Wine ve Mesa'nın işbirliğini gerektirir .

İlgili araçlar

D3DX

Direct3D, vektörler , matrisler ve renkler üzerinde ortak matematiksel hesaplamalar yapmak , bakış ve izdüşüm matrislerini hesaplamak , spline enterpolasyonları ve 3D grafik programlama için kullanılan gölgelendiricileri derlemek veya birleştirmek gibi birkaç karmaşık görevi gerçekleştirmek için tasarlanmış bir araç kütüphanesi olan D3DX ile birlikte gelir. , sıkıştırılmış iskelet animasyonu depolama ve matris yığınları. Teğet-uzay hesaplama, ağ basitleştirme, önceden hesaplanmış parlaklık aktarımı , tepe önbelleği dostu ve şeritleştirme için optimizasyon ve 3B metin ağları için oluşturucular gibi 3B ağlar üzerinde karmaşık işlemler sağlayan çeşitli işlevler vardır . 2D özellikler, ekran-uzay çizgileri, metin ve hareketli grafik tabanlı parçacık sistemleri çizmek için sınıfları içerir . Uzamsal işlevler arasında çeşitli kesişim rutinleri, barycentric koordinatlardan /sürekli koordinatlara dönüştürme ve sınırlayıcı kutu /küre oluşturucular bulunur. D3DX, bir dinamik bağlantı kitaplığı (DLL) olarak sağlanır. D3DX, Windows 8'den itibaren kullanımdan kaldırılmıştır ve Windows Mağazası uygulamalarında kullanılamaz.

D3DX'in önceki sürümlerinde bulunan bazı özellikler Direct3D 11'de kaldırıldı ve şimdi ayrı kaynaklar olarak sağlandı:

  • Windows SDK ve Visual Studio
  • Matematik kütüphanesinin büyük bir kısmı kaldırıldı. Microsoft, bunun yerine DirectX Math kitaplığının kullanılmasını önerir.
  • Küresel harmonikler matematiği kaldırıldı ve artık kaynak olarak dağıtılıyor.
  • Effect çerçevesi kaldırıldı ve artık CodePlex aracılığıyla kaynak olarak dağıtılıyor.
  • Mesh arabirimi ve geometri işlevleri kaldırıldı ve artık DirectXMesh geometri işleme kitaplığı altında CodePlex aracılığıyla kaynak olarak dağıtılıyor.
  • Doku işlevleri kaldırıldı ve artık DirectXTex doku işleme kitaplığı altında CodePlex aracılığıyla kaynak olarak dağıtılıyor.
  • Genel yardımcılar kaldırıldı ve artık DirectX Tool Kit (DirectXTK) projesi kapsamında CodePlex aracılığıyla kaynak olarak dağıtılıyor.
  • İzochart doku atlası kaldırıldı ve artık UVAtlas projesi kapsamında CodePlex aracılığıyla kaynak olarak dağıtılıyor.

DXUT

DXUT (örnek çerçeve olarak da adlandırılır), Direct3D API'sinin üzerine inşa edilmiş bir katmandır. Çerçeve, programcının pencere oluşturma, cihaz oluşturma, Windows mesajlarını işleme ve cihaz olaylarını işleme gibi sıradan görevlerle daha az zaman harcamasına yardımcı olmak için tasarlanmıştır. DXUT, Windows SDK 8.0 ile kaldırılmıştır ve şimdi CodePlex aracılığıyla kaynak olarak dağıtılmaktadır.

Ayrıca bakınız

Referanslar

Dış bağlantılar