Aracılığıyla paylaş


Anlambilim

Anlamsal, bir parametrenin amaçlanan kullanımı hakkında bilgi aktaran bir gölgelendirici girişine veya çıkışına iliştirilmiş bir dizedir. Semantik, gölgelendirici aşamaları arasında geçirilen tüm değişkenler için gereklidir. Gölgelendirici değişkenine semantik ekleme söz dizimi burada gösterilmiştir (Değişken Sözdizimi (DirectX HLSL)).

Genel olarak, işlem hattı aşamaları arasında geçirilen veriler tamamen geneldir ve sistem tarafından benzersiz olarak yorumlanmaz; özel bir anlamı olmayan rastgele semantiklere izin verilir. Bu özel semantiği içeren parametreler (Direct3D 10 ve sonraki sürümlerde) System-Value Semantikolarak adlandırılır.

Direct3D 9 ve Direct3D 10 ve sonraki sürümlerde Desteklenen Anlam

Aşağıdaki semantik türleri hem Direct3D 9 hem de Direct3D 10 ve sonraki sürümlerde desteklenir.

Köşe Gölgelendirici Semantiği

Bu semantiğin köşe gölgelendirici parametresine eklendiğinde anlamı vardır. Bu semantikler hem Direct3D 9 hem de Direct3D 10 ve sonraki sürümlerde desteklenir.

Girdi Açıklama Tür
BINORMAL[n] Binormal float4
BLENDINDICES[n] Blend dizinleri uint
BLENDWEIGHT[n] Blend ağırlıkları yüzmek
COLOR[n] Yayma ve belirtik renk float4
NORMAL[n] Normal vektör float4
KONUM[n] Nesne alanında köşe konumu. float4
POSITIONT Dönüştürülmüş köşe konumu. float4
PSIZE[n] Nokta boyutu yüzmek
TANJANT[n] Teğet float4
TEXCOORD[n] Doku koordinatları float4
Çıktı Açıklama Tür
COLOR[n] Yayma veya belirtik renk float4
SİS Köşe sisi yüzmek
KONUM[n] Bir köşenin homojen uzayda konumu. (x,y,z) w'ye bölerek ekran boşluğundaki işlem konumu. Her köşe gölgelendiricisi bu semantik ile bir parametre yazmalıdır. NOT: Bu semantik Direct3D 9'da kullanılabilir. Direct3D 10 ve üzeri için bunun yerine SV_Position kullanın. float4
PSIZE Nokta boyutu yüzmek
TESSFACTOR[n] Tessellation faktörü yüzmek

n, 0 ile desteklenen kaynak sayısı arasında isteğe bağlı bir tamsayıdır. Örneğin, POSITION0, TEXCOORD1 vb.

Piksel Gölgelendirici Semantiği

Bu semantiğin bir piksel gölgelendiricisi giriş parametresine eklendiğinde anlamı vardır. Bu semantikler hem Direct3D 9 hem de Direct3D 10 ve sonraki sürümlerde desteklenir.

Girdi Açıklama Tür
COLOR[n] Yayma veya belirtik renk. float4
TEXCOORD[n] Doku koordinatları float4
VFACE Arkaya dönük bir temel öğeyi gösteren kayan nokta skaler. Negatif bir değer geriye doğru, pozitif bir değer ise kamerayla yüz yüze gelir.

Not:
Bu semantik, Direct3D 9 Shader Model 3.0içinde kullanılabilir. Direct3D 10 ve üzeri için bunun yerine SV_IsFrontFace kullanın.


yüzmek
VPOS Ekran alanında piksel konumu (x,y). Direct3D 9 gölgelendiricisini (bu semantiği kullanan) Direct3D 10 ve üzeri gölgelendiriciye dönüştürmek için bkz. Direct3D 9 VPOS ve Direct3D 10 SV_Position) float2
Çıktı Açıklama Tür
COLOR[n] Çıkış rengi float4
DERİn[n] Çıkış derinliği yüzmek

n, 0 ile desteklenen kaynak sayısı arasında isteğe bağlı bir tamsayıdır. Örneğin PSIZE0, COLOR1 vb.

COLOR semantiği yalnızca gölgelendirici uyumluluk modunda (yani, gölgelendirici D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY kullanılarak oluşturulduğunda) geçerlidir.

Yalnızca Direct3D 10 ve Daha Yeni sürümler için Desteklenen Anlam.

