2 điểm bởi GN⁺ 2024-02-15 | 1 bình luận | Chia sẻ qua WhatsApp

Hỗ trợ OpenGL 4.6 và OpenGL® ES 3.2

  • M1 trong thời gian dài chỉ hỗ trợ OpenGL 4.1, nhưng giờ đây đã hỗ trợ đầy đủ OpenGL® 4.6 và OpenGL® ES 3.2.
  • Chỉ cần cài Fedora để dùng driver mới nhất cho dòng M1/M2.
  • Nếu đã cài sẵn, chỉ cần nâng cấp bằng lệnh dnf upgrade --refresh.
  • Khác với các driver 4.1 không chuẩn của các nhà cung cấp hiện có, các driver Linux mã nguồn mở này được chứng nhận theo các phiên bản OpenGL mới nhất, hứa hẹn khả năng tương thích rộng rãi với các khối lượng công việc OpenGL hiện đại như Blender, Ryujinx và Citra.

Chứng nhận driver và hỗ trợ tiêu chuẩn

  • Driver 4.6/3.2 được chứng nhận phải vượt qua hơn 100.000 bài kiểm tra để đảm bảo tính chính xác.
  • Danh sách driver được chứng nhận chính thức giờ đây đã bao gồm OpenGL 4.6 và ES 3.2.
  • Các nhà cung cấp vẫn chưa hỗ trợ các tiêu chuẩn đồ họa hiện đại như OpenGL hiện đại, nhưng công ty này thì có.
  • Công ty này công khai thể hiện sự yêu thích đối với các tiêu chuẩn mở có khả năng tương tác, và muốn mang lại cho người dùng cũng như nhà phát triển sự tự do chạy ứng dụng ở nơi họ muốn mà không cần các bản port đặc biệt.

Tính năng mới của OpenGL 4.6

  • So với 4.1, OpenGL 4.6 bổ sung hàng chục tính năng bắt buộc:
    • Robustness (độ bền vững)
    • SPIR-V
    • Clip control
    • Cull distance
    • Compute shaders
    • Transform feedback được nâng cấp

Vấn đề tương thích giữa M1 và các tiêu chuẩn đồ họa

  • M1 không thực sự phù hợp với các tiêu chuẩn đồ họa mới hơn OpenGL ES 3.1.
  • Vulkan biến một số tính năng thành tùy chọn, nhưng các lớp cho DirectX và OpenGL lại thiếu những tính năng cần thiết.
  • Trên M1, không có giải pháp sẵn có nào vượt qua bộ tính năng OpenGL 4.1.

Cách vượt qua rào cản 4.1

  • Cần những phương pháp mới để triển khai các tính năng mới mà không có hỗ trợ phần cứng.
  • Geometry shader, tessellation và transform feedback được thay thế bằng compute shader.
  • Cull distance được thay bằng các giá trị nội suy đã biến đổi.
  • Clip control được thay bằng phần epilogue của vertex shader.

Thách thức về độ bền vững

  • Theo truyền thống, GPU ưu tiên hiệu năng thô hơn là an toàn.
  • Với các ứng dụng như trình duyệt web, sự đánh đổi này là không mong muốn.
  • Các tính năng robustness cho phép ứng dụng chọn hành vi được xác định khi shader truy cập vượt phạm vi bộ đệm, từ đó giảm bề mặt tấn công với cái giá là hy sinh một phần nhỏ hiệu năng.

Độ bền vững của bộ đệm

  • Các API khác nhau có định nghĩa khác nhau về giá trị mà thao tác tải vượt phạm vi bộ đệm trả về khi robustness được bật.
  • OpenGL quy định rằng tải vượt phạm vi sẽ trả về phần tử cuối cùng của bộ đệm.
  • Phần tính toán bổ sung cho robustness được chuyển vào phần preamble của shader, nên không tạo thêm chi phí cho shader chính.

Độ bền vững của ảnh

  • Image robustness yêu cầu thao tác tải ảnh vượt phạm vi phải trả về 0.
  • Trên GPU M1, có một bài kiểm tra đơn lẻ bị lỗi với thao tác tải ảnh đã mipmap.
  • Các cách обход cho robustness gồm không tải ở mức không hợp lệ, hoặc tải suy đoán trước rồi dùng phép so sánh và chọn.

