Ini adalah batasan perangkat keras. Shader fragmen adalah bagian dari jalur pipa yang dapat diprogram, tetapi perpaduan warna akhir dengan buffer target tidak dapat diprogram dalam perangkat keras / komoditas yang tersedia secara luas pada titik ini (ini dapat dikonfigurasi melalui negara campuran, tetapi Anda tidak dapat menulis secara sewenang-wenang. kode yang menggantikan operasi campuran built-in GPU).
Alasan mengapa perangkat keras tidak dibuat untuk ini mungkin ada hubungannya dengan fakta bahwa GPU paralel secara masif; mereka memproses banyak fragmen sekaligus. Beberapa fragmen tersebut pada akhirnya dapat berinteraksi satu sama lain dalam buffer tujuan, tetapi karena sifat proses sinkronisasi fragmen yang tidak sinkron, tidak mungkin untuk mengetahui bagaimana sampai setelah fragmen diproses dan warna akhir telah dipancarkan ... yang menang selalu terjadi secara deterministik.
Hanya karena piksel A akan berada di belakang piksel B dalam bingkai terakhir tidak berarti bahwa piksel A akan selalu menyelesaikan pemrosesan fragmen dan ditulis ke tujuan sebelum B, terutama di beberapa frame rendering. Jadi nilai yang dibaca dari buffer tujuan selama pemrosesan piksel B tidak akan selalu menjadi piksel A - terkadang itu adalah nilai yang jelas.
Jadi saya menduga bahwa melarang buffer tujuan langsung membaca selama tahap fragmen jauh lebih berkaitan dengan menghentikan programmer shader dari menembak dirinya sendiri di kaki dengan mendapatkan hasil berpotensi nondeterministik dari pembacaan itu daripada dari keterbatasan teknis aktual dalam membuat tahap campuran sepenuhnya- dapat diprogram. Dengan menjaga agar operasi baca tetap terkontrol (uji kedalaman, misalnya), GPU memastikan bahwa operasi yang dilakukan dengan nilai baca masuk akal.
Yang mengatakan, mungkin ada hal biaya / manfaat yang terjadi. Membuat aspek pipeline GPU yang dapat diprogram akan menyulitkan desain chip, dan kebutuhan / permintaan untuk buffer tujuan dibaca relatif rendah dibandingkan dengan fitur lainnya.