在DirectX 11中发送着色器资源到GPU
Sending shader resource to GPU in DirectX 11
假设我有一个简单的2D纹理(着色器资源)
ID3D11ShaderResourceView* srvTexture;
和一个默认的(即时的)设备上下文
ID3D11DeviceContext* dc;
现在,我在像素着色器中设置纹理,像这样
ID3D11ShaderResourceView* srvArrayTexture[1];
srvArrayTexture[0] = srvTexture;
dc->PSSetShaderResources(
0, // start slot (not important in this case)
1, // nb of views (one texture)
srvArrayTexture); // my texture as array (because DirectX wants array)
我理解这个过程作为发送实际纹理从RAM内存到GPU内存。我想知道,为什么也有类似的方法,如VSSetShaderResources, GSSetShaderResources等。这是否意味着每个流水线阶段(VS, GS,…)都有自己的GPU内存?
如果我调用
dc->VSSetShaderResources(A);
dc->GSSetShaderResources(A);
dc->PSSetShaderResources(A);
这是否意味着我发送了三次相同的数据?或者我的数据发送概念是低效的?
这三个函数只是将资源缓冲区中的特定资源绑定,而不是复制到不同的着色器(顶点着色器,像素着色器,几何着色器)。资源缓冲区可以在管道的不同阶段被读取。在您的示例中,只有一个"A"缓冲区。然而,与这个缓冲区绑定的着色器都有读取这个缓冲区的权利。
相关文章:
- 具有瞬态资源的RAII类
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 允许从 std::map 的密钥窃取资源?
- 参考资源文件VC++中的$(SolutionDir)
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 将 std::allocate_shared 与多态资源分配器一起使用
- 使用RAII在给定次数的迭代后重新分配资源
- 资源管理设计模式
- 如何跨平台将二进制资源构建到程序中?
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- SetDlgItemInt 不会更改嵌入资源的编辑框
- Klocwork Inside的资源泄漏
- 从存储为 Windows 资源 (c++) 的 png 中获取 png 文件数据
- 在 DirectX 11 中从 GPU 读回顶点缓冲区(并获取顶点)
- C++链接时间资源"allocation"而不定义
- 使用 Bazel 生成 QT 资源文件
- Tensorflow C++关闭会话后不释放 GPU 资源
- OpenGL过程间GPU资源共享
- 在DirectX 11中发送着色器资源到GPU