รองรับ OpenGL 4.6 และ OpenGL® ES 3.2
- M1 รองรับเพียง OpenGL 4.1 มาเป็นเวลานาน แต่ตอนนี้รองรับ OpenGL® 4.6 และ OpenGL® ES 3.2 อย่างสมบูรณ์แล้ว
- สามารถติดตั้ง Fedora เพื่อใช้ไดรเวอร์ล่าสุดสำหรับซีรีส์ M1/M2
- หากติดตั้งอยู่แล้ว สามารถอัปเกรดได้ง่าย ๆ ด้วยคำสั่ง
dnf upgrade --refresh
- ต่างจากไดรเวอร์ 4.1 แบบไม่เป็นมาตรฐานของผู้ผลิตเดิม ไดรเวอร์ลินุกซ์โอเพนซอร์สเหล่านี้ผ่านการรับรองตาม OpenGL เวอร์ชันล่าสุด จึงรับประกันความเข้ากันได้อย่างกว้างขวางกับเวิร์กโหลด OpenGL สมัยใหม่ เช่น Blender, Ryujinx และ Citra
การรับรองไดรเวอร์และการรองรับมาตรฐาน
- ไดรเวอร์ 4.6/3.2 ที่ผ่านการรับรองต้องผ่านการทดสอบมากกว่า 100,000 รายการเพื่อรับประกันความถูกต้อง
- รายชื่อไดรเวอร์ที่ได้รับการรับรองอย่างเป็นทางการตอนนี้รวม OpenGL 4.6 และ ES 3.2 แล้ว
- แม้ผู้ผลิตรายนั้นจะยังไม่รองรับมาตรฐานกราฟิกสมัยใหม่อย่าง OpenGL แต่บริษัทนี้รองรับ
- บริษัทนี้แสดงออกอย่างเปิดเผยถึงความรักต่อมาตรฐานเปิดที่ทำงานร่วมกันได้ และต้องการมอบอิสระให้ผู้ใช้และนักพัฒนารันแอปพลิเคชันได้ในที่ที่ต้องการโดยไม่ต้องมีพอร์ตพิเศษ
ฟีเจอร์ใหม่ใน OpenGL 4.6
- OpenGL 4.6 เพิ่มฟีเจอร์บังคับหลายสิบรายการเมื่อเทียบกับ 4.1:
- Robustness (ความทนทาน)
- SPIR-V
- Clip control
- Cull distance
- Compute shaders
- Upgraded transform feedback
ปัญหาความเข้ากันได้ของ M1 กับมาตรฐานกราฟิก
- M1 ไม่เหมาะกับมาตรฐานกราฟิกที่ใหม่กว่า OpenGL ES 3.1 มากนัก
- Vulkan ทำให้บางฟีเจอร์เป็นตัวเลือกได้ แต่เลเยอร์สำหรับ DirectX และ OpenGL ยังขาดฟีเจอร์ที่จำเป็น
- บน M1 ยังไม่มีโซลูชันเดิมที่ก้าวข้ามชุดฟีเจอร์ OpenGL 4.1 ได้
วิธีข้ามข้อจำกัดของ 4.1
- จำเป็นต้องมีวิธีใหม่ในการทำฟีเจอร์ใหม่ ๆ ให้ใช้งานได้โดยไม่ต้องพึ่งการรองรับจากฮาร์ดแวร์
- Geometry shaders, tessellation และ transform feedback ถูกแทนที่ด้วย compute shaders
- Cull distance ถูกแทนที่ด้วยค่าการอินเตอร์โพเลตที่แปลงแล้ว
- Clip control ถูกแทนที่ด้วย vertex shader epilogue
ความท้าทายด้านความทนทาน
- โดยปกติแล้ว GPU มักให้ความสำคัญกับประสิทธิภาพดิบมากกว่าความปลอดภัย
- สำหรับแอปพลิเคชันอย่างเว็บเบราว์เซอร์ การแลกเปลี่ยนแบบนี้ไม่ใช่สิ่งที่พึงประสงค์
- ฟีเจอร์ด้านความทนทานช่วยลดพื้นผิวการโจมตีได้โดยยอมเสียประสิทธิภาพเล็กน้อย ด้วยการเปิดให้แอปพลิเคชันเลือกพฤติกรรมที่กำหนดไว้เมื่อมีการเข้าถึงบัฟเฟอร์นอกขอบเขตใน shader
ความทนทานของบัฟเฟอร์
- API อื่น ๆ มีนิยามต่างกันว่าเมื่อเปิดใช้ความทนทานแล้ว การโหลดข้อมูลนอกขอบเขตของบัฟเฟอร์ควรคืนค่าอะไร
- OpenGL กำหนดให้การโหลดนอกขอบเขตคืนค่าเป็นองค์ประกอบสุดท้ายของบัฟเฟอร์
- การคำนวณเพิ่มเติมเพื่อรองรับความทนทานถูกย้ายไปไว้ใน preamble ของ shader จึงไม่มีต้นทุนกับ shader หลัก
ความทนทานของอิมเมจ
- ความทนทานของอิมเมจกำหนดให้การโหลดอิมเมจนอกขอบเขตต้องคืนค่า 0
- บน GPU ของ M1 มีการทดสอบเพียงรายการเดียวที่ล้มเหลวกับการโหลดอิมเมจแบบ mipmapped
- วิธีหลบเลี่ยงเพื่อรองรับความทนทานคือไม่โหลดจากระดับที่ไม่ถูกต้อง หรือโหลดแบบคาดเดาก่อนแล้วใช้การเปรียบเทียบและการเลือกค่า
ความเห็นของ GN⁺
- บทความนี้กล่าวถึงพัฒนาการสำคัญในการรองรับมาตรฐาน OpenGL รุ่นใหม่บนอุปกรณ์ M1 ซึ่งจะนำมาซึ่งความเข้ากันได้ที่กว้างขึ้นและประสิทธิภาพที่ดีขึ้นสำหรับผู้ใช้ลินุกซ์และนักพัฒนา
- ฟีเจอร์ใหม่ของ OpenGL 4.6 สามารถยกระดับทั้งประสิทธิภาพและความทนทานของแอปกราฟิกได้อย่างมาก ซึ่งสำคัญอย่างยิ่งในงานพัฒนาเกมและการประมวลผลสมรรถนะสูง
- บทความนี้เป็นตัวอย่างที่ดีว่าไดรเวอร์โอเพนซอร์สสามารถมอบการปฏิบัติตามมาตรฐานและความเข้ากันได้ที่ดีกว่าโซลูชันเชิงพาณิชย์ได้อย่างไร
1 ความคิดเห็น
ความคิดเห็นบน Hacker News