Aşağıdaki semantik türleri Direct3D 10 için yeni kullanıma sunulmuştur ve Direct3D 9'da kullanılamaz.

System-Value Semantiği

Sistem değeri semantiği Direct3D 10'da yenidir. Tüm sistem değerleri bir SV_ ön eki ile başlar; yaygın bir örnek, rasterleştirici aşaması tarafından yorumlanan SV_POSITION örneğidir. Sistem değerleri işlem hattının diğer bölümlerinde geçerlidir. Örneğin, SV_Position hem köşe gölgelendiricisine hem de çıkışa giriş olarak belirtilebilir. Piksel gölgelendiriciler yalnızca SV_Depth ve SV_Target sistem değeri semantiği ile parametrelere yazabilir.

Diğer sistem değerleri (SV_VertexID, SV_InstanceID, SV_IsFrontFace) yalnızca işlem hattındaki belirli değeri yorumlayabilen ilk etkin gölgelendiriciye girilebilir; bundan sonra gölgelendirici işlevinin değerleri sonraki aşamalara geçirmesi gerekir.

SV_PrimitiveID, bu kuralın yalnızca işlem hattındaki belirli bir değeri yorumlayabilen ilk etkin gölgelendiriciye girilebileceği bir özel durumdur; donanım, gövde gölgelendiricisi aşamasına, etki alanı gölgelendirici aşamasına ve bundan sonra ilk etkinleştirilen aşama olan geometri-gölgelendirici aşamasına veya piksel gölgelendirici aşamasına girişle aynı kimlik değerini sağlayabilir.

Döşeme etkinleştirildiyse gövde gölgelendiricisi aşaması ve etki alanı gölgelendiricisi aşaması vardır. Belirli bir düzeltme eki için aynı PrimitiveID, düzeltme ekinin gövde gölgelendiricisi çağrısına ve tüm mozaik etki alanı gölgelendirici çağrılarına uygulanır. Aynı PrimitiveID de sonraki etkin aşamaya yayılır; geometri-gölgelendirici aşaması veya etkinse piksel gölgelendiricisi aşaması.

Geometri gölgelendiricisi SV_PrimitiveID girdiyse ve çağrı başına sıfır veya bir veya daha fazla temel öğe oluşturabildiğinden, sonraki bir piksel gölgelendiricisi SV_PrimtiveID her çıktı temel öğesi için kendi SV_PrimitiveID değeri seçimini programlamalıdır.

Başka bir örnek olarak, bir köşe birden çok temel öğeye üye olabileceğinden SV_PrimitiveID köşe gölgelendiricisi aşaması tarafından yorumlanamaz.

Bu semantikler Direct3D 10'a eklenmiştir; Direct3D 9'da kullanılamaz.

Tarama aşaması için sistem değeri semantiği.

