Aracılığıyla paylaş


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.

Tablosu, M S A A düzeyleri için kaba piksel boyutunu gösterir.

Ö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.

Tablosu, Katman 1 ve Katman 2'de kullanılabilen özellikleri gösterir. VRS katmanlarını

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 trueolarak ayarlandıysa, köşe başına hızı birden fazla görünüm penceresiyle kullanılabilir. Ayrıca, bu durumda bu oran SV_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

  1. İşlem gölgelendiricisi kullanarak verileri yazma; ekran alanı görüntüsü bir UAV olarak bağlıdır veya
  2. 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 nullolarak 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_ShadingRateadlı ayarlanabilir bir anlamsaldır. SV_ShadingRate, HLSL Gölgelendirici Modeli 6.4'nin bir parçası olarak mevcuttur.

VS veya GS SV_ShadingRateayarlarsa 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.

Diyagramda A etiketli, Birleştiricide uygulanan B etiketli köşe gölgelendirme hızına sahip, B etiketli bir işlem hattı durumu ve bir Birleştiricide uygulanan B etiketli Görüntü tabanlı gölgelendirme hızı gösterilir.

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 falseise D3D12_AXIS_SHADING_RATE_2X (1 değeridir).
  • additionalShadingRatesSupported trueise 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_ShadingRateps-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_SampleIndexgiriş 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 trueise, 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, EvaluateAttributeSnappedofset 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 EvaluateAttributeSnappedofset 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.

Tablo kaba piksel boyutunu, ince piksel sayısını ve M S A A düzeylerini gösterir.

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.

Tablosu kaba piksel boyutunu, kaba piksel diyagramını ve 1 x M S A kapsama bitlerini gösterir. 1x 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.

Tablosu kaba piksel boyutunu, kaba piksel diyagramını ve 2 x M S A kapsama bitlerini gösterir. 2x 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.

Tablosu kaba piksel boyutunu, kaba piksel diyagramını ve 4 x M S A A kapsam bitlerini gösterir. 4x 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.hiç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_ShaderRatedağı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.