Share via


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

 

另請參閱

著色器模型 5 物件