System-Value Semantik Açıklama Tür
SV_ClipDistance[n] Uzaklık verilerini kırp. SV_ClipDistance değerlerin her birinin bir düzleme float32 imzalı uzaklığı olduğu varsayılır. İlkel kurulum yalnızca ilişkilendirilmiş düzlem uzaklıklarının >= 0 olduğu piksellerde rasterleştirmeyi çağırır. Bir veya daha fazla köşe öğesinin birden çok bileşeni SV_ClipDistance olarak bildirilerek, birden çok klip düzlemi aynı anda uygulanabilir. Birleştirilmiş klip ve cull uzaklık değerleri, en çok D3D#_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT yazmaçlarındaki en fazla D3D#_CLIP_OR_CULL_DISTANCE_COUNT bileşenidir. Değeri yazabilen ancak giriş olarak alabilen köşe gölgelendiricisi dışında, okunması veya yazılması gereken tüm gölgelendiriciler tarafından kullanılabilir.
clipplanes özniteliği SV_ClipDistance gibi çalışır ancak tüm donanım özellik düzeyi 9_x ve üzeri üzerinde çalışır. Daha fazla bilgi için bkz. Özellik düzeyi 9 donanımkullanıcı klip düzlemleri.
yüzmek
SV_CullDistance[n] Cull uzaklık verileri. Köşe Öğelerinin bileşenlerine bu etiket verildiğinde, bu değerlerin her birinin bir düzleme float32 işaretli uzaklığı olduğu varsayılır. İlkellerdeki tüm köşeler için düzlem uzaklıkları 0 < ise ilkeller tamamen atılır. Bir veya daha fazla köşe öğesinin birden çok bileşeni SV_CullDistance olarak bildirilerek, birden çok cull düzlemi aynı anda kullanılabilir. Birleştirilmiş klip ve cull uzaklık değerleri, en çok D3D#_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT yazmaçlarındaki en fazla D3D#_CLIP_OR_CULL_DISTANCE_COUNT bileşenidir. Değeri yazabilen ancak giriş olarak alabilen köşe gölgelendiricisi dışında, okunması veya yazılması gereken tüm gölgelendiriciler tarafından kullanılabilir.
yüzmek
SV_Coverage Bir piksel gölgelendiricisinin girişinde, çıkışında veya her ikisinde belirtilebilen bir maske.
Piksel gölgelendiricisinde SV_Coverage için OUTPUT, ps_4_1 veya üzeri sürümlerde desteklenir.
Piksel gölgelendiricisinde SV_Coverage için INPUT için ps_5_0 veya üzeri gerekir.
uint
SV_Depth Derinlik arabellek verileri. Piksel gölgelendiricisi tarafından yazılabilir. yüzmek
SV_DepthGreaterEqual Piksel gölgelendiricisinde, rasterleştirici tarafından belirlenen değerden büyük veya buna eşit olduğu sürece çıkış derinliğine izin verir. Z'nin erken aşamalarını devre dışı bırakmadan derinliğin ayarlanmasını sağlar. yüzmek
SV_DepthLessEqual Piksel gölgelendiricisinde, rasterleştirici tarafından belirlenen değerden küçük veya buna eşit olduğu sürece derinliğin çıkışına izin verir. Z'nin erken aşamalarını devre dışı bırakmadan derinliğin ayarlanmasını sağlar. yüzmek
SV_DispatchThreadID Grubun boyutuna göre Dispatch çağrısı içindeki genel iş parçacığı uzaklığını tanımlar. İşlem gölgelendiricisine giriş olarak kullanılabilir. (salt okunur) uint3
SV_DomainLocation Değerlendirilen geçerli etki alanı noktasının gövdesindeki konumu tanımlar. Etki alanı gölgelendiricisine giriş olarak kullanılabilir. (salt okunur) float2|3
SV_GroupID Gönderme çağrısı içindeki grup uzaklığını, gönderme çağrısının boyutuna göre tanımlar. İşlem gölgelendiricisinde giriş olarak kullanılabilir. (salt okunur) uint3
SV_GroupIndex Belirli bir grup içindeki belirli bir iş parçacığı için düzleştirilmiş bir dizin sağlar. İşlem gölgelendiricisinde giriş olarak kullanılabilir. (salt okunur) uint
SV_GroupThreadID Grup içindeki iş parçacığı uzaklığını, grubun boyutuna göre tanımlar. İşlem gölgelendiricisinde giriş olarak kullanılabilir. (salt okunur) uint3
SV_GSInstanceID Geometri gölgelendiricisinin örneğini tanımlar. Geometri gölgelendiricisine giriş olarak kullanılabilir. Aynı geometri ilkel üzerinde 32 kata kadar geometri gölgelendiricisi çağrılabildiği için örnek gereklidir. uint
SV_InnerCoverage Hafife alınan muhafazakar rasterleştirme bilgilerini temsil eder (örneğin, bir pikselin garanti edilip edilmediği-to-be-tamamen kapsanır). Piksel gölgelendiricisi tarafından okunabilir veya yazılabilir.
SV_InsideTessFactor Yama yüzeyi içindeki döşeme miktarını tanımlar. Yazma için gövde gölgelendiricisinde ve okuma için etki alanı gölgelendiricisinde kullanılabilir. float|float[2]
SV_InstanceID Çalışma zamanı tarafından otomatik olarak oluşturulan örnek başına tanımlayıcı (bkz. System-Generated Değerleri Kullanma (Direct3D 10)). Tüm gölgelendiriciler tarafından kullanılabilir.
SV_IsFrontFace Bir üçgenin öne dönük olup olmadığını belirtir. IsFrontFace, satırlar ve noktalar için true değerine sahiptir. Özel durum, Üçgenlerden (tel çerçeve modu) çizilen çizgilerdir. Bu çizgi, IsFrontFace'i üçgeni düz modda rasterleştirmeyle aynı şekilde ayarlar. 'a geometri gölgelendiricisi tarafından yazılabilir ve piksel gölgelendiricisi tarafından okunabilir. Bool
SV_OutputControlPointID Gövde gölgelendiricisinin ana giriş noktasının çağrılmasıyla üzerinde çalıştırılan denetim noktası kimliğinin dizinini tanımlar. Yalnızca gövde gölgelendiricisi tarafından okunabilir. uint
SV_Position SV_Position bir gölgelendiriciye giriş için bildirildiğinde, belirtilen iki ilişkilendirme modundan birine sahip olabilir: linearNoPerspective veya linearNoPerspectiveCentroid, burada ikincisi çok örnekli antialiasing sırasında centroid-snapped xyzw değerlerinin sağlanmasına neden olur. Gölgelendiricide kullanıldığında SV_Position piksel konumunu açıklar. 0,5 uzaklığıyla piksel merkezini almak için tüm gölgelendiricilerde kullanılabilir. float4
SV_PrimitiveID Çalışma zamanı tarafından otomatik olarak oluşturulan ilkel tanımlayıcı başına (bkz. System-Generated Değerleri Kullanma (Direct3D 10)). 'a geometri veya piksel gölgelendiricileri tarafından yazılabilir ve geometri, piksel, gövde veya etki alanı gölgelendiricileri tarafından okunabilir. uint
SV_RenderTargetArrayIndex İşleme hedefi dizi dizini. Geometri gölgelendiricisi çıkışına uygulanır ve ilkel öğeye piksel gölgelendiricisi tarafından çizilecek işleme hedef dizi dilimini gösterir. SV_RenderTargetArrayIndex yalnızca işleme hedefi bir dizi kaynağıysa geçerlidir. Bu semantik yalnızca ilkel öğeler için geçerlidir; bir ilkelde birden fazla köşe varsa, baştaki köşedeki değer kullanılır. Bu değer, okuma/yazma amacıyla derinlik/kalıp görünümünün hangi dizi diliminin kullanıldığını da gösterir.
Geometri gölgelendiricisinden yazılabilir ve piksel gölgelendiricisi tarafından okunabilir.
D3D11_FEATURE_DATA_D3D11_OPTIONS3::VPAndRTArrayIndexFromAnyShaderFeedingRasterizertrueise, rasterleştiriciyi besleyen herhangi bir gölgelendiriciye SV_RenderTargetArrayIndex uygulanır.
uint
SV_SampleIndex Örnek sıklık dizini verileri. Yalnızca piksel gölgelendiricisi tarafından okunabilir veya yazılabilir. uint
SV_StencilRef Geçerli piksel gölgelendiricisi kalıbı başvuru değerini temsil eder. Yalnızca piksel gölgelendiricisi tarafından yazılabilir. uint
SV_Target[n], burada 0 <= n <= 7 İşleme hedefinde depolanacak çıkış değeri. Dizin, 8 büyük olasılıkla ilişkili işleme hedeflerinden hangisinin yazıldığı gösterir. Değer tüm gölgelendiriciler tarafından kullanılabilir. float[2|3|4]
SV_TessFactor Bir düzeltme ekinin her kenarındaki döşeme miktarını tanımlar. Gövde gölgelendiricisinde yazı yazmak ve etki alanı gölgelendiricisinde okumak için kullanılabilir. float[2|3|4]
SV_VertexID Çalışma zamanı tarafından otomatik olarak oluşturulan köşe başına tanımlayıcı (bkz. System-Generated Değerleri Kullanma (Direct3D 10)). Yalnızca köşe gölgelendiricisine giriş olarak kullanılabilir. uint
SV_ViewportArrayIndex Dizi dizinini görüntüleme. Geometri gölgelendiricisi çıkışına uygulanır ve şu anda yazılmakta olan temel öğe için hangi görünüm penceresinin kullanılacağını belirtir. Piksel gölgelendiricisi tarafından okunabilir. İlkel dönüştürülecek ve rasterleştiriciye geçirilmeden önce dizin tarafından belirtilen görünüm penceresine göre kırpılır. Bu semantik yalnızca ilkel öğeler için geçerlidir; bir ilkelde birden fazla köşe varsa, baştaki köşedeki değer kullanılır.
D3D11_FEATURE_DATA_D3D11_OPTIONS3::VPAndRTArrayIndexFromAnyShaderFeedingRasterizertrueise, rasterleştiriciyi besleyen herhangi bir gölgelendiriciye SV_ViewportArrayIndex uygulanır.
uint
SV_ShadingRate gölgelendirme hızıdeğerleri aracılığıyla, Değişken Gölgelendirme Oranı Katman 2 veya daha yüksek cihazlar için bir piksel gölgelendirici çağrısı tarafından yazılan piksel sayısını tanımlar. Piksel gölgelendiricisinden okunabilir. Köşe veya geometri gölgelendiricisinden yazılabilir. uint

