нумерация gl_SubgroupInvocationID в многомерных рабочих группах - PullRequest
2 голосов
/ 18 мая 2019

Относительно GL_KHR_shader_subgroup расширение и вычисление шейдера ... gl_SubgroupInvocationID является одномерным (одиночным uint), в то время как рабочие группы могут быть до 3-мерными. Поэтому мне интересно, какие трехмерные числа gl_LocalInvocationID (потоки в рабочей группе) должны быть в каждой подгруппе.
Например: допустим, у меня есть рабочая группа 16x16x1, а gl_SubgroupSize равно 32. Как определить, какие потоки текущей рабочей группы находятся в подгруппе 0 (gl_SubgroupInvocationID == 0)?

1 Ответ

2 голосов
/ 18 мая 2019

Разделение рабочей группы на подгруппы определяется реализацией. Кроме того, вы не должны заботиться об этом.

Назначение функций подгруппы - облегчить взаимодействие между подгруппами. Спросить о значениях, вычисленных в других подгруппах относительно вашего вызова. Единственными функциями, которые заботятся об определенных «физических» отношениях между подгруппами, являются функции Quad, которые имеют дело с операциями над блоками 2x2 в шейдерах фрагментов.

...