Это является аппаратным ограничением. Фрагментный шейдер является частью программируемого конвейера, но окончательное смешение цветов с целевым буфером (ами) на данный момент не программируется в широко доступном / стандартном оборудовании (его можно настроить с помощью состояний смешивания, но вы не можете писать произвольно код, который заменяет встроенные операции смешивания графических процессоров).
Причина, по которой аппаратное обеспечение не создано для этого, вероятно, связана с тем, что графические процессоры в основном параллельны; они обрабатывают много фрагментов одновременно. Некоторые из этих фрагментов могут в конечном итоге взаимодействовать друг с другом в целевых буферах, но из-за асинхронного характера обработки фрагментов невозможно узнать, как до тех пор, пока фрагмент не будет обработан и не будет получен окончательный цвет ... который выиграл не всегда бывает детерминированным.
Тот факт, что пиксель A будет отставать от пикселя B в последнем кадре, не означает, что пиксель A всегда будет завершать обработку фрагмента и записываться в место назначения до B, особенно в нескольких кадрах рендеринга. Таким образом, значение, считываемое из буфера назначения во время обработки пикселя B, не всегда будет пикселем A - иногда это будут чистые значения.
Поэтому я подозреваю, что запрет на прямое чтение целевого буфера на этапе фрагмента имеет гораздо большее отношение к тому, чтобы не дать программисту шейдера выстрелить себе в ногу, получив потенциально недетерминированные результаты при этом чтении, чем из-за каких-либо фактических технических ограничений в создании стадии смешивания полностью. программируемый. Благодаря строгому контролю за операциями чтения (например, тестом глубины), графический процессор гарантирует, что операции, выполняемые со значением чтения, имеют какой-то смысл.
Тем не менее, может также происходить соотношение затрат и выгод. Создание такого аспекта программируемого конвейера GPU несколько усложнит конструкцию микросхемы, и потребность / спрос на чтение буфера назначения была относительно низкой по сравнению с другими функциями.