RWTexture2D
讀取/寫入資源。
方法 | Description |
---|---|
GetDimensions | 取得資源維度。 |
載入 | 讀取紋理資料。 |
Operator[] | 取得資源變數。 |
您可以在 RWTexture2D 物件前面加上 全域共同儲存類別。 此儲存體類別會導致記憶體屏障和同步處理跨整個 GPU 排清資料,讓其他群組可以看到寫入。 如果沒有此規範,記憶體屏障或同步處理只會排清目前群組內的未排序存取檢視 (UAV) 。
RWTexture2D 物件需要 物件宣告語句中的專案類型。 例如,下列宣告不正確:
// The following declaration is incorrectly coded.
RWTexture2D myTexture;
下列宣告正確:
// The following declaration is correctly coded.
RWTexture2D<float> tex;
因為 RWTexture2D 物件是 UAV 類型物件,所以其屬性與著色器資源檢視不同, (SRV) 類型物件,例如 Texture2D 物件。 例如,您可以讀取和寫入 RWTexture2D 物件,但只能讀取 Texture2D 物件。
RWTexture2D 物件無法使用 Texture2D 物件的方法,例如 Sample。 不過,因為您可以將多個檢視類型建立至相同的資源,所以您可以將多個紋理類型宣告為多個著色器中的單一紋理。 例如,下列程式碼片段示範如何在計算著色器中宣告和使用 RWTexture2D 物件做為 紋理 ,然後在圖元著色器中宣告並使用 Texture2D 物件做為 材質 。
注意
當您對相同的資源建立多個檢視類型時,執行時間會強制執行特定使用模式。 例如,執行時間不允許您同時擁有相同資源之資源的 UAV 對應和 SRV 對應。
下列程式碼適用于計算著色器:
RWTexture2D<float> tex;
[numthreads(groupDim_x, groupDim_y, 1)]
void main(
uint3 groupId : SV_GroupID,
uint3 groupThreadId : SV_GroupThreadID,
uint3 dispatchThreadId : SV_DispatchThreadID,
uint groupIndex : SV_GroupIndex)
{
tex [dispatchThreadId.xy] = <something>;
}
下列程式碼適用于圖元著色器:
struct PixelShaderInput
{
float4 pos : SV_POSITION;
float2 tex : TEXTURE;
};
Texture2D<float> tex;
float4 main(PixelShaderInput input) : SV_TARGET
{
return tex.Sample(TextureSampler, input.tex);
}
最小著色器模型
下列著色器模型中支援此物件。
著色器模型 | 支援 |
---|---|
著色器模型 5 和更高的著色器模型 | 是 |
下列著色器類型支援此物件:
頂點 | 船體 | 網域 | 幾何形狀 | 像素 | 計算 |
---|---|---|---|---|---|
x | x |
另請參閱