ps_1_1__ps_1_2__ps_1_3__ps_1_4暫存器

圖元著色器相依于暫存器以取得頂點資料、輸出圖元資料、在計算期間保留暫存結果,以及識別紋理取樣階段。 有數種類型的暫存器,每一種都有獨特的功能。 本節包含圖元著色器版本所實作之輸入和輸出暫存器的參考資訊1_X。

註冊保留資料以供圖元著色器使用。 下列各節會完整描述暫存器。

  • 暫存器類型描述四種可用的暫存器類型及其用途。
  • 閱讀埠限制詳述在單一指令中使用多個暫存器的限制。
  • 唯讀讀寫描述哪些暫存器可用於讀取、寫入或兩者。
  • 範圍詳細說明元件資料的範圍。

暫存器類型

名稱 類型 版本 1_1 版本 1_2 版本 1_3 版本 1_4
c# 常數暫存器 8 8 8 8
R# 暫存暫存器 2 2 2 6
t# 紋理暫存器 4 4 4 6
V# 色彩暫存器 2 2 2 第 2 階段 2

 

  • 常數暫存器包含常數資料。 您可以使用 SetPixelShaderConstantF 將資料載入常數暫存器,也可以使用 def - ps加以定義。 常數暫存器無法供紋理位址指示使用。 唯一的例外狀況是 texm3x3spec - ps 指令,它會使用常數暫存器來提供眼球光線向量。

  • 暫存暫存器可用來儲存中繼結果。 r0 也會作為圖元著色器輸出。 著色器結尾的 r0 值是著色器的圖元色彩。

    著色器驗證會在任何嘗試從先前指令未撰寫的暫存暫存器讀取的著色器上失敗 CreatePixelShaderD3DXAssembleShader 會失敗,假設驗證已啟用, (不使用D3DXSHADER_SKIPVALIDATION) 。

  • 紋理暫存器

    對於圖元著色器 1_1 到 1_3 版,紋理暫存器包含紋理資料或紋理座標。 紋理資料會在取樣紋理時載入紋理暫存器。 紋理取樣會使用紋理座標來查閱或取樣指定的 (u,v,w,q) 座標,同時考慮紋理階段狀態屬性。 紋理座標資料會從頂點紋理座標資料內插補點,並與特定紋理階段相關聯。 紋理階段編號與紋理座標宣告順序之間有預設的一對一關聯。 根據預設,頂點格式中定義的第一組紋理座標會與紋理階段 0 相關聯。

    針對這些圖元著色器版本,紋理暫存器的行為就像是算術指令使用時的暫時暫存器。

    針對圖元著色器 1_4 版,紋理暫存器 (t#) 包含唯讀紋理座標資料。 這表示紋理座標集和紋理階段編號彼此獨立。 紋理階段編號 (從中取樣紋理) 是由目的地暫存器編號 (r0 到 r5) 所決定。 針對材質指令,紋理座標集是由來源暫存器 (t0 到 t5) 所決定,因此紋理座標集可以對應到任何紋理階段。 此外,來源暫存器 (指定紋理座標) ,也可以是暫存暫存器 (r#) ,在此情況下,暫存暫存器的內容會當做紋理座標使用。

  • 色彩暫存器包含每個圖元的色彩值。 這些值是由頂點資料中擴散和反射色彩值的每圖元反復專案所取得。 針對圖元著色器 1_4 版著色器,色彩暫存器只能在第二個階段使用。

    如果陰影模式設定為D3DSHADE_FLAT,則會停用兩個頂點色彩 (擴散和反射) 的反復專案。 無論陰影模式為何,如果已啟用圖元水,管線仍會逐一查看水氣。 請記住,管線中稍後會套用水氣,而不是圖元陰影器。

    通常會使用頂點擴散色彩資料載入 v0 暫存器。 通常也會使用頂點反射色彩資料載入 v1 暫存器。

    輸入色彩資料值會限制 (飽和) 到範圍 0 到 1,因為這是圖元著色器中色彩暫存器的有效輸入範圍。

    圖元著色器具有色彩暫存器的唯讀存取權。 這些暫存器的內容是逐一查看的值,但反復專案的執行精確度可能遠低於紋理座標。

讀取埠限制

讀取埠限制會指定每個暫存器類型的不同暫存器數目,可在單一指令中當做來源暫存器使用。

名稱 類型 版本 1_1 版本 1_2 版本 1_3 版本 1_4
c# 常數暫存器 2 2 2 2
R# 暫存暫存器 2 2 2 3
t# 紋理暫存器 2 3 3 1
V# 色彩暫存器 2 2 2 第 2 階段 2

 

例如,幾乎所有版本的色彩暫存器都有兩個讀取埠限制。 這表示單一指令最多可以使用兩個不同的色彩暫存器, (v0 和 v1,例如) 做為來源暫存器。 此範例顯示相同指令中使用的兩個色彩暫存器:

mad r0, v1, c2, v0

唯讀、讀取/寫入

根據下表中的唯讀 (RO) 功能或讀取/寫入 (RW) 功能來識別暫存器類型。 唯讀暫存器只能當做指令中的來源暫存器使用;它們永遠不能當做目的地暫存器使用。

名稱 類型 版本 1_1 版本 1_2 版本 1_3 版本 1_4
名稱 類型 1_1 1_2 1_3 1_4
c# 常數暫存器 RO RO RO RO
R# 暫存暫存器 RW RW RW RW
t# 紋理暫存器 RW RW RW 請參閱下列附注
V# 色彩暫存器 RO RO RO RO

 

支援 RW 的暫存器可用來儲存中繼結果。 這包括某些著色器版本的暫存暫存器和紋理暫存器。

注意

  • 針對圖元著色器 1_4 版,紋理暫存器是用於紋理定址指令的 RO,而且紋理暫存器無法讀取或由算術指令寫入。 此外,由於紋理暫存器已變成紋理座標暫存器,因此具有 RO 存取權不是先前功能的回歸。

 

範圍

範圍是暫存器資料值上限和最小值。 範圍會根據暫存器的類型而有所不同。 您可以使用 GetDeviceCaps從裝置上限查詢部分暫存器的範圍。

名稱 類型 範圍 版本
c# 常數暫存器 -1 到 +1 所有版本
R# 暫存暫存器 - PixelShader1xMaxValue 至 + PixelShader1xMaxValue 所有版本
t# 紋理暫存器 - MaxTextureRepeat 至 + MaxTextureRepeat 所有版本
V# 色彩暫存器 0 到 1 所有版本

 

早期圖元著色器硬體代表使用固定點數的暫存器中的資料。 這會將數位小數部分的精確度限制為大約八位。 設計著色器時請記住這一點。

針對圖元著色器 1_1 到 1_3 版,MaxTextureRepeat 至少必須是一個。 針對 1_4,MaxTextureRepeat 至少必須是八個。

如需 PixelShader1xMaxValue 的詳細資訊,請參閱 D3DCAPS9

寄存 器