我正在学习 DirectCompute,但我坚持使用 StructuredBufferes。事情是我了解到,要向着色器提供数据,我需要使用视图 - SRV 或 UAV,具体取决于我想要实现的目标。但是来自微软网站的代码示例并没有解释,在 C++ 代码中定义的视图如何与在着色器代码中定义的特定 Buffer 相对应。但是,有一个 hlsl 关键字我不太明白 - register()
。在示例中有三个缓冲区:
StructuredBuffer<BuffType> Buff0 : register(t0);
StructuredBuffer<BuffType> Buff1 : register(t1);
RWStructuredBuffer<BuffType> BuffOut : register(u0);
在 C++ 代码中,作者只需设置 ComputeShader、1 个 UAV、2 个 SRV,然后调用 Context.Dispatch(,,)(假设他们之前已准备好所有缓冲区和视图)。所以问题是 - 我如何理解特定的 SRV(其中有两个)为特定的 StructuredBuffer 提供数据?它是否由寄存器编号控制(例如首先填充寄存器(t0),寄存器(t1)-第二)。如果是,如果我想先向第二个缓冲区提供数据,然后填充第一个缓冲区怎么办?我觉得自己错过了一些非常重要的东西,但是在之前的教程中,由于 EffectVariales 和.GetVariableBy方法,我使用的一切都变得容易多了。提前致谢。