昨日遭遇一个问题:尝试将某个纹理的资源视图绑定到计算着色器(CS)上,但始终无法绑定成功。经排查发现,该纹理的渲染目标视图已被绑定到渲染目标上。
在 Direct3D 11 中,一块纹理资源(ID3D11Texture*
)通过 视图(View)对象 绑定到图形管线的不同位置。以下是所有纹理可能被绑定的“地方”或“阶段”:
✅ 一、纹理资源可以绑定的位置汇总
绑定位置 / 管线阶段 | 使用的视图类型 | 说明 |
---|---|---|
✅ 着色器资源(SRV)Shader Resource View | ID3D11ShaderResourceView |
最常见,用于读取纹理内容(采样) |
✅ 无序访问(UAV)Unordered Access View | ID3D11UnorderedAccessView |
通常用于计算着色器(CS)写入纹理数据 |
✅ 渲染目标(RTV)Render Target View | ID3D11RenderTargetView |
作为输出目标进行写入(如 OMSetRenderTargets ) |
✅ 深度模板(DSV)Depth Stencil View | ID3D11DepthStencilView |
作为深度缓冲绑定进行深度/模板测试 |
✳️ 各视图类型示意图
Texture
├── SRV → 绑定到 VS/PS/GS/HS/DS/CS 的 SRV 槽位(读取)
├── UAV → 绑定到 CS(或 DX11.1 的 OM UAV)用于写入
├── RTV → 绑定为输出颜色缓冲
└── DSV → 绑定为深度/模板缓冲
✅ 二、着色器各阶段绑定纹理(通过 SRV)
你可以通过 context->*SetShaderResources
将纹理绑定到:
Shader 阶段 |
---|