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.
Bu bölümde açıklanan API'ler, kutucuklu kaynaklarla ve kutucuk havuzuyla çalışır.
- Bir kutucuk havuzundan kaynak kutucuk atama
- Kaynak döşemesini sorgulama ve destek
- Kutucuklu verileri kopyalama
- kutucuk havuzunu yeniden boyutlandırma
- Kutucuklu kaynak engeli
- İlgili konular
Kutucuk havuzundan kaynağa kutucuk atama
ID3D11DeviceContext2::UpdateTileMappings ve ID3D11DeviceContext2::CopyTileMappings API'leri kutucuk eşlemelerini işleyip sorgular. Güncelleştirme çağrıları yalnızca çağrıda tanımlanan kutucukları etkiler ve diğerleri daha önce tanımlandığı gibi bırakılır.
Bir kutucuk havuzundaki herhangi bir kutucuk, bir kaynaktaki birden çok konuma ve hatta birden çok kaynağa eşlenebilir. Bu eşleme, uygulama tarafından seçilen düzene (Mipmap paketleme) sahip olan ve birden çok mipmap'in tek bir kutucukta bir araya getirildiği bir kaynaktaki kutucukları içerir. Tek bir eşleme aracılığıyla kutucuğa veri yazıldığında ancak farklı yapılandırılmış bir eşleme aracılığıyla okunursa sonuçların tanımsız olması yakalamadır. Bu esnekliğin dikkatli bir şekilde kullanılması, aynı anda kullanılmayacak kaynaklar arasında bir kutucuğun paylaşılması ve kutucuğun içeriğinin her zaman daha sonra okunacakları kaynak eşlemesi aracılığıyla başlatılması gibi bir uygulama için yararlı olabilir. Benzer şekilde, aynı yüzey boyutlarına sahip birden çok farklı kaynağın paketlenmiş mipmap'lerini barındıracak şekilde eşlenen bir kutucuk düzgün çalışır; veriler her iki eşlemede de aynı görünür.
Bir kaynağın kutucuk atamalarında yapılan değişiklikler, anında veya ertelenmiş bir bağlamda herhangi bir zamanda yapılabilir.
Kaynak döşemesini sorgulama ve destek
Kaynak döşemesini sorgulamak için id3D11Device2::GetResourceTilingkullanın.
Diğer kaynak döşeme desteği için id3D11Cihaz2::CheckMultisampleQualityLevels1kullanın.
Kutucuklu verileri kopyalama
Direct3D'de verileri taşımaya yönelik tüm yöntemler, kutucuklu kaynaklarla aynı kutucuklu kaynaklar gibi çalışır, ancak eşlenmemiş alanlara yazmalar bırakılır ve eşlenmemiş alanlardan okunur 0 üretir. Hedef kaynaktaki birden çok konum aynı kutucuk belleğine eşlendiğinden kopyalama işlemi aynı bellek konumuna birden çok kez yazmayı içeriyorsa, çok eşlenmiş kutucuklara yapılan yazma işlemleri belirlenimci değildir ve yinelenemez. Yani, erişimler donanımın kopyayı yürütmesi için ne sırayla olursa olsun gerçekleşir.
Direct3D 11.2, şu ek kopyalama yöntemlerine yönelik yöntemler sunar:
- Kutucuklu bir kaynaktaki kutucuklar (64 KB kutucuk ayrıntı düzeyinde) ve (to/from) grafik işleme birimi (GPU) belleğindeki (veya hazırlama kaynağındaki) arabellek arasında kopyalama - ID3D11DeviceContext2::CopyTiles
- Uygulama tarafından sağlanan bellekten kutucuklu bir kaynaktaki kutucuklara kopyalama - ID3D11DeviceContext2::UpdateTiles
Bu yöntemler gerektiğinde swizzle/deswizzle ve çağıran hedef belleğe uçuşta olan GPU çalışması tarafından başvurulmadığını vaat ettiğinde bir D3D11_TILE_COPY_NO_OVERWRITE bayrağına izin verir.
Kopyada yer alan kutucuklar paketlenmiş mipmap'ler içeren veya tanımlanmamış sonuçlar içeren kutucuklar içeremez. Donanım paketlerinin tek bir kutucuğa paketlediğiniz mipmap'lere/mipmap'lerden veri aktarmak için standart (kutucuğa özgü olmayan) Kopyalama/Güncelleştirme API'lerini veya tüm mip zinciri için ID3D11DeviceContext::GenerateMipskullanmanız gerekir.
GenerateMipshakkında Not: Kısmen eşlenmiş kutucuklara sahip bir kaynakta ID3D11DeviceContext::GenerateMips kullanılması, donanım ve görüntü sürücüsünün generatemips için kullandığı algoritmaya uygulanan NULL okuma ve yazma kurallarına uyan sonuçlar üretir. Bu nedenle, bir şekilde NULL eşlemeleri olan alanlar (ve oluşturma aşamasında diğer mip'ler üzerindeki etkisi) uygulamanın önemsediği yüzey parçaları üzerinde bir sonuç oluşturmadığı sürece, uygulamanın bunu yapması özellikle yararlı değildir.
Kutucuk verilerini hazırlama yüzeyinden veya uygulama belleğinden kopyalamak, örneğin diskten akışla aktarılmış olabilecek kutucukları karşıya yüklemenin yolu olabilir. Diskten akış yaparken GPU belleğine bir tür sıkıştırılmış veri yükleyip GPU'da kodu çözen bir çeşitleme. Kod çözme hedefi GPU belleğindeki bir arabellek kaynağı olabilir ve bu kaynaktan CopyTilesgerçek kutucuklu kaynağa kopyalanır. Bu kopyalama adımı, geçiş düzeni bilinmediğinde GPU'ya geçiş izni verir. Kutucuklu kaynağın kendisi bir arabellek kaynağıysa (örneğin, Doku yerine) kaydırma gerekmez.
Kopyanın kutucuklu olmayan arabellek kaynak tarafındaki kutucukların bellek düzeni, donanım ve görüntü sürücüsünün kutucuklu kaynağa/kaynaktan aktarma sırasında kutucuk başına uygun şekilde kaydıracağı/değiştireceği 64 KB kutucuklar içinde bellekte doğrusaldır. Çok örnekli antialiasing (MSAA) yüzeyleri için, her pikselin örnekleri bir sonraki piksele geçmeden önce örnek-dizin sırasına göre geçirilir. Sağ tarafta kısmen doldurulmuş kutucuklar için (piksel cinsinden döşeme genişliğinin katı olmayan bir yüzey için), satır aşağı doğru ilerlemek için aralık/adım, kutucuk doluysa kutucuk boyunca sığacak sayı piksellerinin bayt cinsinden tam boyutudur. Bu nedenle, bellekteki her piksel satırı arasında bir boşluk olabilir. Belirtim basitliği için, bir kutucuktan küçük mipmap'ler doğrusal düzende birlikte paketlenmez. Bu bir bellek alanı israfı gibi görünse de, CopyTiles veya UpdateTilesaracılığıyla donanım paketlerinin birlikte kullanılmasına izin verilmediğinin mips'lere kopyalanmasından bahsedildiği gibi. Uygulama yalnızca genel UpdateSubresource*() veya CopySubresource*() API'lerini kullanarak küçük MIP'leri tek tek kopyalayabilir, ancak CopySubresource*() söz konusu olduğunda, doğrusal belleğin kutucuklu kaynakla aynı boyutta olması gerekir; CopySubresource*() örneğin bir arabellek kaynağından Texture2D'ye kopyalanamaz.
Donanım standart geçişi tanımlanmışsa, arabellekteki verilerin bu biçimde yorumlanması gerektiğini belirten bayraklar eklenebilir (aktarımda kaydırma gerekli değildir), ancak bu durumda uygulamaların kutucuk havuzu belleğine doğrudan erişmesine izin verme gibi alternatif yaklaşımlar da anlamlı olabilir.
Kopyalama işlemleri anında veya ertelenmiş bir bağlamda yapılabilir.
Kutucuk havuzunu yeniden boyutlandırma
Kutucuk havuzunu yeniden boyutlandırmak için id3D11DeviceContext2::ResizeTilePoolkullanın.
Kutucuklu kaynak engeli
Birden çok kutucuklu kaynak arasında veri erişim sıralama kısıtlaması belirtmek için id3D11DeviceContext2::TiledResourceBarrierkullanın.
İlgili konular