Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Birleşik Bellek Mimarisi (UMA) GPU'ları, özellikle mobil cihazlar için iyileştirme yaparken ayrı GPU'lara göre bazı verimlilik avantajları sunar. GPU UMA olduğunda kaynaklara CPU erişimi vermek, CPU ile GPU arasında gerçekleşen kopyalama miktarını azaltabilir. Uygulamaların UMA tasarımlarında tüm kaynaklara körü körüne CPU erişimi vermesini önermesek de, doğru kaynaklara CPU erişimi vererek verimlilikleri geliştirme fırsatları vardır. AyrıK GPU'ların aksine, CPU teknik olarak GPU'ya erişebilecek tüm kaynaklara ilişkin bir işaretçiye sahip olabilir.
- CPU ile erişilebilir dokulara genel bakış
- Standart Swizzle Genel Bakış
- API'leri
- İlgili konular
CPU erişilebilir dokularına genel bakış
Grafik işlem hattında CPU ile erişilebilir dokular, CPU'ların dokulara okuma ve yazma erişimini sağlayan UMA mimarisinin bir özelliğidir. Daha yaygın ayrık GPU'larda CPU'ların grafik işlem hattındaki dokulara erişimi yoktur.
Dokular için genel en iyi uygulama önerisi, genellikle Arabellekler aracılığıyla Doku Verilerini Karşıya Yüklemeiçindeki işlemlerin aşağıdaki gibi özetlendiği ayrı GPU'ları barındırmaktır:
- Dokuların çoğu için CPU erişimi olmaması.
- Doku düzenini D3D12_TEXTURE_LAYOUT_UNKNOWN olarak ayarlama.
- Dokuları CopyTextureRegionile GPU'ya yükleme.
Ancak bazı durumlarda CPU ve GPU aynı verilerle o kadar sık etkileşime geçebilir ki, eşleme dokuları güç tasarrufu yapmak veya belirli bağdaştırıcılar veya mimariler üzerinde belirli bir tasarımı hızlandırmak için yararlı olur. Uygulamalar bu durumları algılamalı ve gereksiz kopyaları iyileştirmelidir. Bu durumda, en iyi performans için aşağıdakileri göz önünde bulundurun:
Yalnızca D3D12_FEATURE_DATA_ARCHITECTURE::UMA TRUE olduğunda eşleme dokularının daha iyi performansını eğlendirmeye başlayın. Ardından, yığında hangi CPU önbelleği özelliklerinin seçileceğine karar verirken CacheCoherentUMA dikkat edin.
Dokular için CPU erişiminden yararlanma, arabelleklere göre daha karmaşıktır. GPU'lar için en verimli doku düzenleri nadiren row_major. Aslında bazı GPU'lar yalnızca doku verilerini kopyalarken row_major dokuları destekleyebilir.
UMA GPU'ları, düzey yükleme sürelerini azaltmak için basit bir iyileştirmeden evrensel olarak yararlanmalıdır. UMA tanındıktan sonra uygulama, GPU'da değiştirilmeyecek dokuları doldurmak için copytextureRegionilkiyileştirebilir. Uygulama, D3D12_HEAP_TYPE_DEFAULT ile bir yığında doku oluşturmak ve doku verilerini aracılığıyla sıralamak yerine, gerçek doku düzenini anlamamak için WriteToSubresource kullanabilir.
D3D12'de, D3D12_TEXTURE_LAYOUT_UNKNOWN ile oluşturulan ve CPU erişimi olmayan dokular, sık gpu işleme ve örnekleme için en verimli olanlardır. Performans testi sırasında, bu dokular CPU erişimi olan D3D12_TEXTURE_LAYOUT_UNKNOWN ve CPU erişimiyle D3D12_TEXTURE_LAYOUT_STANDARD_SWIZZLE ve bağdaştırıcılar arası destek için D3D12_TEXTURE_LAYOUT_ROW_MAJOR karşılaştırılmalıdır.
CPU erişimiyle D3D12_TEXTURE_LAYOUT_UNKNOWN kullanılması WriteToSubresource , ReadFromSubresource, Eşleme (işaretçiye uygulama erişimini engelleme) ve Eşlemeyi Kaldıryöntemlerini etkinleştirir; ancak GPU erişiminin verimliliğini feda edebilir.
CPU erişimiyle D3D12_TEXTURE_LAYOUT_STANDARD_SWIZZLE kullanılması, WriteToSubresourceReadFromSubresource, Eşleme (uygulama için geçerli bir işaretçi döndürür) veEşlemesini Kaldır'ı. Ayrıca CPU erişimiyle GPU erişiminin verimliliğini D3D12_TEXTURE_LAYOUT_UNKNOWN'den daha fazla feda edebilir.
Standart Swizzle'a Genel Bakış
D3D12 (ve D3D11.3), standart bir çok boyutlu veri düzeni ekler. Bu, birden çok işleme biriminin verileri kopyalamadan veya verileri birden çok düzen arasında kaydırmadan aynı veriler üzerinde çalışmasını sağlamak için yapılır. Standartlaştırılmış düzen, ağ efektleri aracılığıyla verimlilik artışı sağlar ve algoritmaların belirli bir deseni varsayarak kısa kesmeler yapmasına olanak tanır.
Doku düzenlerinin ayrıntılı açıklaması için D3D12_TEXTURE_LAYOUTkonusuna bakın.
Bu standart kaydırmanın bir donanım özelliği olduğunu ve tüm GPU'lar tarafından desteklenmeyebileceğini unutmayın.
Kaydırma hakkında arka plan bilgileri için bkz. Z düzeni eğrisi.
Apı 'leri
D3D11.3'in aksine, D3D12 varsayılan olarak doku eşlemeyi destekler, bu nedenle D3D12_FEATURE_DATA_D3D12_OPTIONSsorgulamaya gerek yoktur. Ancak D3D12 her zaman standart kaydırmayı desteklemez. Bu özelliğin checkFeatureSupportçağrısıyla ve D3D12_FEATURE_DATA_D3D12_OPTIONSStandardSwizzle64KBSupported alanı denetlenerek sorgulanması gerekir.
Aşağıdaki API'ler doku eşlemesine başvurur:
Sabit Listeleri
- D3D12_TEXTURE_LAYOUT: Varsayılan dokuların kaydırma düzenini denetler ve CPU ile erişilebilir dokularda harita desteğini etkinleştirir.
Yapı
- D3D12_RESOURCE_DESC: doku gibi bir kaynağı açıklar; bu, yaygın olarak kullanılan bir yapıdır.
- D3D12_HEAP_DESC: bir yığın açıklar.
Yöntemler
- ID3D12Device::CreateCommittedResource: doğru boyutta ve hizalamada tek bir kaynak ve yedekleme yığını oluşturur.
- ID3D12Device::CreateHeap: arabellek veya doku için bir yığın oluşturur.
- ID3D12Device::CreatePlacedResource: belirli bir yığına yerleştirilen bir kaynak oluşturur; genellikle createHeapdaha hızlı bir kaynak oluşturma yöntemidir.
- ID3D12Device::CreateReservedResource: ayrılmış ancak henüz işlenmemiş veya yığına yerleştirilmemiş bir kaynak oluşturur.
- ID3D12CommandQueue::UpdateTileMappings: kutucuklu kaynaklardaki kutucuk konumlarının eşlemelerini bir kaynak yığınındaki bellek konumlarıyla güncelleştirir.
- ID3D12Resource::Map: kaynakta belirtilen verilere bir işaretçi alır ve ALT kaynağa GPU erişimini reddeder.
- ID3D12Resource::GetDesc: kaynak özelliklerini alır.
- ID3D12Heap::GetDesc yığın özelliklerini alır.
- ReadFromSubresource: Mapkullanılarak eşlenen dokudan verileri kopyalar.
- WriteToSubresource: Mapkullanılarak eşlenen bir dokuya veri kopyalar.
Kaynakların ve üst yığınların hizalama gereksinimleri vardır:
- Çok örnekli dokular için D3D12_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT (4 MB).
- Tek örnek dokular ve arabellekler için D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT (64 KB).
- Doğrusal alt kaynak kopyalama D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT (512 bayt) ile hizalanmalıdır ve satır aralığı D3D12_TEXTURE_DATA_PITCH_ALIGNMENT (256 bayt) ile hizalanmalıdır.
- Sabit arabellek görünümleri D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT (256 bayt) ile hizalanmalıdır.
64 KB'tan küçük dokular CreateCommittedResourcearacılığıyla işlenmelidir.
Dinamik dokularla (her kareyi değiştiren dokular) CPU, karşıya yükleme yığınına doğrusal olarak yazar ve ardından bir GPU kopyalama işlemi izler.
Dinamik kaynaklar oluşturmak için genellikle bir karşıya yükleme yığınında büyük bir arabellek oluşturun (arabellekler Alt Konum bölümüne bakın). Hazırlama kaynakları oluşturmak için bir geri okuma yığınında büyük bir arabellek oluşturun. Varsayılan statik kaynaklar oluşturmak için, varsayılan yığında bitişik kaynaklar oluşturun. Varsayılan diğer adlara sahip kaynaklar oluşturmak için, varsayılan yığında çakışan kaynaklar oluşturun.
WriteToSubresource ve ReadFromSubresource doku verilerini satır ana düzeniyle tanımlanmamış kaynak düzeni arasında yeniden düzenler. İşlem zaman uyumlu olduğundan uygulamanın CPU zamanlamasını göz önünde bulundurması gerekir. Uygulama her zaman kopyalamayı daha küçük bölgelere bölebilir veya bu işlemi başka bir görevde zamanlayabilir. Opak kaynak düzenlerine sahip MSAA kaynakları ve derinlik kalıbı kaynakları bu CPU kopyalama işlemleri tarafından desteklenmez ve hataya neden olur. İki öğenin gücü boyutuna sahip olmayan biçimler de desteklenmez ve hataya neden olur. Yetersiz bellek dönüş kodları oluşabilir.
İlgili konular