Для Vulkan спецификация 1.2 требует, чтобы диапазон и детализация сообщались с помощью minInterpolationOffset
, maxInterpolationOffset
и subPixelInterpolationOffsetBits
, где:
Значения minInterpolationOffset
и maxInterpolationOffset
описывают закрытый интервал поддерживаемых смещений интерполяции: [minInterpolationOffset
, maxInterpolationOffset
]. ULP определяется subPixelInterpolationOffsetBits
. Если subPixelInterpolationOffsetBits
равно 4, это обеспечивает приращение (1/24) = 0,0625, и, таким образом, диапазон поддерживаемых смещений интерполяции будет [-0,5, 0,4375].
На основе минимальных значений из них, требуемых спецификацией, вы можете рассчитывать на наличие как минимум [-0,5, 0,4375], если поддерживается sampleRateShading
.
Для OpenGL спецификация 4.6 говорит:
Встроенная функция interpolateAtOffset будет производить выборку переменных с заданным ( x , y ) смещением относительно центра пикселя. Диапазон и степень детализации смещений, поддерживаемых этой функцией, зависят от реализации. Если любой из компонентов указанного смещения меньше значения MIN_FRAGMENT_INTERPOLATION_OFFSET
или больше значения MAX_FRAGMENT_INTERPOLATION_OFFSET
, позиция, используемая для интерполяции переменной, не определена. Не все значения смещения могут поддерживаться; Смещения x и y могут быть округлены до значений с фиксированной точкой с количеством дробных битов, заданным значением константы, зависящей от реализации FRAGMENT_INTERPOLATION_OFFSET_BITS
.
Требуемые минимумы такие же, как у Vulkan.
Попытка искать в PDF-файлах болезненна, поэтому я не буду утруждать себя изучением ES spe c, полагаю, что это то же самое.