Ý kiến của GN⁺

  • Bài viết này đề cập đến một bước tiến quan trọng trong việc hỗ trợ tiêu chuẩn OpenGL hiện đại trên thiết bị M1. Điều này sẽ mang lại khả năng tương thích rộng hơn và cải thiện hiệu năng cho người dùng Linux cũng như nhà phát triển.
  • Các tính năng mới của OpenGL 4.6 có thể cải thiện đáng kể hiệu năng và độ bền vững của các ứng dụng đồ họa, điều này đặc biệt quan trọng trong lĩnh vực phát triển game và tính toán hiệu năng cao.
  • Bài viết là một ví dụ tốt cho thấy driver mã nguồn mở có thể mang lại khả năng tuân thủ tiêu chuẩn và tương thích tốt hơn như thế nào so với các giải pháp thương mại.

1 bình luận

 
GN⁺ 2024-02-15
Ý kiến trên Hacker News
  • Alyssa Rosenzweig là người liên tục đóng góp cho cộng đồng, và khi đọc các bài đăng trên blog của cô ấy, bạn có thể học được những điều trước đây chưa biết về bên trong của phần cứng đồ họa hiện đại. Những nỗ lực như vậy chứng minh rằng năng lực quan trọng hơn lời nói, và chỉ riêng việc đọc blog cũng đủ khiến người ta suy nghĩ rất nhiều. Thông điệp quan trọng nằm ở câu thứ hai chứ không phải câu cuối, và người đọc sẽ bị cuốn xuống hang thỏ để tận hưởng thế giới thao tác bit.
  • Chip M1 không thực sự phù hợp với các tiêu chuẩn đồ họa mới hơn OpenGL ES 3.1; Vulkan có thể sử dụng một số tính năng theo kiểu tùy chọn, nhưng lại thiếu các tính năng cần thiết cho việc tạo lớp cho DirectX và OpenGL. Trên M1 không có giải pháp nào vượt qua được bộ tính năng OpenGL 4.1. Có sự tò mò về tác động hiệu năng của điều này, đặc biệt khi so với Metal trên macOS.
  • Tôi thấy khá thú vị khi trong lập trình đồ họa, việc chuyển từ bẫy truy cập ngoài biên sang trả về dữ liệu ngẫu nhiên lại được gọi là "tính robust".
  • Đến một lúc nào đó Apple sẽ loại bỏ OpenGL 3.3 core, và vì thế mọi người cũng có thể sẽ bỏ nó. Người ta thường nói OpenGL dễ dùng hơn Vulkan, nhưng nếu mọi thứ trở nên quá phức tạp thì với các nhà phát triển ít kinh nghiệm, đó có thể là rào cản để tận dụng GPU, và điều này có thể làm nản lòng một số nhà phát triển game indie. Dùng Unity và Unreal là chuyện phổ biến, nhưng việc tự làm game từ đầu lại bị xem là kỳ lạ. Tình trạng phát triển game mã nguồn mở đôi khi tạo cảm giác rất tuyệt vọng, và sự xuất hiện của các API đồ họa thế hệ mới càng khiến mọi thứ khó khăn hơn.
  • Đây là về Fedora cho chip M1, và nếu triển khai được điều này trên macOS thì sẽ rất đáng kinh ngạc. Có sự tò mò về những công việc cần thiết để đạt được điều đó.
  • Tôi thắc mắc vì sao không nhắm tới Vulkan trước. Vulkan có vẻ là mục tiêu quan trọng hơn vào thời điểm hiện nay, và đã có sẵn các bản triển khai OpenGL.
  • Làm thế nào để phá vỡ rào cản 4.1? Nếu muốn triển khai các tính năng mới mà không có hỗ trợ phần cứng thì cần những phương pháp mới. Geometry shader, tessellation và transform feedback được triển khai bằng compute shader; cull distance bằng các giá trị nội suy đã biến đổi; clip control bằng phần epilogue của vertex shader. Tôi tò mò không biết bao nhiêu phần trong số này đã được thực hiện trong mã GPU của M1, và mức độ có thể tái sử dụng của việc triển khai tính năng thông qua các tính năng khác là bao nhiêu.
  • Lại thêm một đề xuất nữa, lại là một bài viết khác mà tôi muốn hiểu rõ hơn trong ngữ cảnh với nhiều kiến thức và sự kiên nhẫn hơn. Dù vậy, bài viết của Alyssa vẫn rất thú vị để đọc.
  • Thật điên rồ khi lý do duy nhất OpenGL được dùng cho game 3D là vì vào thập niên 90, John Carmack đã quá bám chặt vào nó để làm Quake II.