Alt Kaynaklar (Direct3D 12 Grafik)

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

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şturmasubresource indexingsubresource 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 dilimlerinisubresource mip slicessubresource 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.

alt kaynak dizi dilimleri

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.

derinlik kalıbı dizin oluşturma

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çiminithe nv12 formatthe 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çimimultiple subresource selectionmultiple 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.

Aşağıdaki yapılar ArraySlice dizinlerini, çoğu MipSlice dizinlerini içerir.

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:

Yöntemler:

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.

Kaynak Bağlama