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.
Köşe gölgelendiricileri ve piksel gölgelendiricileri önceki gölgelendirici sürümlerinden önemli ölçüde basitleştirilmiştir. Donanımda gölgelendiriciler uyguluyorsanız, vs_3_0 veya ps_3_0 başka gölgelendirici sürümleriyle birlikte kullanamazsınız ve sabit işlev işlem hattıyla gölgelendirici türünü kullanamazsınız. Bu değişiklikler sürücüleri ve çalışma zamanını basitleştirmeyi mümkün hale getirir. Tek istisna, yalnızca yazılım vs_3_0 gölgelendiricilerin herhangi bir piksel gölgelendirici sürümüyle kullanılabilmesidir. Ayrıca, önceki piksel gölgelendirici sürümüne sahip yalnızca yazılım vs_3_0 gölgelendirici kullanıyorsanız, köşe gölgelendiricisi yalnızca esnek köşe biçimi (FVF) kodlarıyla uyumlu çıkış semantiği kullanabilir.
Köşe gölgelendiricisi çıkışlarında kullanılan semantik, piksel gölgelendiricisi girişlerinde kullanılmalıdır. Semantik, köşe gölgelendiricisi çıkışlarını, köşe bildiriminin köşe gölgelendiricisi giriş yazmaçlarına ve önceki gölgelendirici modellerine eşlenmesine benzer şekilde piksel gölgelendiricisi girişleriyle eşlemek için kullanılır. Bkz. Vs 3.0 ve ps 3.0 Shader'larda Anlam Eşleştirme.
Bu yeni düzende ek doku koordinatları olasılığını kapsayacak şekilde ek sarma modu işleme durumları eklenmiştir. D3DDECLUSAGE_TEXCOORD ve kullanım dizini 0 ile 15 arasında olan öznitelikler, karşılık gelen D3DRS_WRAP* ayarlandığında sarmalama modunda ilişkilendirilir.
- Köşe Gölgelendiricisi Model 3 Özellikleri
- Piksel Gölgelendiricisi Model 3 Özellikleri
- vs_3_0 ve ps_3_0 Gölgelendiriciler Semantiği Eşleştir
- Sis, Derinlik ve Gölgelendirme Modu Değişiklikleri
- Kayan Nokta ve Tamsayı Dönüştürmeleri
- Tam veya Kısmi Duyarlık Belirtme
- Yazılım Köşesi ve Piksel Gölgelendiricileri
Köşe Gölgelendiricisi Model 3 Özellikleri
Köşe gölgelendiricisi çıkış yazmaç türleri on iki yazmaç olarak daraltılmıştır (bkz. Çıkış Yazmaçları). Kullanılan her yazmacın dcl yönergesi ve semantik (örneğin, dcl_color0 o0.xyzw) kullanılarak bildirilmesi gerekir.
3_0 köşe gölgelendiricisi modeli (vs_3_0), daha güçlü yazmaç dizini oluşturma, basitleştirilmiş çıkış yazmaçları kümesi, köşe gölgelendiricisinde doku örnekleme özelliği ve gölgelendirici girişlerinin başlatılma hızını denetleme özelliği ile vs_2_0 özelliklerini genişletir.
Herhangi Bir Kaydı Dizine Alma
Tüm yazmaçlar( Giriş Yazmaç ve Çıkış Yazmaçları) Döngü Sayacı Yazmaç kullanılarak dizinlenebilir (önceki sürümlerde yalnızca sabit yazmaçlar dizine eklenebilir.)
Dizin oluşturmadan önce giriş ve çıkış yazmaçlarını bildirmeniz gerekir. Ancak, konum veya nokta boyutu semantiği ile bildirilmiş herhangi bir çıkış kaydını dizine ekemezsiniz. Aslında dizinleme kullanılıyorsa sırasıyla o0 ve o1 yazmaçlarında konum ve psize semantiği bildirilmelidir.
Yalnızca sürekli bir kayıt aralığını dizine almak için izin verilir; diğer bir ifadeyle, bildirilmemiş kayıtlarda dizine alamazsınız. Bu kısıtlama uygun olmasa da donanım iyileştirmesi yapılmasına izin verir. Bitişik olmayan yazmaçlar arasında dizin oluşturma girişimi tanımlanmamış sonuçlar doğuracaktır. Gölgelendirici doğrulaması bu kısıtlamayı zorunlu kılmaz.
Çıkış Yazmaçlarını Basitleştirme
Tüm çeşitli çıkış yazmaçları on iki çıkış yazmaç içine daraltılmıştır: konum için 1, renk için 2, doku için 8 ve sis veya nokta boyutu için 1. Bu yazmaçlar, piksel gölgelendiricisi için içerdikleri tüm verileri ilişkilendirmek için kullanılacaktır. Çıkış yazmaç bildirimleri gereklidir ve her yazmacın semantiği atanır.
Yazmaçlar aşağıdaki gibi ayrılabilir:
- En az bir yazmaç dört bileşenli konum yazmaç olarak bildirilmelidir. Bu, gerekli olan tek köşe gölgelendiricisi yazmacıdır.
- Gölgelendirici tarafından kullanılan ilk on kayıt en fazla dört bileşen (xyzw) kullanabilir.
- Son (veya onikinci) yazmaç yalnızca skaler (nokta boyutu gibi) içerebilir.
Yazmaçların listesi için bkz. Yazmaçlar - vs_3_0.
Köşe Gölgelendiricisinde Doku Örneği
Köşe gölgelendiricisi 3_0, texldl - vskullanarak köşe gölgelendiricisinde doku aramayı destekler.
Piksel Gölgelendiricisi Model 3 Özellikleri
Piksel gölgelendiricisi rengi ve doku yazmaçları on giriş yazmacına daraltılmıştır (bkz. Giriş Yazmaç Türleri). Yüz Tanıma Kaydı bir kayan nokta skaler yazmaçtır. Yalnızca bu kaydın işareti geçerlidir. İşaret negatifse ilkel bir arka yüzdür. Bu, örneğin iki taraflı aydınlatma elde etmek için bir piksel gölgelendirici içinde kullanılabilir. Konum Kaydı geçerli (x,y) piksellere başvurur.
Gölgelendirici sabiti yazmaçları şu şekilde ayarlanabilir:
- SetPixelShaderConstantB
- SetPixelShaderConstantI
- SetPixelShaderConstantF
vs_3_0 ve ps_3_0 Gölgelendiricilerde Semantiği Eşleştir
vs_3_0 ve ps_3_0 ile anlamsal kullanımda bazı kısıtlamalar vardır. Genel olarak, gölgelendirici çıkışında kullanılan semantikle eşleşen bir gölgelendirici girişi için semantik kullanırken dikkatli olmanız gerekir.
Örneğin, bu piksel gölgelendiricisi birden çok adı tek bir kayıtta paketler:
ps_3_0
dcl_texcoord0 v0.x
dcl_texcoord1 v0.yz // Valid to pack multiple names into one register
dcl_texcoord2_centroid v1.w
...
Her yazmacın farklı bir semantiği vardır. Yazma maskesinin kullanılması nedeniyle v0.x ve v0.yz'yi farklı (birden çok) semantikle adlandırabileceğinize de dikkat edin.
Piksel gölgelendiricisi göz önünde bulundurulduğunda, aşağıdaki vs_3_0 gölgelendirici onunla eşleştirilemez:
vs_3_0
...
dcl_texcoord0 o5.x
dcl_texcoord1 o6.yzw
...
Bu iki gölgelendirici, D3DDECLUSAGE_TEXCOORD0 ve D3DDECLUSAGE_TEXCOORD1 semantiğini kullanmalarıyla çakışıyor.
Anlamsal çakışmayı önlemek için köşe gölgelendiricisini aşağıdaki gibi yeniden yazın:
vs_3_0
...
dcl_texcoord2 o3
dcl_texcoord3 o9
...
Benzer şekilde, piksel gölgelendiricisindeki (piksel gölgelendiricisinde v0 ve v1) farklı giriş kayıtlarında bildirilen bir anlamsal ad, bu köşe gölgelendiricisindeki tek bir çıkış yazmacında kullanılamaz. Örneğin, hem piksel gölgelendiricisi giriş yazmaçları (v0, v1) hem de köşe gölgelendiricisi çıkış yazmacı o3 için D3DDECLUSAGE_TEXCOORD1 kullanıldığından bu köşe gölgelendiricisi piksel gölgelendiricisiyle eşleştirilemez.
vs_3_0
...
dcl_texcoord0 o3.x
dcl_texcoord1 o3.yz
dcl_texcoord2 o3.w // BAD! Would be valid if this were not o3
dcl_texcoord3 o9 ...
Öte yandan, bu köşe gölgelendiricisi piksel gölgelendiricisi ile eşleştirilemez çünkü belirli bir semantiği olan bir parametrenin çıkış maskesi piksel gölgelendiricisi tarafından istenen verileri sağlamaz:
vs_3_0
...
dcl_texcoord0 o5.x
dcl_texcoord1 o5.yzw
dcl_texcoord2 o7.yz // BAD! Would be valid if w were included
dcl_texcoord3 o9
...
Bu köşe gölgelendiricisi, piksel gölgelendiricisi tarafından istenen anlam adlarından birini içeren bir çıkış sağlamaz, bu nedenle gölgelendirici eşleştirmesi geçersiz:
vs_3_0
...
dcl_texcoord0 o5.x
dcl_texcoord1 o5.yzw
dcl_texcoord3 o9
// The pixel shader wants texcoord2, with a w component,
// but it isn't output by this vertex shader at all!
...
Sis, Derinlik ve Gölgelendirme Modu Değişiklikleri
Kırpma ve üçgen tarama sırasında D3DRS_SHADEMODE düz gölgelendirme için ayarlandığında, D3DDECLUSAGE_COLOR olan öznitelikler düz gölgeli olarak ilişkilendirilir. Bir yazmacın herhangi bir bileşeni renk semantiği ile bildirilirse, ancak aynı yazmacın diğer bileşenlerine farklı semantikler verilirse, bu kayıttaki bileşenler üzerinde renk semantiği olmadan düz gölgeleme ilişkilendirmesi (doğrusal ve düz) tanımsız hale gelir.
Sis işleme isteniyorsa vs_3_0 ve ps_3_0 gölgelendiriciler sis uygulamalıdır. Gölgelendiricilerin dışında sis hesaplaması yapılmaz. vs_3_0'de sis yazmacı yoktur ve ek semantik D3DDECLUSAGE_FOG (köşe başına hesaplanan sis karışımı faktörü için) ve D3DDECLUSAGE_DEPTH (sis karışımı faktörünü hesaplamak için piksel gölgelendiricisine derinlik değeri geçirmek için) eklenmiştir.
Doku aşaması durumu D3DTSS_TEXCOORDINDEX, piksel gölgelendiricisi 3.0 kullanılırken yoksayılır.
Bu değişikliklere uyum sağlamak için aşağıdaki değerler eklenmiştir:
// Fog and Depth usages
D3DDECLUSAGE_FOG
D3DDECLUSAGE_DEPTH
// Additional wrap states for vs_3_0 attributes with D3DDECLUSAGE_TEXCOORD
D3DRS_WRAP8
D3DRS_WRAP9
D3DRS_WRAP10
D3DRS_WRAP11
D3DRS_WRAP12
D3DRS_WRAP13
D3DRS_WRAP14
D3DRS_WRAP15
Kayan Nokta ve Tamsayı Dönüştürmeleri
Kayan nokta matematiği, işlem hattının farklı bölümlerinde farklı duyarlık ve aralıklarda (16 bit, 24 bit ve 32 bit) gerçekleşir. İşlem hattının dinamik aralığından büyük bir değer (örneğin, 32 bit kayan doku eşlemesi, ps_2_0'da 24 bit kayan işlem hattına örneklenmiştir) tanımsız bir sonuç oluşturur. Tahmin edilebilir davranış için, böyle bir değeri dinamik aralık üst sınırına bağlamanız gerekir.
Kayan nokta değerinden tamsayıya dönüştürme aşağıdakiler gibi çeşitli yerlerde gerçekleşir:
- mova - yönergesi karşılaştırması ile karşılaşılırken.
- Doku adresleme sırasında.
- Kayan olmayan bir nokta işleme hedefine yazarken.
Tam veya Kısmi Duyarlık Belirtme
Hem ps_3_0 hem de ps_2_x iki duyarlık düzeyi için destek sağlar:
ps_3_0 | ps_2_0 | Kesinlik | Değer |
---|---|---|---|
x | Dolu | fp32 veya üzeri | |
x | Kısmi duyarlık | fp16=s10e5 | |
x | x | Dolu | fp24=s16e7 veya üzeri |
x | x | Kısmi duyarlık | fp16=s10e5 |
ps_3_0, ps_2_0'dan daha fazla duyarlığı destekler. Varsayılan olarak, tüm işlemler tam duyarlık düzeyinde gerçekleşir.
Kısmi duyarlık (bkz. Pixel Shader Register Modifiers) gölgelendirici koduna _pp değiştiricisi eklenerek (temel alınan uygulamanın desteklemesi koşuluyla) istenir. Uygulamalar, değiştiriciyi yok saymak ve etkilenen işlemleri tam duyarlıkla gerçekleştirmek için her zaman ücretsizdir.
_pp değiştiricisi iki bağlamda oluşabilir:
- Kısmi duyarlıklı doku koordinatlarını piksel gölgelendiricisine geçirmek için doku koordinat bildiriminde. Bu, doku renk verilerini piksel gölgelendiricisine geçirirken kullanılabilir ve bu da bazı uygulamalarda tam duyarlıktan daha hızlı olabilir.
- Doku yükleme yönergeleri de dahil olmak üzere kısmi duyarlık kullanımını istemeye yönelik tüm yönergelerde. Bu, uygulamanın yönergeyi kısmi duyarlıkla yürütmesine ve kısmi duyarlık sonucu depolamasına izin verildiğini gösterir. Açık değiştirici olmadığında yönergenin tam duyarlıkta gerçekleştirilmesi gerekir (giriş işlenenlerinin duyarlığından bağımsız olarak).
Bir uygulama, performans için duyarlıktan ödün vermeyi kasıtlı olarak seçebilir. Kısmi duyarlık işleme için doğal adaylar olan çeşitli gölgelendirici giriş verileri vardır:
- Renk yineleyicileri kısmi duyarlık değerleriyle iyi temsil edilir.
- Çoğu biçimdeki doku değerleri, kısmi duyarlık değerleriyle doğru bir şekilde temsil edilebilir (32 bit, kayan nokta biçimli dokulardan örneklenen değerler belirgin bir istisnadır).
- Sabitler, gölgelendiriciye uygun şekilde kısmi duyarlıklı gösterimle temsil edilebilir.
Tüm bu durumlarda geliştirici, hiçbir giriş veri duyarlığı kaybı olmadığını bilerek verileri işlemek için kısmi duyarlık belirtmeyi seçebilir. Bazı durumlarda, bir gölgelendirici, giriş ve son çıkış değerlerinin kısmi duyarlığı fazla olmadığında bile bir hesaplamanın iç adımlarının tam duyarlıkta gerçekleştirilmesini gerektirebilir.
Yazılım Köşesi ve Piksel Gölgelendiricileri
Sürüm 2_0 gölgelendiricilerinin ve üzerinin yazılım uygulamaları (çalışma zamanı ve köşe gölgelendiricileri için başvuru ve piksel gölgelendiricileri için başvuru) bazı doğrulamayı gevşetti. Bu, hata ayıklama ve prototip oluşturma amacıyla kullanışlıdır. Uygulama, çalışma zamanına/assembler'a, derleyicideki _sw bayrağını kullanarak (örneğin, vs_2_sw) doğrulamanın bir kısmının gevşetilmesi gerektiğini belirtir. Yazılım gölgelendiricisi donanımla çalışmaz.
vs_2_sw, maksimum vs_2_x sınırına kadar rahatlamadır; benzer şekilde, ps_2_sw ps_2_x maksimum sınırı için bir rahatlamadır. Özellikle, aşağıdaki doğrulamalar gevşetilir:
Gölgelendirici modeli | Kaynak | Sınırlamak |
---|---|---|
vs_2_sw, vs_3_sw, ps_2_sw ps_3_sw | Yönerge Sayıları | Sınırsız |
vs_2_sw, vs_3_sw, ps_2_sw ps_3_sw | Float Sabit Yazmaçları | 8192 |
vs_2_sw, vs_3_sw, ps_2_sw ps_3_sw | Tamsayı Sabit Yazmaçları | 2048 |
vs_2_sw, vs_3_sw, ps_2_sw ps_3_sw | Boole Sabit Yazmaçları | 2048 |
ps_2_sw | Bağımlı okuma derinliği | Sınırsız |
vs_2_sw | akış denetimi yönergeleri ve etiketleri | Sınırsız |
vs_2_sw, vs_3_sw, ps_2_sw ps_3_sw | Döngü başlangıç/adım/sayımlar | Yineleme ve döngü yönergeleri için yineleme başlangıç ve yineleme adımı boyutu 32 bit imzalı tamsayılardır. Sayı MAX_INT/64'e kadar olabilir. |
vs_2_sw, vs_3_sw, ps_2_sw ps_3_sw | Bağlantı noktası sınırları | Tüm kayıt dosyaları için bağlantı noktası sınırları gevşetilir. |
vs_3_sw | ara değer oluşturucu sayısı | vs_3_sw 16 çıkış kaydı. |
ps_3_sw | ara değer oluşturucu sayısı | ps_3_sw için 14(16-2) giriş yazmaçları. |
İlgili konular