Пиксельный процессор 128 бит: упаковка компонентов и операции накопления

Как устроены описанные операции пиксельного процессора 128 бит: упаковка компонентов в регистры, параметры с дробной частью и накопление с сохранением или изменением прозрачности.

Схема упаковки четырёх компонентов пикселя в 128-битное значение и накопления с сохранением или изменением прозрачности

Назначение

Пиксельный процессор 128 бит предназначен для операций над пиксельными данными, в которых четыре компонента цвета объединяются в одно 128-битное значение. Название отражает суммарную разрядность: четыре компонента по 32 бита дают 128 бит на пиксель. Операции работают с такими значениями напрямую, без распаковки каждого компонента в отдельную переменную.

Упаковка и распаковка компонентов

Операция RGBto128 принимает компоненты A, R, G, B и размещает их в регистрах EAX, EBX, ECX, EDX соответственно. Обратная операция RGBfrom128 возвращает упакованное значение ARGB в регистр EAX. Это базовая пара для переноса данных между форматом отдельных компонентов и форматом, пригодным для передачи в остальные операции процессора.

Следует отметить, что описанные регистровые интерфейсы не определяют, как именно внутри 32-битного компонента хранится дробная часть. Формат представления компонентов в памяти, на который ссылаются операции семейства F128, этими описаниями не задаётся.

Ограничение диапазона

Операция LimitR128 ограничивает значения компонентов в четырёх регистрах диапазоном от 0 до FF. Точный алгоритм выбора ближайшего допустимого значения при выходе за границу не описан, поэтому конкретное поведение округления или обрезания следует проверять отдельно. Сам факт ограничения подтверждён.

Параметры с дробной частью

Часть операций семейства F128 принимает параметры N16 с пометкой [16.16]. Это означает формат с 16 битами целой и 16 битами дробной части: число 0x00010000 соответствует единице, а 0x00008000 половине. Такой формат удобен для коэффициентов масштабирования и смешивания, поскольку умножение целых чисел с фиксированной точкой не требует аппаратного деления.

Накопление и прозрачность

Среди операций накопления различают F128plusNxRGB и F128plusNxTransRGB. Первая оставляет компонент прозрачности неизменным при накоплении, вторая изменяет его. Это подтверждённое различие между двумя описанными операциями. Точное правило смешивания прозрачности в каждой из них из приведённых описаний не следует.

Обработка переполнения

Описание операции DivRGB128 упоминает, что переполнения цветовых компонентов обрабатываются, но не раскрывает способ обработки. Операция LimitR128 также ограничивает диапазон, однако не является единственным описанным механизмом. Единой общей политики округления или обрезания для всех операций процессора в доступных описаниях нет; контракт каждой операции нужно проверять отдельно.

Пример использования

Типовой сценарий выглядит так: компоненты пикселя упаковываются через RGBto128, затем передаются в операцию обработки, например, масштабирования с коэффициентом в формате [16.16], после чего результат ограничивается через LimitR128 и распаковывается обратно через RGBfrom128. Это концептуальный порядок вызовов; фактическая совместимость регистровых состояний между операциями и поведение при граничных значениях требуют отдельной проверки.

Ограничения описания

Описания операций задают назначение и интерфейс, но не полные контракты: не указаны правила округления, порядок действий при переполнении и точная арифметика накопления. Различия в написании идентификаторов, например AF128 и AR128, не объявляются синонимами без отдельного подтверждения. Для практического применения каждая операция должна быть проверена на реальных данных.