Değişken oranlı gölgelendirme (VRS)
VRS için motivasyon
Performans kısıtlamaları nedeniyle grafik oluşturucu, çıkış görüntüsünün her bölümüne her zaman aynı kalite düzeyini sunamaz. Değişken oranlı gölgelendirme veya kaba piksel gölgelendirmesi, işlenen görüntünüzde değişen hızlarda işleme performansını/gücünü ayırmanıza olanak tanıyan bir mekanizmadır.
Bazı durumlarda, algılanabilir çıkış kalitesinde az azalma veya hiç azalma ile gölgeleme oranı azaltılabilir; temelde ücretsiz bir performans geliştirmesine yol açar.
VRS olmadan— süper örnekleme ile çok örnekli diğer ad önleme
Değişken hızlı gölgelendirme olmadan, gölgelendirme hızını denetlemenin tek aracı, örnek tabanlı yürütmeye (süper örnekleme olarak da bilinir) sahip çok örnekli kenar yumuşatma (MSAA) iledir.
MSAA, geometrik diğer adı azaltmaya ve MSAA kullanmamaya kıyasla görüntünün işleme kalitesini geliştirmeye yönelik bir mekanizmadır. 1x, 2x, 4x, 8x veya 16x olabilecek MSAA örnek sayısı, işleme hedef pikseli başına ayrılan örnek sayısını yönetir. Hedef ayrıldığında MSAA örnek sayısı önceden bilinmelidir ve bundan sonra değiştirilemez.
Süper örnekleme, piksel gölgelendiricisinin örnek başına bir kez, piksel başına yürütmeye kıyasla daha yüksek kalitede ama aynı zamanda daha yüksek performans maliyetiyle çağrılmalarına neden olur.
Uygulamanız, piksel tabanlı yürütme veya süper örnekleme ile MSAA arasında seçim yaparak gölgelendirme hızını denetleyebiliyor. Bu iki seçenek çok iyi bir denetim sağlamaz. Ayrıca, görüntünün geri kalanıyla karşılaştırıldığında belirli bir nesne sınıfı için daha düşük bir gölgelendirme oranı isteyebilirsiniz. Bu tür nesneler hud elemanının arkasındaki bir nesneyi veya saydamlığı, bulanıklığı (alan derinliği, hareket vb.) veya VR optikleri nedeniyle optik bozulmayı içerebilir. Ancak gölgelendirme kalitesi ve maliyetleri görüntünün tamamı üzerinde sabit olduğundan bu mümkün olmaz.
Değişken oranlı gölgelendirme (VRS) ile
Değişken hızlı gölgelendirme (VRS) modeli, kaba gölgelendirme kavramını ekleyerek MSAA ile süper örneklemeyi tersten "kaba piksel" yönüne genişletir. Burada gölgelendirme bir pikselden daha kaba bir sıklıkta gerçekleştirilebilir. Başka bir deyişle, bir piksel grubu tek bir birim olarak gölgelendirilebilir ve sonuç gruptaki tüm örneklere yayınlanır.
Kaba gölgelendirme API'si, uygulamanızın gölgeli bir gruba ait piksel sayısını veya kaba pikselbelirtmesine olanak tanır. İşleme hedefini ayırdıktan sonra kaba piksel boyutunu değiştirebilirsiniz. Bu nedenle, ekranın farklı bölümleri veya farklı çizim geçişleri farklı gölgelendirme oranlarına sahip olabilir.
Aşağıda, kaba gölgelendirmeyi destekleyen platformlar için hangi MSAA düzeyinin hangi kaba piksel boyutuyla desteklendiğini açıklayan bir tablo yer alır:
- Y işaretlenmiş hücreler için bu birleşim etkinleştirilir.
- Cap işaretlenmiş hücreler için, bu birleşim bir büyük harfe göre koşullu olarak etkinleştirilir (AdditionalShadingRatesSupported).
- Boş olan hücreler için bu birleşim desteklenmez.
- Yarı ton gölgeli hücreler için bu birleşim desteklenmez, ve piksel gölgelendiricisi çağrısı başına 16'dan fazla örnek izlemeyi içerir. 16'dan fazla örneği izlemek için, diğer durumlara kıyasla destek için ek donanım hizalama engelleri vardır.
Özellik katmanları
VRS uygulamasında iki katman ve sorgulayabileceğiniz iki özellik vardır. Her katman, tablodan sonra daha ayrıntılı olarak açıklanmıştır.
Katman 1
- Gölgelendirme oranı yalnızca çizim temelinde belirtilebilir; bundan daha ayrıntılı değil.
- Gölgelendirme oranı, işleme hedefinin içinde bulunduğu konumdan bağımsız olarak çizilen değerlere tekdüzen uygulanır.
Katman 2
- Katman 1'de olduğu gibi gölgelendirme oranı çizim başına belirtilebilir. Ayrıca, çizilme başına temelin ve şunların bir bileşimiyle de belirtilebilir:
- Her bir provoking köşesinden semantik ve
- bir ekran alanı görüntüsü.
- Üç kaynaktan gölgelendirme oranları bir birleştirici kümesi kullanılarak birleştirilir.
- Ekran alanı resim kutucuğu boyutu 16x16 veya daha küçüktür.
- Uygulamanız tarafından istenen gölgelendirme oranının tam olarak teslim edilmesi garanti edilir (zamansal ve diğer yeniden yapılandırma filtrelerinin duyarlığı için).
- SV_ShadingRate PS girişi desteklenir.
- Tek bir görünüm penceresi kullanıldığında ve
SV_ViewportArrayIndex
yazılmadığında, her bir provoking-köşesi (ilkel başına olarak da bilinir) gölgelendirme oranı geçerli olur. -
SupportsPerVertexShadingRateWithMultipleViewports özelliği
true
olarak ayarlandıysa, köşe başına hızı birden fazla görünüm penceresiyle kullanılabilir. Ayrıca, bu durumda bu oranSV_ViewportArrayIndex
yazıldığında kullanılabilir.
Özelliklerin listesi
-
AdditionalShadingRatesSupported
- Boole türü.
- Tek örnekli işleme için 2x4, 4x2 ve 4x4 kaba piksel boyutlarının desteklenip desteklenmediğini gösterir; ve 2x MSAA için 2x4 kaba piksel boyutunun desteklenip desteklenmediği.
-
SupportsPerVertexShadingRateWithMultipleViewports
- Boole türü.
- Köşe başına (ilkel olarak da bilinir) gölgelendirme hızıyla birden fazla görünüm penceresi kullanılıp kullanılamayacağını gösterir.
Gölgelendirme oranını belirtme
Uygulamalarda esneklik için, gölgelendirme oranını kontrol etmek için sağlanan çeşitli mekanizmalar vardır. Donanım özellik katmanına bağlı olarak farklı mekanizmalar kullanılabilir.
Komut listesi
Bu, gölgelendirme hızını ayarlamak için en basit mekanizmadır. Tüm katmanlarda kullanılabilir.
Uygulamanız, ID3D12GraphicsCommandList5::RSSetShadingRate yöntemini kullanarak kaba bir piksel boyutu belirtebilir. Bu API tek bir sabit listesi bağımsız değişkeni alır. API, işleme için kalite düzeyi üzerinde genel bir denetim sağlar; gölgelendirme oranını çizim başına olarak ayarlama olanağı.
Bu durumun değerleri D3D12_SHADING_RATE numaralandırması aracılığıyla ifade edilir.
Kaba piksel boyutu desteği
1x1, 1x2, 2x1 ve 2x2 gölgelendirme hızları tüm katmanlarda desteklenir.
Cihazda 2x4, 4x2 ve 4x4'in desteklenip desteklenmediğini belirtmek için AdditionalShadingRatesSupportedözelliği vardır.
Ekran alanı görüntüsü (görüntü tabanlı)
Katman 2 ve üzeri sürümlerde, ekran alanı görüntüsüyle piksel gölgelendirme hızını belirtebilirsiniz.
Ekran alanı görüntüsü, uygulamanızın hareket bulanıklığı, alan derinliği bulanıklaştırma, saydam nesneler veya HUD kullanıcı arabirimi öğeleriyle kaplanacak alanlar gibi değişen kalitede bölgeleri gösteren bir "ayrıntı düzeyi (LOD) maskesi" oluşturmasına olanak tanır. Görüntünün çözünürlüğü makro bloklarındadır; işleme hedefinin çözünürlüğünde değildir. Başka bir deyişle, gölgeleme hızı verileri, VRS kutucuk boyutuyla gösterildiği gibi 8x8 veya 16x16 piksel kutucukların ayrıntı düzeyinde belirtilir.
Kutucuk boyutu
Uygulamanız, cihazının desteklenen VRS kutucuk boyutunu almak için bir API'yi sorgulayabilir.
Kutucuklar karedir ve boyut, kutucuğun texel cinsinden genişliğine veya yüksekliğine başvurur.
Donanım Katman 2 değişken hızı gölgelendirmeyi desteklemiyorsa kutucuk boyutu için yetenek sorgusu 0 döndürür.
Donanım Katman 2 değişken oranlı gölgelendirmeyi destekliyorsa kutucuk boyutu bu değerlerden biridir.
- 8
- 16
- 32
Ekran alanı resim boyutu
Boyutu {rtWidth, rtHeight} olan bir işleme hedefi için, VRSTileSizeadlı belirli bir kutucuk boyutu kullanıldığında, bunu kapsayacak ekran alanı görüntüsü bu boyutlardadır.
{ ceil((float)rtWidth / VRSTileSize), ceil((float)rtHeight / VRSTileSize) }
Ekran alanı görüntüsünün sol üst (0, 0) bölümü, işleme hedefinin sol üst kısmına (0, 0) kilitlenir.
İşleme hedefindeki belirli bir konuma karşılık gelen bir kutucuğun (x,y) koordinatını aramak için, kesirli bitleri yoksayarak (x, y) pencere alanı koordinatlarını kutucuk boyutuna bölün.
Ekran alanı görüntüsü belirli bir işleme hedefi için olması gerekenden büyükse, sağ ve/veya alt kısımlar kullanılmaz.
Ekran alanı görüntüsü belirli bir işleme hedefi için çok küçükse, gerçek uzantılarının ötesinde görüntüden okunmaya çalışılanlar varsayılan gölgelendirme oranı olan 1x1'i verir. Bunun nedeni, ekran alanı görüntüsünün sol üst (0, 0) işleme hedefinin sol üst kısmına (0, 0) kilitlenmesi ve "işleme hedefi kapsamlarının ötesinde okuma" x ve y değerlerinin çok büyük okunması anlamına gelir.
Biçim, düzen, kaynak özellikleri
Bu yüzeyin biçimi tek kanallı bir 8 bit yüzeydir (DXGI_FORMAT_R8_UINT).
Kaynak boyut TEXTURE2D.
Dizilenemez veya kırpılamaz. Açıkça bir mip düzeyine sahip olmalıdır.
Örnek sayısı 1'e ve örnek kalitesi 0'a sahiptir.
bilinmeyendoku düzenine sahiptir. Çapraz bağdaştırıcıya izin verilmediğinden, örtük olarak satır ana düzeni olamaz.
Ekran alanı görüntü verilerinin doldurulma yöntemi iki durumdan biri
- İşlem gölgelendiricisi kullanarak verileri yazma; ekran alanı görüntüsü bir UAV olarak bağlıdır veya
- Verileri ekran alanı görüntüsüne kopyalayın.
Ekran alanı görüntüsü oluşturulurken bu bayraklara izin verilir.
- Hiç kimse
- ALLOW_UNORDERED_ACCESS
- DENY_SHADER_RESOURCE
Bu bayraklara izin verilmez.
- ALLOW_RENDER_TARGET
- ALLOW_DEPTH_STENCIL
- ALLOW_CROSS_ADAPTER
- ALLOW_SIMULTANEOUS_ACCESS
- VIDEO_DECODE_REFERENCE_ONLY
Kaynağın yığın türü UPLOAD veya READBACK olamaz.
Kaynak SIMULTANEOUS_ACCESS olamaz. Kaynağın bağdaştırıcılar arası olarak kullanılmasına izin verilmiyor.
Veri
Ekran alanı görüntüsünün her baytı, D3D12_SHADING_RATE numaralandırmasının bir değerine karşılık gelir.
Kaynak durumu
Bir kaynağın ekran alanı görüntüsü olarak kullanıldığında salt okunur duruma geçmesi gerekir. Bu amaçla D3D12_RESOURCE_STATE_SHADING_RATE_SOURCEsalt okunur bir durum tanımlanır.
Görüntü kaynağı, yeniden yazılabilir hale gelecek şekilde bu durumdan geçirilir.
Görüntüyü ayarlama
Gölgelendirici hızını belirtmek için ekran alanı görüntüsü komut listesinde ayarlanır.
Gölgelendirme oranı kaynağı olarak ayarlanmış bir kaynak, gölgelendirici aşamasından okunamaz veya yazılamaz.
Gölgelendirici hızını belirtmek için bir null
ekran alanı görüntüsü ayarlanabilir. Bu, 1x1'in ekran alanı görüntüsünden gelen katkı olarak tutarlı bir şekilde kullanılmasının etkisine sahiptir. Ekran alanı görüntüsünün başlangıçta null
olarak ayarlandığı düşünülebilir.
Promosyon ve çürüme
Ekran alanı görüntü kaynağının yükseltme veya bozulma açısından herhangi bir özel etkisi yoktur.
İlkel öznitelik başına
İlkel başına öznitelik, bir gölgelendirme oranı terimini bir kışkırtma köşesinden öznitelik olarak belirtme olanağı ekler. Bu öznitelik düz gölgeli, yani geçerli üçgendeki veya çizgi temel öğedeki tüm piksellere yayılır. İlkel öznitelik başına kullanılması, görüntü kalitesinin diğer gölgelendirme hızı tanımlayıcılarına kıyasla daha ayrıntılı bir şekilde denetlenebilmesini sağlayabilir.
temel öğe başına özniteliği, SV_ShadingRate
adlı ayarlanabilir bir anlamsaldır.
SV_ShadingRate
, HLSL Gölgelendirici Modeli 6.4'nin bir parçası olarak mevcuttur.
VS veya GS SV_ShadingRate
ayarlarsa ancak VRS etkin değilse semantik ayarın hiçbir etkisi yoktur. İlkel başına SV_ShadingRate
değeri belirtilmezse, ilkel katkı olarak 1x1 gölgelendirme oranı değeri kabul edilir.
Gölgelendirme oranı faktörlerini birleştirme
Çeşitli gölgelendirme oranı kaynakları bu diyagram kullanılarak sırayla uygulanır.
A ve B çiftlerinin her biri birleştirici kullanılarak birleştirilir.
* Köşe özniteliğine göre gölgelendirici oranı belirtirken.
- Geometri gölgelendiricisi kullanılırsa, gölgeleme oranı bu şekilde belirtilebilir.
- Geometri gölgelendiricisi kullanılmazsa gölgeleme hızı, tahrik köşesi tarafından belirtilir.
Birleştiriciler listesi
Aşağıdaki birleştiriciler desteklenir. Bir Birleştirici (C) ve iki giriş (A ve B) kullanma.
- Geçiş. C.xy = A.xy.
- Geçersiz Kılma. C.xy = B.xy.
- Yüksek kaliteli. C.xy = min(A.xy, B.xy).
- Düşük kalite. C.xy = max(A.xy, B.xy).
- Agöre B maliyetini uygulayın. C.xy = min(maxRate, A.xy + B.xy).
burada maxRate
, cihazdaki kaba pikselin izin verilen en büyük boyutudur. Bu,
- additionalShadingRatesSupported
false
ise D3D12_AXIS_SHADING_RATE_2X (1 değeridir). - additionalShadingRatesSupported
true
ise D3D12_AXIS_SHADING_RATE_4X (2 değeridir).
Değişken hızlı gölgelendirme için birleştirici seçimi, komut listesinde ID3D12GraphicsCommandList5::RSSetShadingRatearacılığıyla ayarlanır.
Hiçbir birleştirici ayarlanmadıysa, varsayılan değer olan PASSTHROUGH'da kalırlar.
Bir birleştiricinin kaynağı, destek tablosunda izin verilmeyen bir D3D12_AXIS_SHADING_RATEise, giriş desteklenen gölgeleme hızına temizlenmiş olur.
Bir birleştiricinin çıkışı platformda desteklenen bir gölgelendirme oranına karşılık gelmiyorsa, sonuç desteklenen gölgeleme oranına temizlenmiş olur.
Varsayılan durum ve durum temizleme
Tüm gölgelendirme oranı kaynakları, yani
- işlem hattı durumu tarafından belirtilen hız (komut listesinde belirtilir),
- ekran alanı görüntü tarafından belirtilen hız ve
- ilkel öznitelik başına
varsayılan olarak D3D12_SHADING_RATE_1X1. Varsayılan birleştiriciler :{PASSTHROUGH, PASSTHROUGH}.
Ekran alanı görüntüsü belirtilmezse, bu kaynaktan 1x1 gölgeleme oranı çıkarılır.
İlkel başına öznitelik belirtilmezse, bu kaynaktan 1x1 gölgeleme oranı çıkarılır.
ID3D12CommandList::ClearState işlem hattı durumunda belirtilen hızı varsayılana, ekran alanı görüntüsü seçimini de varsayılan "ekran alanı görüntüsü yok" değerine sıfırlar.
SV_ShadingRate kullanarak gölgelendirme oranını sorgulama
Belirli bir piksel gölgelendiricisi çağrısında donanım tarafından hangi gölgelendirme oranının seçildiğini bilmek yararlıdır. Bu, PS kodunuzda çeşitli iyileştirmeleri etkinleştirebilir.
SV_ShadingRate
ps-only sistem değişkeni, gölgelendirme hızı hakkında bilgi sağlar.
Tür
Bu semantiğin türü uint'tir.
Veri yorumlama
Veriler, D3D12_SHADING_RATE sabit listesi değeri olarak yorumlanır.
VRS kullanılmıyorsa
Kaba piksel gölgelendirmesi kullanılmıyorsa, SV_ShadingRate
1x1 değeri olarak geri okunur ve bu da ince pikselleri gösterir.
Örnek tabanlı yürütme altında davranış
Piksel gölgelendiricisi, SV_ShadingRate
girip örnek tabanlı yürütmeyi kullanırsa (örneğin, SV_SampleIndex
giriş yaparak veya örnek ilişkilendirme anahtar sözcüğünü kullanarak) derleme başarısız olur.
Ertelenmiş gölgelendirmeyle ilgili açıklamalar
Ertelenen gölgelendirme uygulamasının aydınlatma geçişlerinin ekranın hangi alanında hangi gölgelendirme oranının kullanıldığını bilmesi gerekebilir. Bu, ışık geçişi dağıtımlarının kaba bir hızda başlatabilmesi için geçerlidir.
SV_ShadingRate
değişkeni, gbuffer'a yazılırsa bunu gerçekleştirmek için kullanılabilir.
Derinlik ve kalıp
Kaba piksel gölgelendirme kullanıldığında derinlik, kalıp ve kapsam her zaman tam örnek çözünürlükte hesaplanır ve yayılır.
İstenen gölgelendirme oranını kullanma
Tüm katmanlar için, bir gölgeleme oranı istenirse ve cihaz ve MSAA düzeyi bileşiminde desteklenirse, donanım tarafından sağlanan gölgelendirme oranı bu şekildedir.
İstenen gölgelendirme hızı, birleştiricilerin çıkışı olarak hesaplanan gölgelendirme hızı anlamına gelir (bu konudaki Birleştirme gölgelendirme oranı faktörleri bölümüne bakın).
Örnek sayısının dörtten küçük veya buna eşit olduğu bir işleme işleminde desteklenen gölgelendirme hızı 1x1, 1x2, 2x1 veya 2x2'dir.
AdditionalShadingRatesSupported özelliği true
ise, bazı örnek sayıları için 2x4, 4x2 ve 4x4 gölgelendirme hızları da desteklenir (bu konudaki Değişken hızlı gölgelendirme (VRS) ile bölümündeki tabloya bakın).
Ekran alanı türevleri
Pikselden piksele bitişik piksel gradyanlarının hesaplamaları kaba piksel gölgelendirmeden etkilenir. Örneğin, 2x2 kaba piksel kullanıldığında gradyan, kaba piksellerin kullanılmamasıyla karşılaştırıldığında boyutun iki katı olur. Uygulamanız, istediğiniz işlevselliğe bağlı olarak bunu telafi etmek için gölgelendiricileri ayarlamak isteyebilir.
Mip'ler bir ekran uzayı türevi temelinde seçildiğinden, kaba piksel gölgelendirme kullanımı mip seçimini etkiler. Kaba piksel gölgelendirme kullanımı, kaba piksellerin kullanılmamasıyla karşılaştırıldığında daha az ayrıntılı mips'lerin seçilmesine neden olur.
Öznitelik ilişkilendirmesi
Piksel gölgelendiricisine girişler, kaynak köşelerine göre ilişkilendirilmiş olabilir. Değişken hızı gölgelendirmesi, piksel gölgelendiricisinin her çağrısı tarafından yazılan hedefin alanlarını etkilediğinden, öznitelik ilişkilendirmesiyle etkileşim kurar. Üç ilişkilendirme türü merkez, merkez ve örnektir.
Orta
Kaba bir pikselin orta ilişkilendirme konumu, tam kaba piksel alanının geometrik merkezidir.
SV_Position
her zaman kaba piksel bölgesinin merkezinde ilişkilendirme yapılır.
Centroid
MSAA ile kaba piksel gölgelendirmesi kullanıldığında, her ince piksel için hedefin MSAA düzeyi için ayrılan örneklerin tam sayısına yazma işlemleri devam eder. Bu nedenle, centroid ilişkilendirme konumu kaba pikseller içindeki ince pikseller için tüm örnekleri dikkate alır. Buna göre, merkezkroid ilişkilendirme konumu, örnek dizinin sırasını artırarak ilk kapsanan örnek olarak tanımlanır. Örneğin etkili kapsamı, SampleMask rasterizer durumunun karşılık gelen biti ile and-ed şeklindedir.
Not
Katman 1'de kaba piksel gölgelendirme kullanıldığında SampleMask her zaman tam maskedir. SampleMask tam maske olmayacak şekilde yapılandırılmışsa Katman 1'de kaba piksel gölgelendirme devre dışı bırakılır.
Örnek tabanlı yürütme
Örnek tabanlı yürütme veya süper örnekleme(örnek ilişkilendirme özelliğinin kullanımından kaynaklanır) kaba piksel gölgelendirmesi ile kullanılabilir ve örnek başına piksel gölgelendiricisinin çağrılmasına neden olur. Örnek sayısı N hedefleri için, piksel gölgelendiricisi ince piksel başına N kez çağrılır.
EvaluateAttributeSnapped
Çekme modeli iç özellikleri Katman 1'de kaba piksel gölgelendirme ile uyumlu değildir. Katman 1'de kaba piksel gölgelendirmesi ile çekme modeli iç değerlerini kullanma girişimi varsa, kaba piksel gölgelendirmesi otomatik olarak devre dışı bırakılır.
İç EvaluateAttributeSnapped
Katman 2'de kaba piksel gölgelendirme ile kullanılmasına izin verilir. Söz dizimi her zaman olduğu gibi aynıdır.
numeric EvaluateAttributeSnapped(
in attrib numeric value,
in int2 offset);
Bağlam için EvaluateAttributeSnapped
iki alanı olan bir offset parametresi vardır. Kaba piksel gölgelendirmesi olmadan kullanıldığında, tam otuz iki bitten yalnızca alt sıralı dört bit kullanılır. Bu dört bit [-8, 7] aralığını temsil eder. Bu aralık bir piksel içindeki 16x16 kılavuza yayılıyor. Aralık, pikselin üst ve sol kenarları dahil edilir ve alt ve sağ kenarlar dahil değildir. Uzaklık (-8, -8) sol üst köşede, uzaklık (7, 7) ise sağ alt köşededir. Uzaklık (0, 0), pikselin merkezidir.
Kaba piksel gölgelendirme ile kullanıldığında, EvaluateAttributeSnapped
ofset parametresi daha geniş bir konum aralığı belirtebilir. offset parametresi her ince piksel için 16x16 kılavuz seçer ve birden çok ince piksel vardır. Kullanılan ifade edilebilir aralık ve sonuç olarak kullanılan bit sayısı, kaba piksel boyutuna bağlıdır. Kaba pikselin üst ve sol kenarları dahil edilir ve alt ve sağ kenarlar dahil değildir.
Aşağıdaki tabloda, her kaba piksel boyutu için EvaluateAttributeSnapped
ofset parametresinin yorumu açıklanmaktadır.
EvaluateAttributeSnapped'in uzaklık aralığı
Kaba piksel boyutu | Dizinlenebilir aralık | Temsil edilebilir aralık boyutu | {x, y} gereken bit sayısı | Kullanılabilir bitlerin ikili maskesi |
---|---|---|---|---|
1x1 (ince) | {[-8, 7], [-8, 7]} | {16, 16} | {4, 4} | {00000000000xxxx, 000000000000xxxxx} |
1x2 | {[-8, 7], [-16, 15]} | {16, 32} | {4, 5} | {000000000000xxxx, 0000000000xxxxx} |
2x1 | {[-16, 15], [-8, 7]} | {32, 16} | {5, 4} | {0000000000xxx, 000000000000xxxxx} |
2x2 | {[-16, 15], [-16, 15]} | {32, 32} | {5, 5} | {00000000000xx, 0000000000x} |
2x4 | {[-16, 15], [-32, 31]} | {32, 64} | {5, 6} | {0000000000xxx, 000000000xxx} |
4x2 | {[-32, 31], [-16, 15]} | {64, 32} | {6, 5} | {000000000xxxxxx, 0000000000xxxx} |
4x4 | {[-32, 31], [-32, 31]} | {64, 64} | {6, 6} | {000000000xxxxxx, 000000000xx} |
Aşağıdaki tablolar, sabit noktadan ondalık ve kesirli gösterime dönüştürmeye yönelik bir kılavuzlardır. İkili maskedeki ilk kullanılabilir bit işaret bitidir ve ikili maskenin geri kalanı sayısal bölümü içerir.
EvaluateAttributeSnapped
geçirilen dört bit değerlerin sayı düzeni değişken oranlı gölgelendirmeye özgü değildir. Bütünlük için burada tekrar edildi.
Dört bit değerler için.
İkili değer | On -da -lık | Kesirli |
---|---|---|
1000 | -0,5f | -8 / 16 |
1001 | -0,4375f | -7 / 16 |
1010 | -0,375f | -6 / 16 |
1011 | -0,3125f | -5 / 16 |
1100 | -0,25f | -4 / 16 |
1101 | -0,1875f | -3 / 16 |
1110 | -0,125f | -2 / 16 |
1111 | -0,0625f | -1 /16 |
0000 | 0,0f | 0 / 16 |
0001 | -0,0625f | 1 / 16 |
0010 | -0,125f | 2 / 16 |
0011 | -0,1875f | 3 / 16 |
0100 | -0,25f | 4 / 16 |
0101 | -0,3125f | 5 / 16 |
0110 | -0,375f | 6 / 16 |
0111 | -0,4375f | 7 / 16 |
Beş bit değerler için.
İkili değer | On -da -lık | Kesirli |
---|---|---|
10000 | -1 | -16 / 16 |
10001 | -0.9375 | -15 / 16 |
10010 | -0.875 | -14 / 16 |
10011 | -0.8125 | -13 / 16 |
10100 | -0.75 | -12 / 16 |
10101 | -0.6875 | -11 / 16 |
10110 | -0.625 | -10 / 16 |
10111 | -0.5625 | -9 / 16 |
11000 | -0.5 | -8 / 16 |
11001 | -0.4375 | -7 / 16 |
11010 | -0.375 | -6 / 16 |
11011 | -0.3125 | -5 / 16 |
11100 | -0.25 | -4 / 16 |
11101 | -0.1875 | -3 / 16 |
11110 | -0.125 | -2 / 16 |
11111 | -0.0625 | -1 / 16 |
00000 | 0 | 0 / 16 |
00001 | 0.0625 | 1 / 16 |
00010 | 0.125 | 2 / 16 |
00011 | 0.1875 | 3 / 16 |
00100 | 0.25 | 4 / 16 |
00101 | 0.3125 | 5 / 16 |
00110 | 0.375 | 6 / 16 |
00111 | 0.4375 | 7 / 16 |
01000 | 0.5 | 8 / 16 |
01001 | 0.5625 | 9 / 16 |
01010 | 0.625 | 10 / 16 |
01011 | 0.6875 | 11 / 16 |
01100 | 0.75 | 12 / 16 |
01101 | 0.8125 | 13 / 16 |
01110 | 0.875 | 14 / 16 |
01111 | 0.9375 | 15 / 16 |
Altı bit değerler için.
İkili değer | On -da -lık | Kesirli |
---|---|---|
100000 | -2 | -32 / 16 |
100001 | -1.9375 | -31 / 16 |
100010 | -1.875 | -30 / 16 |
100011 | -1.8125 | -29 / 16 |
100100 | -1.75 | -28 / 16 |
100101 | -1.6875 | -27 / 16 |
100110 | -1.625 | -26 / 16 |
100111 | -1.5625 | -25 / 16 |
101000 | -1.5 | -24 / 16 |
101001 | -1.4375 | -23 / 16 |
101010 | -1.375 | -22 / 16 |
101011 | -1.3125 | -21 / 16 |
101100 | -1.25 | -20 / 16 |
101101 | -1.1875 | -19 / 16 |
101110 | -1.125 | -18 / 16 |
101111 | -1.0625 | -17 / 16 |
110000 | -1 | -16 / 16 |
110001 | -0.9375 | -15 / 16 |
110010 | -0.875 | -14 / 16 |
110011 | -0.8125 | -13 / 16 |
110100 | -0.75 | -12 / 16 |
110101 | -0.6875 | -11 / 16 |
110110 | -0.625 | -10 / 16 |
110111 | -0.5625 | -9 / 16 |
111000 | -0.5 | -8 / 16 |
111001 | -0.4375 | -7 / 16 |
111010 | -0.375 | -6 / 16 |
111011 | -0.3125 | -5 / 16 |
111100 | -0.25 | -4 / 16 |
111101 | -0.1875 | -3 / 16 |
111110 | -0.125 | -2 / 16 |
111111 | -0.0625 | -1 / 16 |
000000 | 0 | 0 / 16 |
000001 | 0.0625 | 1 / 16 |
000010 | 0.125 | 2 / 16 |
000011 | 0.1875 | 3 / 16 |
000100 | 0.25 | 4 / 16 |
000101 | 0.3125 | 5 / 16 |
000110 | 0.375 | 6 / 16 |
000111 | 0.4375 | 7 / 16 |
001000 | 0.5 | 8 / 16 |
001001 | 0.5625 | 9 / 16 |
001010 | 0.625 | 10 / 16 |
001011 | 0.6875 | 11 / 16 |
001100 | 0.75 | 12 / 16 |
001101 | 0.8125 | 13 / 16 |
001110 | 0.875 | 14 / 16 |
001111 | 0.9375 | 15 / 16 |
010000 | 1 | 16 / 16 |
010001 | 1.0625 | 17 / 16 |
010010 | 1.125 | 18 / 16 |
010011 | 1.1875 | 19 / 16 |
010100 | 1.25 | 20 / 16 |
010101 | 1.3125 | 21 / 16 |
010110 | 1.375 | 22 / 16 |
010111 | 1.4375 | 23 / 16 |
011000 | 1.5 | 24 / 16 |
011001 | 1.5625 | 25 / 16 |
011010 | 1.625 | 26 / 16 |
011011 | 1.6875 | 27 / 16 |
011100 | 1.75 | 28 / 16 |
011101 | 1.8125 | 29 / 16 |
011110 | 1.875 | 30 / 16 |
011111 | 1.9375 | 31 / 16 |
İnce piksellerle aynı şekilde, EvaluateAttributeSnapped
'nin değerlendirilebilir konumlar kılavuzu, kaba piksel gölgelendirmesi kullanılırken kaba piksel merkezinde ortalanır.
SetSamplePositions
API ID3D12GraphicsCommandList1::SetSamplePositionskaba gölgelendirme ile kullanıldığında, API ince pikseller için örnek konumları ayarlar.
SV_Coverage
katman 1'de SV_Coverage
gölgelendirici girişi veya çıkışı olarak bildirilirse, kaba piksel gölgelendirme devre dışı bırakılır.
Katman 2'de SV_Coverage
semantiğini kaba piksel gölgelendirmesi ile kullanabilirsiniz ve MSAA hedefinin hangi örneklerinin yazıldığını yansıtır.
Birden çok kaynak pikselin kutucuk oluşturmasına olanak sağlayan kaba piksel gölgelendirme kullanıldığında, kapsam maskesi bu kutucuktan gelen tüm örnekleri temsil eder.
Kaba piksel gölgelendirmesinin MSAA ile uyumluluğu göz önüne alındığında, belirtilmesi gereken kapsam bitlerinin sayısı farklılık gösterebilir. Örneğin, D3D12_SHADING_RATE_2x2kullanan 4x MSAA kaynağıyla her kaba piksel dört ince piksele yazılır ve her ince pikselin dört örneği vardır. Bu, her kaba pikselin toplam 4 * 4 = 16 örne yazdığını gösterir.
Gereken kapsam bitlerinin sayısı
Aşağıdaki tabloda, kaba piksel boyutu ve MSAA düzeyinin her birleşimi için kaç kapsama bitinin gerekli olduğu gösterilir.
Tabloda belirtildiği gibi, Direct3D 12 aracılığıyla sunulan değişken hızı gölgelendirme özelliğini kullanarak aynı anda 16'dan fazla örne yazmak için kaba piksel kullanmak mümkün değildir. Bu kısıtlama, Direct3D 12'nin hangi MSAA düzeylerine izin verilen ve hangi kaba piksel boyutuna izin verildiğiyle ilgili kısıtlamalarından kaynaklanır (bu konudaki değişken hız gölgelendirme (VRS) ile bölümündeki tabloya bakın).
Kapsam maskesindeki bitleri sıralama ve biçimlendirme
Kapsam maskesinin bitleri iyi tanımlanmış bir düzene bağlıdır. Maske, soldan sağa, ardından yukarıdan aşağıya (sütun ana) piksellerden oluşan kapsamlardan oluşur. Kapsam bitleri, kapsam semantiğinin düşük sıralı bitleridir ve yoğun bir şekilde birlikte paketlenir.
Aşağıdaki tabloda, kaba piksel boyutu ve MSAA düzeyinin desteklenen bileşimleri için kapsam maskesi biçimi gösterilmektedir.
Kapsamı
Aşağıdaki tabloda, her pikselin 0 ve 1 dizinlerinden oluşan iki örnek bulunduğu 2x MSAA pikselleri görüntülenmiştir.
Piksellerdeki örnek etiketlerinin konumlandırılması, açıklayıcı amaçlar içindir ve bu pikseldeki örneklerin uzamsal {X, Y} konumlarını aktarmaz; özellikle örnek konumların program aracılığıyla değiştirilebileceği göz önünde bulundurulduğunda. Örneklere 0 tabanlı dizinleri tarafından başvurulur.
Kapsamı
Aşağıdaki tabloda, her pikselin 0, 1, 2 ve 3 dizinlerinin dört örneğine sahip olduğu 4x MSAA pikselleri gösterilmektedir.
Kapsamı
Atmak
HLSL semantik discard
kaba piksel gölgelendirmesi ile kullanıldığında, kaba pikseller atılır.
Hedef bağımsız rasterleştirme (TIR)
Kaba piksel gölgelendirme kullanıldığında TIR desteklenmez.
Raster sipariş görünümleri (YV' ler)
ROV kilitlenmeleri, ince piksel ayrıntı düzeyinde çalışma olarak belirtilir. Örnek başına gölgelendirme gerçekleştiriliyorsa, kilitler örnek ayrıntı düzeyinde çalışır.
Muhafazakar rasterleştirme
Değişken oranlı gölgelendirme ile konservatif rasterleştirme kullanabilirsiniz. Konservatif rasterleştirme kaba piksel gölgelendirme ile kullanıldığında, kaba pikseller içindeki ince pikseller tam kapsam verilerek konservatif olarak rasterleştirilir.
Kapsama alanı
Muhafazakar rasterleştirme kullanıldığında kapsam semantiği, kapsanan ince pikseller için tam maskeler ve kapsanmayan ince pikseller için 0 maske içerir.
Paketler
Bir pakette değişken oranlı gölgelendirme API'lerini çağırabilirsiniz.
İşleme geçişleri
işleme geçişideğişken hızı gölgelendirme API'lerini çağırabilirsiniz.
VRS API'lerini çağırma
Bu sonraki bölümde, direct3D 12 aracılığıyla uygulamanız için değişken oranlı gölgelendirmenin nasıl erişilebilir olduğu açıklanmaktadır.
Yetenek sorgulama
Bağdaştırıcının değişken hızlı gölgelendirme özelliğini sorgulamak için, id3D12Device::CheckFeatureSupportD3D12_FEATURE::D 3D12_FEATURE_D3D12_OPTIONS6ileçağırın ve işlevin sizin için doldurması için D3D12_FEATURE_DATA_D3D12_OPTIONS6 bir yapı sağlayın. D3D12_FEATURE_DATA_D3D12_OPTIONS6 yapısı, numaralandırılmış tür D3D12_VARIABLE_SHADING_RATE_TIER (D3D12_FEATURE_DATA_D3D12_OPTIONS6::VariableShadingRateTier) ve arka plan işlemenin desteklenip desteklenmediğini gösteren (D3D12_FEATURE_DATA_D3D12_OPTIONS6::BackgroundProcessingSupported) dahil olmak üzere birkaç üye içerir.
Örneğin Katman 1 özelliğini sorgulamak için bunu yapabilirsiniz.
D3D12_FEATURE_DATA_D3D12_OPTIONS6 options;
return
SUCCEEDED(m_device->CheckFeatureSupport(
D3D12_FEATURE_D3D12_OPTIONS6,
&options,
sizeof(options))) &&
options.ShadingRateTier == D3D12_VARIABLE_SHADING_RATE_TIER_1;
Gölgelendirme oranları
D3D12_SHADING_RATE numaralandırma değerler, gölgelendirme oranlarının iki eksene kolayca ayrıştırılması için düzenlenir ve burada her eksenin değerleri D3D12_AXIS_SHADING_RATE sabit listesigöre logaritmik alanda küçük bir şekilde gösterilir.
İki eksen gölgelendirme oranını aşağıdaki gibi bir gölgelendirme hızına oluşturmak için bir makro yazabilirsiniz.
#define D3D12_MAKE_COARSE_SHADING_RATE(x,y) ((x) << 2 | (y))
D3D12_MAKE_COARSE_SHADING_RATE(
D3D12_AXIS_SHADING_RATE_2X,
D3D12_AXIS_SHADING_RATE_1X)
Platform, d3d12.h
içinde tanımlanan bu makroları da sağlar.
#define D3D12_GET_COARSE_SHADING_RATE_X_AXIS(x) ((x) >> 2 )
#define D3D12_GET_COARSE_SHADING_RATE_Y_AXIS(y) ((y) & 3 )
Bunlar SV_ShaderRate
dağıtmak ve anlamak için kullanılabilir.
Not
Bu veri yorumu, gölgelendiriciler tarafından değiştirilebilen ekran alanı görüntüsünü açıklamaya yöneliktir. Bu, yukarıdaki bölümlerde daha ayrıntılı olarak ele alınıyor. Ancak, komut düzeyi gölgelendirme hızını ayarlarken de dahil olmak üzere her yerde kullanılacak kaba piksel boyutlarının tutarlı bir tanımına sahip olmamanız için bir neden yoktur.
Komut düzeyi gölgelendirme hızını ve birleştiricileri ayarlama
Gölgeleme hızı ve isteğe bağlı olarak, birleştiriciler ID3D12GraphicsCommandList5::RSSetShadingRate yöntemi aracılığıyla belirtilir. Temel gölgelendirme oranı için bir D3D12_SHADING_RATE değeri ve isteğe bağlı bir D3D12_SHADING_RATE_COMBINER değerleri dizisi geçirirsiniz.
Ekran alanı görüntüsünü hazırlama
Kullanılabilir bir gölgelendirme hızı görüntüsü belirten salt okunur kaynak durumu, D3D12_RESOURCE_STATES::D 3D12_RESOURCE_STATE_SHADING_RATE_SOURCEolarak tanımlanır.
Ekran alanı görüntüsünü ayarlama
ID3D12GraphicsCommandList5::RSSetShadingRateImage yöntemi aracılığıyla ekran alanı görüntüsünü belirtirsiniz.
m_commandList->RSSetShadingRateImage(screenSpaceImage);
Kutucuk boyutunu sorgulama
kutucuk boyutunu D3D12_FEATURE_DATA_D3D12_OPTIONS6::ShadingRateImageTileSize üyesinden sorgulayabilirsiniz. Yukarıdaki Yetenek sorgulama bakın.
Yatay ve dikey boyutlar her zaman aynı olduğundan bir boyut alınır. Sistemin özelliği D3D12_SHADING_RATE_TIER_NOT_SUPPORTEDise, döndürülen kutucuk boyutu 0 olur.