Исходные данные: я уже писал что делаю игру. Для растеризации воксельных объектов которые могут быть изогнуты нужно растеризовать как переднюю «грань» ограничивающего объема так и заднюю. Аппаратный растеризатор такого делать не может, поэтому я нагуглил научные статьи на тему, и придумал алгоритм.
В нем есть недостаток: для каждого тайла 8х8 работать реально будут только несколько потоков. Хотелось бы их объединять с последующими. Это можно сделать если не сразу запускать вычисления а класть промежуточные данные в LDS.
то есть шейдер содержит в себе все стадии «конвейера» и переключается между ними по мере готовности. Для этого в LDS должен быть большой промежуточный буфер, с которым будут работать множество «warpов». Я туда буду паковать запросы а потом отрабатывать группами по 64.
Проблема в том, что требуемый объем LDS для эффективной балансировки - довольно большой. Значит(исходя из документации) требуется большой размер workgroup чтоб этот размер был 512 например. Эту цифру я нашел в доке по оптимизации от AMD. Но при этом мне надо, чтоб шейдерные потоки паралелились по 64 т.к. в пределах воркгруппы будут выполняться разные части конвейера.
Могу ли я, заспавнив workgroup размером 512 расчитывать на то, что в реальности это будет 8*64 потоков а не 512?