gpt4 book ai didi

c++ - 在 DirectX 11 中将着色器资源发送到 GPU

转载 作者:行者123 更新时间:2023-11-28 02:20:07 24 4
gpt4 key购买 nike

假设我有一个简单的 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);

这是否意味着我发送了 3 次相同的数据?还是我的数据发送概念效率低下?

最佳答案

这三个函数只是将资源缓冲区中的特定资源绑定(bind)而不是复制到不同的着色器(顶点着色器、像素着色器、几何着色器)。可以在流水线的不同阶段读取资源缓冲区。在您的示例中,只有一个缓冲区“A”。但是,与此缓冲区绑定(bind)的着色器都有权读取此缓冲区。

关于c++ - 在 DirectX 11 中将着色器资源发送到 GPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32839187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com