SV_Depth yazarken sınırlamalar:

  • Çok örnekli örnekleme (MultisampleEnable, D3D10_RASTERIZER_DESCiçinde TRUE ) ve derinlik değeri yazarken (piksel gölgelendiricisi kullanılarak), yazılan tek değer derinlik testinde de kullanılır; bu nedenle, çoklu örnekleme sırasında ilkel kenarları daha yüksek çözünürlükte işleme özelliği kaybolur.
  • Dinamik akış denetimi kullanılırken, derleme zamanında bazı yollarda SV_Depth yazan bir gölgelendiricinin her yürütmede SV_Depth yazacağının garanti edilip edilmeyeceğini belirlemek mümkün değildir. Bildirildiğinde SV_Depth yazılamaması tanımsız davranışla sonuçlanır (pikselin atılma işlemini içerebilir veya içermeyebilir).
  • +/-INF ve NaN gibi float32 değerleri SV_Depth yazılabilir.
  • İkili Kaynak Renk Harmanlama işlemi yapılırken SV_Depth yazma işlemi hala geçerlidir.

Direct3D 9'dan Direct3D 10 ve sonraki sürümlere geçiş

Kodu Direct3D 9'dan Direct3D 10 ve sonraki sürümlere geçirirken aşağıdaki sorunlar dikkate alınmalıdır:

