【问题标题】:Sending shader resource to GPU in DirectX 11在 DirectX 11 中将着色器资源发送到 GPU
【发布时间】:2015-09-29 22:36:35
【问题描述】:

假设我有一个简单的 2D 纹理(着色器资源)

ID3D11ShaderResourceView* srvTexture;

还有一个默认(即时)设备上下文

ID3D11DeviceContext* dc;

现在,我像这样在 Pixel Shader 中设置纹理

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 次相同的数据?或者我的数据发送概念效率低下?

【问题讨论】:

    标签: c++ directx-11


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2018-03-11
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多