Недавно я изучал glslang и заметил, что почти все встроенные функции HLSL не поддерживают половинный тип напрямую. Например, есть float max(float, float)
, int max(int, int)
, но нет half max(half, half)
. Документ Microsoft также указывает, что поддерживаются типы компонентов float
и int
, они не обозначают half
: https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-max
Но в шейдере, если вы пишете half res = max(1.0h, 2.0h)
, шейдер компилируетсябез ошибок. Так значит ли это max
на самом деле продвижение двух половинных параметров с плавающей запятой, получение результата с плавающей запятой и неявное приведение результата к половине?