Це є апаратним обмеженням. Шейдер фрагмента є частиною програмованого конвеєра, але остаточне поєднання кольорів із цільовим буфером на даний момент не програмується у широкодоступному / товарному обладнання (це налаштовується за допомогою станів змішування, але ви не можете писати довільно код, який замінює вбудовані операції суміші GPU.
Причина, по якій апаратне забезпечення не побудовано для цього, ймовірно, пов'язане з тим, що графічний процесор масово паралельний; вони обробляють багато фрагментів одночасно. Деякі з цих фрагментів можуть в кінцевому рахунку взаємодіяти один з одним в межах буферів призначення, але через асинхронну обробку фрагмента неможливо дізнатися, як тільки після того, як фрагмент буде оброблений і не буде видано остаточний колір ... який виграв завжди буває детерміновано.
Тільки тому, що піксель A буде позаду пікселя B у остаточному кадрі, це не означає, що піксель A завжди буде завершувати обробку фрагмента і записуватись до пункту призначення перед B, особливо через декілька кадрів візуалізації. Таким чином, значення, прочитане з буфера призначення під час обробки пікселя B, не завжди буде пікселем A - іноді це будуть чіткі значення.
Тож я підозрюю, що заборона зчитування буфера прямого призначення на етапі фрагмента має набагато більше спільного з тим, щоб зупинити програміста шейдера не стріляти в ногу, отримуючи від цього прочитані потенційно недетерміновані результати, ніж будь-яке фактичне технічне обмеження в повному обсязі етапу змішування. програмований Дотримуючись чітко контрольованих операцій зчитування (наприклад, перевірка глибини), GPU забезпечує, що операції, проведені зі значенням зчитування, мають певний сенс.
Але, можливо, також може відбуватися річ із витратами та вигодами. Якщо зробити цей аспект програмованого GPU трубопровідним, дещо ускладнить конструкцію мікросхеми, і потреба / попит у читанні буфера призначення є порівняно низькою порівняно з іншими функціями.