RWTexture2D

读/写资源。

方法 说明
GetDimensions 获取资源维度。
加载 读取纹理数据。
Operator[] 获取资源变量。

 

可以使用存储类 globallycoherent 为 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 对象作为计算着色器中的 tex ,然后将 Texture2D 对象声明和使用为像素着色器中的 tex

注意

在对同一资源创建多个视图类型时,运行时会强制实施某些使用模式。 例如,运行时不允许同时激活资源的 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 和更高级别的着色器模型

 

以下类型的着色器支持此对象:

顶点 外壳 Geometry 像素 计算
x x

 

另请参阅

着色器模型 5 对象