Akış Çıkış Sayaçları
Akış çıkışı, GPU'nun arabelleğe köşe yazabilmesidir. Akış çıkış sayaçları ilerleme durumunu izler.
- Direct3D 11 ile Direct3D 12 Arasındaki Akış Sayaçlarında Farkları
- BufferFilledSize
- İlgili konular
Direct3D 11 ile Direct3D 12 arasındaki Akış Sayaçları Arasındaki Farklar
Akış çıkış işleminin bir parçası olarak, GPU'nun yazdığı arabellekteki geçerli konumu bilmesi gerekir. Direct3D 11'de, bu konumu depolamak için bellek sürücü tarafından ayrılır ve uygulamaların bu değeri işlemesinin tek yolu SOSetTargets yöntemidir. Direct3D 12'de uygulamalar bu geçerli konumu depolamak için bellek ayırır. Bu değeri işlemenin özel bir yolu yoktur ve uygulamalar CPU veya GPU ile değeri okuyabilir/yazabilirsiniz.
BufferFilledSize
Uygulama, BufferFilledSizeadlı 32 bitlik bir miktar için depolama ayırmakla sorumludur. Bu, akış çıkış arabelleğindeki veri bayt sayısını içerir. Bu depolama alanı, akış çıkış verilerini içeren kaynakla aynı veya farklı bir kaynağa yerleştirilebilir. Bu değere, arabelleğe yeni köşe verilerinin nereye ekleneceğini belirlemek için akış çıkış aşamasında gpu tarafından erişilir. Ayrıca, bu değere gpu tarafından erişilerek taşma oluştuğu zaman belirlenir.
D3D12_STREAM_OUTPUT_DESCyapısına bakın.
Hata ayıklama katmanı ID3D12GraphicsCommandList::SOSetTargetsiçinde aşağıdakileri doğrular:
- BufferFilledSize, NULL olmayan bir kaynak belirtilirse {OffsetInBytes, SizeInBytes} tarafından belirtilen aralıkta yer alır.
- BufferFilledSizeOffsetInBytes 4'ün katıdır.
- BufferFilledSizeOffsetInBytes, içeren kaynağın aralığındadır.
- Belirtilen kaynak bir arabellek.
Akış çıkışı tüm yığın türlerinde desteklendiğinden çalışma zamanı akış çıkış arabelleğiyle ilişkili yığın türünü doğrulamaz.
Kök imzalar, D3D12_ROOT_SIGNATURE_FLAGS bayraklarını kullanarak akış çıkışının kullanılıp kullanılmayacağını belirtmelidir.
D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT, HLSL'de yazılan kök imzalar için, diğer bayrakların belirtildiğine benzer şekilde belirtilebilir.
geometri gölgelendiricisi akış çıkışı içeriyorsa ancak kök imzada D3D12_ROOT_SIGNATURE_FLAG_ALLOW_STREAM_OUTPUT bayrağı ayarlanmadıysa CreateGraphicsPipelineState başarısız olur.
Bir kaynak akış çıkış hedefi olarak kullanıldığında, kullanılan kaynakların D3D12_RESOURCE_STATE_STREAM_OUT durumunda olması gerekir. Bu, hem köşe verileri hem de BufferFilledSize (aynı veya ayrı kaynaklarda olabilir) için geçerlidir.
Uygulamalar doğrudan CPU veya GPU ile BufferFilledSize yazabildiğinden akış çıkış arabelleği uzaklıklarını ayarlayabileceğiniz özel API'ler yoktur.
İlgili konular