Я изучаю DirectCompute, и я застрял в StructuredBufferes. Дело в том, что я узнал, что для передачи данных в шейдер мне нужно использовать View - SRV или БПЛА, в зависимости от того, чего я пытаюсь достичь. Но примеры кода с сайта Microsoft не объясняют, как представление, определенное в коде на C++, соответствует конкретному буферу, определенному в шейдерном коде. Тем не менее, есть ключевое слово hlsl, которое я действительно не понимаю - register()
. В образце было три bufferes:DirectCompute shader data input/output
StructuredBuffer<BuffType> Buff0 : register(t0);
StructuredBuffer<BuffType> Buff1 : register(t1);
RWStructuredBuffer<BuffType> BuffOut : register(u0);
В C++ код авторы просто набор ComputeShader, 1 ЛИ, 2 SRV, а затем называют Context.Dispatch (,,) (предполагая, что они подготовили все буфера и представление ранее). Поэтому возникает вопрос: как я понимаю, что конкретный SRV (есть два из них) предоставляет данные для частного StructuredBuffer? Контролируется ли это номером регистра (например, регистр (t0) заполняется первым, регистрируется (t1) - секунд). Если да, то что, если я хочу сначала предоставить данные для второго буфера, а затем заполнить первый? Я чувствую, что пропущу что-то очень важное, но в предыдущих уроках я использовал все, что было намного проще из-за EffectVariales и методов .GetVariableBy. Спасибо заранее.
Это хорошее объяснение, спасибо. – Ilia