มันเป็นข้อ จำกัด ของฮาร์ดแวร์ Fragment Shader เป็นส่วนหนึ่งของไพพ์ไลน์ที่สามารถตั้งโปรแกรมได้ แต่การผสมสีสุดท้ายกับบัฟเฟอร์เป้าหมายนั้นไม่สามารถตั้งโปรแกรมได้ในฮาร์ดแวร์ / ชุดสินค้าที่มีวางจำหน่ายอย่างแพร่หลาย ณ จุดนี้ (มันสามารถกำหนดได้ผ่านทางสถานะการผสม แต่คุณไม่สามารถเขียนเอง รหัสที่มาแทนที่การผสมผสานของ GPU ในตัว)
เหตุผลที่ฮาร์ดแวร์ไม่ได้สร้างขึ้นสำหรับสิ่งนี้อาจเกี่ยวข้องกับข้อเท็จจริงที่ว่า GPU นั้นขนานกันอย่างหนาแน่น พวกเขาประมวลผลชิ้นส่วนจำนวนมากในเวลาเดียวกัน บางส่วนของชิ้นส่วนเหล่านั้นอาจโต้ตอบกันภายในบัฟเฟอร์ปลายทาง แต่เนื่องจากลักษณะอะซิงโครนัสของการประมวลผลส่วนไม่สามารถทราบได้ว่าหลังจากการประมวลผลชิ้นส่วนและสีสุดท้ายถูกปล่อยออกมา ... ซึ่งได้รับรางวัล มักจะเกิดขึ้นอย่างไม่แน่นอน
เพียงเพราะพิกเซล A จะอยู่ด้านหลังพิกเซล B ในเฟรมสุดท้ายไม่ได้หมายความว่าพิกเซล A จะเสร็จสิ้นการประมวลผลส่วนและเขียนไปยังปลายทางก่อน B โดยเฉพาะอย่างยิ่งในหลาย ๆ เฟรมของการเรนเดอร์ ดังนั้นค่าที่อ่านจากบัฟเฟอร์ปลายทางในระหว่างการประมวลผลพิกเซล B จะไม่ใช่พิกเซล A เสมอไป - บางครั้งมันจะเป็นค่าที่ชัดเจน
ดังนั้นฉันสงสัยว่าการไม่อนุญาตการอ่านบัฟเฟอร์ปลายทางโดยตรงในระหว่างขั้นตอนแฟรกเมนต์นั้นมีอะไรที่เกี่ยวข้องกับการหยุดโปรแกรมเมอร์ shader ไม่ให้ยิงตัวเองด้วยการเดินเท้าโดยรับผลลัพธ์แบบไม่เป็นทางการจากการอ่านนั้นมากกว่าข้อ จำกัด ทางเทคนิคใด ๆ โปรแกรมได้ ด้วยการควบคุมการอ่านอย่างเข้มงวด (ตัวอย่างเช่นการทดสอบความลึก) GPU ทำให้แน่ใจได้ว่าการดำเนินการด้วยค่าการอ่านมีความเหมาะสม
ที่กล่าวว่าอาจมีค่าใช้จ่าย / ผลประโยชน์เกิดขึ้น การกำหนดมุมมองของโปรแกรมไปป์ไลน์ GPU นั้นจะทำให้การออกแบบชิปค่อนข้างซับซ้อนและความต้องการ / ความต้องการสำหรับการอ่านบัฟเฟอร์ปลายทางนั้นค่อนข้างต่ำเมื่อเปรียบเทียบกับคุณสมบัติอื่น ๆ