這篇算是簡單整理一下 Khronos 在 GDC 2015 發表的一些消息。今年 Khronos 發表的消息,主要是下一代的 OpenGL、「Vulkan」,以及 OpenCL 兩個部分;而實際上,繪圖和計算這兩部分,看來已經越來越一體化了。
整體性的介紹,可以參考官方的投影片:Khronos GDC Press Briefing : Mar15.pdf。
在 3D 繪圖 API 的部分,Khronos 終於發表了下一代的 OpenGL(GLnext)、其名稱為「Vulkan」,他的官方網站是:
他基本上是一個和舊有 OpenGL 不相容,針對現代化的 GPU 架構的新的跨平台、開放標準的 3D 繪圖 API。不過這個 API 目前還沒有正式推出、目前還在發展中,這次也只是簡單展示而已。
而會這樣砍掉重鍊的原因,主要應該是為了拋棄舊有 OpenGL、老舊的 render pipline 的包袱,讓繪圖 API 可以更適合現代化的 GPU。下面就是官方希望 Vulkan 可以達成的目標:
- Clean, modern architecture
- Multi-thread / multicore-friendly
- Greatly reduced CPU overhead
- Architecture-neutral – full support for tile-based as well as direct renderers
- Predictable performance through explicit control
- Improved reliability and consistency between implementations
下圖就是官方提供,Vulkan 和舊有的 OpenGL / OpenGL ES 的差異比較。
更詳細的資料,則可以參考:
另外值得一提的是,Vulkan 這個新的 API 似乎算是繼承 AMD Mantle(官網)而來的;在官方投影片裡面,也有一張大大的「Thanks AMD」,旁邊就是 Mantle 的標示。在 AMD 的官方部落格裡,也有提到「The cross-vendor Khronos Group has chosen the best and brightest parts of Mantle to serve as the foundation for "Vulkan"」(文章)。
總之,目前這個 API 還沒定案,一般應該也還沒有可以支援的裝置,所以就繼續等吧~
在計算、也就是 OpenCL 的部分,則是發表了 OpenCL 2.1 的 Provisional Specification。(官網)
OpenCL 2.1 最大的特色,是提供了新的 OpenCL C kernel language!而這邊的 OpenCL C kernel language 基本上是 C 14 的子集合,理論上之後會可以更方便地來撰寫 OpenCL 的 Kernel 了。
至於在 OpenCL C 裡面所移除的 C 14 的功能,則包括了:
- Throwing and catching exceptions (throw, catch)
- Allocation and release of memory (new, delete)
- Virtual functions and abstract classes (virtual)
- Function pointers, Recursion and goto
除此之外,在 OpenCL 的 API 上,也做了一定程度的改進。更詳細的資料,可以參考下面的資料:
而前面有提到,在繪圖和計算這兩個方面,已經越來越一體化了,會這樣說主要是因為現在 Khronos 又提出了新一代的「SPIR-V」(Standard Portable Intermediate Representation)這個中繼語言、用來作為 OpenCL Kernel、Vulkan 的 Shader 到更底層的中繼。
他的官方網站是:https://www.khronos.org/spir
理論上,藉由 SPIR-V 的存在,各家廠商應該都可以定義自己的語言,來實作 OpenCL kernel 和 Vulkan 的 shader 了~或許以後在開發上,可以更有彈性吧?