UAV Sayaçları
32 bit atomik sayacını sıralanmamış-erişim-görünümü (UAV) ile ilişkilendirmek için sıralanmamış-erişim-görünümü (UAV) sayaçlarını kullanabilirsiniz.
Direct3D 11 ile Direct3D 12 arasındaki UAV sayaçları arasındaki farklar
Direct3D 12 uygulamaları ve Direct3D 11 uygulamaları, UAV sayaçlarına erişmek için aynı üst düzey gölgelendirici dili (HLSL) gölgelendirici işlevlerini kullanır.
- IncrementCounter
- DecrementCounter
- Ekleme
- Kullanma
Direct3D 12
Direct3D 12'de, 32 bit değerler uygulama tarafından ayrılır, bu nedenle 32 bit değerler diğer Direct3D 12 kaynakları gibi CPU veya GPU tarafından okunabilir ve yazılabilir.
Direct3D 11
Gölgelendiricilerin dışında, Direct3D 11 ile sayaçlara erişmek için API yöntemlerini çağırmanız gerekir (örneğin, ID3D11DeviceContext::CopyStructureCount ).
UAV sayaçlarını kullanma
Uygulamanız, UAV sayaçları için 32 bit depolama alanı ayırmadan sorumludur. Bu depolama, UAV aracılığıyla erişilebilen verileri içeren kaynak olarak farklı bir kaynakta tahsis edilebilir.
CreateUnorderedAccessView, D3D12_BUFFER_UAV_FLAGS ve D3D12_BUFFER_UAVbölümüne bakın.
createUnorderedAccessViewçağrısında pCounterResource belirtilirse, UAV ile ilişkilendirilmiş bir sayaç vardır. Bu durumda:
- StructureByteStride sıfırdan büyük olmalıdır
- Biçim DXGI_FORMAT_UNKNOWN olmalıdır
- RAW bayrağı ayarlanmamalıdır
- Kaynakların her ikisi de arabellek olmalıdır
- CounterOffsetInBytes 4 bayt'ın katı olmalıdır
- CounterOffsetInBytes sayaç kaynağı aralığında olmalıdır
- pDesc NULL olamaz
- pResource NULL olamaz
Ayrıca aşağıdaki kullanım durumlarını da not edin:
- pCounterResource belirtilmezse CounterOffsetInBytes 0 olmalıdır.
- RAW bayrağı ayarlanırsa biçimin DXGI_FORMAT_R32_TYPELESS ve UAV kaynağının bir arabellek olması gerekir.
- pCounterResource ayarlanmadıysa CounterOffsetInBytes 0 olmalıdır.
- RAW bayrağı ayarlanmadıysa ve StructureByteStride = 0, biçimin geçerli bir UAV biçimi olması gerekir.
Direct3D 12, ekleme ve sayaç UAV'leri arasındaki ayrımı kaldırır (ayrım HLSL bayt kodunda hala mevcut olsa da).
Çekirdek çalışma zamanı, CreateUnorderedAccessViewiçinde bu kısıtlamaları doğrular.
Çiz/Gönder sırasında sayaç kaynağı D3D12_RESOURCE_STATE_UNORDERED_ACCESSdurumunda olmalıdır. Ayrıca, tek bir Draw/Dispatch çağrısında, bir uygulamanın iki ayrı UAV sayacı üzerinden aynı 32 bit bellek konumuna erişmesi geçersizdir. Hata ayıklama katmanı, bunlardan biri algılanırsa hata oluşturur.
"SetUnorderedAccessViewCounterValue" veya "CopyStructureCount" yöntemleri yoktur, çünkü uygulamalar sayaç değerine doğrudan veri kopyalayabilir.
UAV'lerin sayaçlarla dinamik dizinlenmesi desteklenir.
Gölgelendirici, ilişkili sayacı olmayan bir UAV'nin sayacına erişmeye çalışırsa hata ayıklama katmanı bir uyarı gönderir ve uygulamaların cihazının kaldırılmasına neden olan bir GPU sayfası hatası oluşur.
UAV sayaçları tüm yığın türlerinde (varsayılan, karşıya yükleme, geri okuma) desteklenir.