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.
Bir kaynağın alt kaynaklara nasıl bölündüğünü ve alt kaynakların tek, birden çok veya bir dilimine nasıl başvuracaklarını açıklar.
-
Örnek alt kaynaklar
- alt kaynak dizin oluşturma
- Mip dilim
- dizi dilimi
- Düzlem dilim
- Birden çok alt kaynak
- alt kaynak API'lerini
- İlgili konular
Örnek alt kaynaklar
Bir kaynak bir arabellek içeriyorsa, yalnızca 0 dizinine sahip bir alt kaynak içerir. Kaynak bir doku (veya doku dizisi) içeriyorsa alt kaynaklara başvurmak daha karmaşıktır.
Bazı API'ler kaynağın tamamına erişir (id3D12GraphicsCommandList::CopyResource yöntemi gibi), diğerleri kaynağın bir bölümüne (örneğin, ID3D12Resource::ReadFromSubresource yöntemi) erişir. Kaynağın bir bölümüne erişen yöntemler genellikle erişecek alt kaynakları belirtmek için bir görünüm açıklaması (D3D12_TEX2D_ARRAY_SRV yapısı gibi) kullanır. Tam liste için Alt Kaynak API'leri bölümüne bakın.
Alt kaynak dizini oluşturma
Belirli bir alt kaynağı dizine almak için, her dizi girişi dizine alındıkça ilk olarak mip düzeyleri dizine eklenir.
alt kaynak dizin oluşturma
subresource indexing
Mip dilimi
Bir mip dilimi, aşağıdaki görüntüde gösterildiği gibi bir dizideki her doku için bir mipmap düzeyi içerir.
alt kaynak mip dilimlerini
subresource mip slices
Dizi dilimi
Bir doku dizisi verüldüğünde, mipmap'lere sahip her doku, aşağıdaki görüntüde gösterildiği gibi bir dizi dilimi bir doku ve tüm mip düzeylerini içerir.
Düzlem dilimi
Genellikle, RGBA verilerini depolamak için düzlemli biçimler kullanılmaz, ancak bulunduğu durumlarda (belki 24bpp RGB verileri), bir düzlem kırmızı görüntüyü, bir yeşili ve mavi görüntüyü temsil edebilir. Ancak bir düzlem bir renk olmayabilir, iki veya daha fazla renk tek bir düzlemde birleştirilebilir. Daha genellikle alt örneklenmiş YCbCr ve Depth-Stencil verileri için planlı veriler kullanılır. Depth-Stencil mipmap'leri, dizileri ve birden çok düzlemi tam olarak destekleyen tek biçimdir (genellikle Derinlik için düzlem 0 ve Kalıp için düzlem 1).
Her biri üç mip düzeyine sahip iki Depth-Stencil görüntüden oluşan bir dizi için alt kaynak dizini aşağıda gösterilmiştir.
Alt örneklenmiş YCbCr dizileri destekler ve düzlemleri vardır, ancak mipmap'leri desteklemez. YCbCr görüntüleri, biri insan gözünün en hassas olduğu parlaklık (Y) için olmak üzere iki düzleme ve insan gözünün daha az duyarlı olduğu kromenans (hem Cb hem de Cr, araya katılmış) için bir düzleme sahiptir. Bu biçim, parlaklığı etkilemeden bir görüntüyü sıkıştırmak için kromanans değerlerinin sıkıştırılmasına olanak tanır ve hareketsiz görüntüleri sıkıştırmak için kullanılsa da bu nedenle yaygın bir video sıkıştırma biçimidir. Aşağıdaki görüntüde NV12 biçimi gösterilmektedir ve renk parlaklığının çözünürlüğünün dörtte birine sıkıştırıldığına dikkat edin. Bu, her düzlemin genişliğinin aynı olduğu ve krominans düzleminin parlaklık düzleminin yüksekliğinin yarısı olduğu anlamına gelir. Düzlemler, yukarıdaki Depth-Stencil örneğine benzer şekilde alt kaynak olarak dizine alınmalıdır.
nv12 biçimini
the nv12 format
Planar biçimleri Direct3D 11'de mevcut olsa da, kopyalama veya eşleme işlemleri gibi tek tek düzlemler ayrı ayrı ele alınamadı. Bu, Direct3D 12'de değiştirilerek her düzlemin kendi alt kaynak kimliğini almaları için değiştirildi. Alt kaynak kimliğini hesaplamak için aşağıdaki iki yöntemi karşılaştırın.
Direct3D 11
inline UINT D3D11CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT MipLevels )
{
return MipSlice + (ArraySlice * MipLevels);
}
Direct3D 12
inline UINT D3D12CalcSubresource( UINT MipSlice, UINT ArraySlice, UINT PlaneSlice, UINT MipLevels, UINT ArraySize )
{
return MipSlice + (ArraySlice * MipLevels) + (PlaneSlice * MipLevels * ArraySize);
}
Donanımların çoğu N düzlemi için belleğin N-1 düzlemi sonrasında her zaman hemen ayrıldığını varsayar.
Alt kaynakları kullanmanın bir alternatifi, bir uygulamanın düzlem başına tamamen ayrı bir kaynak ayırabileceğidir. Bu durumda uygulama verilerin planlı olduğunu anlar ve bunları temsil etmek için birden çok kaynak kullanır.
Birden çok alt kaynak
Gölgelendirici kaynak görünümü, yukarıda açıklanan dilimlerden birini ve görüntüde gösterildiği gibi görünüm yapılarındaki alanların (D3D12_TEX2D_ARRAY_SRVgibi) ustaca kullanılmasını kullanarak alt kaynakların dikdörtgen bölgelerini seçebilir.
Birden çok alt kaynak seçimi
multiple subresource selection
İşleme hedefi görünümü yalnızca tek bir alt kaynak veya mip dilimi kullanabilir ve birden fazla mip diliminden alt kaynak içeremez. Diğer bir ifadeyle, bir işleme hedefi görünümündeki her doku aynı boyutta olmalıdır. Gölgelendirici kaynak görünümü, görüntüde gösterildiği gibi alt kaynakların dikdörtgen bölgelerini seçebilir.
Alt Kaynak API'leri
Aşağıdaki API'ler alt kaynaklara başvurur ve bunlarla çalışır:
Numaralandırma:
Aşağıdaki yapılar PlaneSlice dizinlerini, çoğu MipSlice dizinlerini içerir.
- D3D12_TEX2D_RTV
- D3D12_TEX2D_ARRAY_RTV
- D3D12_TEX2D_SRV
- D3D12_TEX2D_ARRAY_SRV
- D3D12_TEX2D_UAV
- D3D12_TEX2D_ARRAY_UAV
Aşağıdaki yapılar ArraySlice dizinlerini, çoğu MipSlice dizinlerini içerir.
- D3D12_TEX1D_ARRAY_DSV
- D3D12_TEX2D_ARRAY_DSV
- D3D12_TEX2DMS_ARRAY_DSV
- D3D12_TEX1D_ARRAY_RTV
- D3D12_TEX2D_ARRAY_RTV
- D3D12_TEX2DMS_ARRAY_RTV
- D3D12_TEX1D_ARRAY_SRV
- D3D12_TEX2D_ARRAY_SRV
- D3D12_TEX2DMS_ARRAY_SRV
- D3D12_TEX1D_ARRAY_UAV
- D3D12_TEX2D_ARRAY_UAV
Aşağıdaki yapılar MipSlice dizinleri içerir, ancak ArraySlice veya PlaneSlice dizinleri içermez.
Aşağıdaki yapılar da alt kaynaklara başvurur:
- D3D12_DISCARD_REGION: Kaynağı atmak için hazırlıkta kullanılan bir yapı.
- D3D12_PLACED_SUBRESOURCE_FOOTPRINT: Temel ayak izine bir kaynağa uzaklık ekler.
- D3D12_RESOURCE_TRANSITION_BARRIER: Alt kaynakların farklı kullanımlar (gölgelendirici kaynağı, işleme hedefi vb.) arasında geçişini açıklar.
- D3D12_SUBRESOURCE_DATA: Alt kaynak verileri verilerin kendisini, satır ve dilim sunumunu içerir.
- D3D12_SUBRESOURCE_FOOTPRINT: Ayak izi alt kaynağın biçimini, genişliğini, yüksekliğini, derinliğini ve satır aralığını içerir.
- D3D12_SUBRESOURCE_INFO: alt kaynağın uzaklığını, satır perdesini ve derinlik perdesini içerir.
- D3D12_SUBRESOURCE_TILING: kutucuklu alt kaynak birimini açıklar (bkz. Birim Kutucuklu Kaynaklar).
- D3D12_TEXTURE_COPY_LOCATION: Kopyalama amacıyla dokunun bir bölümünü açıklar.
- D3D12_TILED_RESOURCE_COORDINATE: kutucuklu kaynağın koordinatlarını açıklar.
Yöntemler:
- ID3D12Device::GetCopyableFootprints: bir kopyanın yapılmasını sağlamak için kaynakla ilgili bilgileri alır.
- ID3D12Device::GetResourceTiling: kutucuklu bir kaynağın kutucuklara nasıl ayrıldığı hakkında bilgi alır.
- ID3D12GraphicsCommandList::ResolveSubresource: çok örnekli bir alt kaynağı çok örnekli olmayan bir alt kaynak içine kopyalar.
- ID3D12Resource::Map: kaynakta belirtilen verilere bir işaretçi döndürür ve alt kaynağa GPU erişimini reddeder.
- ID3D12Resource::ReadFromSubresource: alt kaynaktan veya alt kaynağın dikdörtgen bölgesinden veri kopyalar.
- ID3D12Resource::Unmap: belirtilen bellek aralığının eşlemesini kaldırın ve işaretçiyi kaynağa geçersiz kıldı. Gpu erişimini alt kaynak için yeniden devreye alır.
- ID3D12Resource::WriteToSubresource: verileri bir altkaynak veya alt kaynağın dikdörtgen bir bölgesine kopyalar.
Dokuların WriteToSubresource aracılığıyla CPU erişimi için D3D12_RESOURCE_STATE_COMMON durumunda ve ReadFromSubresourceyasal olması gerekir; ancak arabellekler bunu yapmaz. Bir kaynağa CPU erişimi genellikle Eşleme/Eşlemeyi Kaldırüzerinden yapılır.
İlgili konular