Предварительная версию Shader Model 6.10 в рамках обновления DirectX Agility SDK 1.720 не стало революцией, но принесло ряд целенаправленных улучшений для современных рабочих нагрузок — от нейросетевого рендеринга до крупномасштабных вычислительных задач.
Новый набор матричных API, объединённых под названием LinAlg, стандартизирует операции линейной алгебры прямо на уровне шейдеров. Это позволяет эффективно выполнять вычисления, связанные с нейросетевым рендерингом и обработкой изображений, без привлечения отдельных вычислительных ядер. Особенность в том, что матричные операции теперь доступны из отдельных потоков шейдеров в графическом конвейере реального времени.
API вводит две новые встроенные функции: GetGroupWaveIndex() и GetGroupWaveCount(). Они дают вычислительным, меш- и амплификационным шейдерам прямое представление о структуре «волны» внутри группы потоков. Первая возвращает индекс текущей волны, вторая — общее количество волн, выполняющих группу. Это устраняет необходимость в небезопасных обходных путях (например, делении SV_GroupIndex на WaveGetLaneCount()) и обеспечивает корректную работу на любом GPU с любым размером волны.
Снято многолетнее ограничение в 32 КБ (28 КБ для меш-шейдеров) на общую память группы. Разработчики теперь могут запрашивать фактический аппаратный лимит через новый вызов MaxGroupSharedMemoryPerGroup, а в точке входа шейдера указывать требуемый объём памяти с помощью атрибута [GroupSharedLimit()]. Это позволяет использовать полную ёмкость современных GPU, открывая путь к алгоритмам с крупными тайловыми вычислениями, программной растеризацией и большими матричными задачами, которые раньше упирались в ограничения спецификации, а не «железа».
Добавлены две полезные функции:
Старая модель