Direct3D 9 Semantiğine Eşleme

Direct3D 10 ve üzeri semantiğin birkaçı doğrudan Direct3D 9 semantiğiyle eşler.

Direct3D 10 Semantik Direct3D 9 Eşdeğer Semantik
SV_Depth DERİNLİK
SV_Position KONUM
SV_Target RENK

[!] Direct3D 9 geliştiricilerine not: Direct3D 9 hedefleri için gölgelendirici semantiği geçerli Direct3D 9 semantiğiyle eşlenmelidir. Geriye dönük uyumluluk için FXC, POSITION0 (ve değişken adlarını) SV_Position olarak değerlendirir. FXC, COLOR'a SV_TARGET olarak davranır. DXC ve daha yeni derleyiciler POSITION[n] ve COLOR değerlerini kullanıcı tanımlı semantik olarak değerlendirir.

  • Direct3D 9 Semantik Eşlemesi
  • Direct3D 9 VPOS ve Direct3D 10 SV_Position
  • HLSL Kullanıcı klip düzlemleri

Direct3D 9 VPOS ve Direct3D 10 SV_Position

D3D10 semantik SV_Position, Direct3D 9 gölgelendirici modeli 3 VPOS semantiğine benzer işlevler sağlar. Örneğin, Direct3D 9'da ekran alanı koordinatları kullanılarak piksel gölgelendiricisi için aşağıdaki söz dizimi kullanılır:

float4 psMainD3D9( float4 screenSpace : VPOS ) : COLOR
{
    // code here 
}

VPOS, ekran alanı koordinatlarını belirtmek üzere gölgelendirici model 3 desteği için eklendi, çünkü POSITION semantiği nesne alanı koordinatlarına yönelikti.

Direct3D 10 ve sonraki sürümlerde SV_Position semantiği (piksel gölgelendiricisi bağlamında kullanıldığında) ekran alanı koordinatlarını (0,5'e göre uzaklık) belirtir. Bu nedenle, Direct3D 9 gölgelendiricisi kabaca aşağıdakine eşdeğer olacaktır (0,5 uzaklığı hesaplanmadan):

float4 psMainD3D10( float4 screenSpace : SV_Position ) : COLOR
{
    // code here
}

Direct3D 9'dan Direct3D 10 ve sonraki sürümlere geçiş yaparken, gölgelendiricilerinizi çevirirken bunun farkında olmanız gerekir.

HLSL'de kullanıcı kırpma düzlemleri

Windows 8'den başlayarak clipplanes işlev özniteliğini, gölgelendiricinizin özellik düzeyi 9_x yanı sıra özellik düzeyi 10 ve üzeri üzerinde çalışmasını sağlamak için SV_ClipDistance yerine HLSL işlev bildirimi kullanabilirsiniz. Daha fazla bilgi için bkz. Özellik düzeyi 9 donanımkullanıcı klip düzlemleri.