[この記事は Nicolas Capens ソフトウェア エンジニア兼「ピクセルパイレーツ」による Chromium Blog の記事 "Universal rendering with SwiftShader, now open source" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

SwiftShader は、CPU で高パフォーマンス グラフィック レンダリングを行うソフトウェア ライブラリです。Google は、既に Chrome、Android 開発ツール、クラウド サービスなどの複数の製品でこのライブラリを使用しています。本日(*原文公開当時)、Swiftshader は完全なオープンソースとなり、多くのアプリケーションで使用しやすくなりました。

2009 年以来、Chrome はハードウェア アクセラレーションによるレンダリングを完全にはサポートしていないシステムでの 3D レンダリングに SwiftShader を使用しています。WebGL などの 3D コンテンツは GPU 向けに記述されていますが、ユーザーの端末にはこのようなコンテンツを実行できるだけのグラフィック ハードウェアが搭載されていない場合もあります。また、信頼性の高い 3D レンダリングができない、あるいは 3D レンダリングがまったくできない深刻なバグがあるドライバが存在する可能性もあります。Chrome はそのようなシステムでもすべてのユーザーが 3D ウェブ コンテンツを利用できるように、SwiftShader を使用しています。





十分な GPU を搭載していないマシンで SwiftShader を実行していない Chrome(左)では、WebGL の Globe テストを実行できません。同じマシンで SwiftShader を有効にする(右)と、コンテンツの完全なレンダリングが可能になります。

SwiftShader は、Chrome や Android で使用されているのものと同じ OpenGL ES グラフィック API を実装しています。SwiftShader をオープンソース化することによって、他のブラウザ ベンダーが広く 3D コンテンツをサポートできるようになり、ウェブ プラットフォーム全体が進化します。とりわけ、WebGL が無条件にサポートされることによって、ウェブ デベロッパーがカジュアル ゲーム、教育アプリ、共同コンテンツ作成ソフトウェア、製品紹介、バーチャル ツアー、その他の魅力的なコンテンツを作成できるようになります。SwiftShader には、GPU のないシステムでのレンダリングを可能にするクラウド アプリケーションも存在します。

CPU でグラフィック計算を効率的に実行してユーザーに最高のパフォーマンスを提供するために、SwiftShader はいくつかのテクニックを利用しています。一般的なコンパイル時の最適化とは異なり、動的コード生成によって現在のタスクに最適なコードを実行時に生成できます。この複雑なアプローチは、直感的な命令型構文を持つ独自の C++ 埋め込み言語 Reactor を利用することによってシンプルなものになっています。また、SwiftShader は SIMT 風のベクター演算とマルチスレッド テクノロジーを併用し、利用できる CPU のコアやベクター演算ユニットを活用して並列度を上げています。これによって、アプリ ストリーミングなどのリアルタイム レンダリングが Android 上で実現できます。

デベロッパーの皆様は、git リポジトリから SwiftShader のソースコードにアクセスできます。メーリング リストにサインアップすると、最新の開発情報を受け取ることができます。また、オープンソース コミュニティの SwiftShader デベロッパーと共同作業を行うこともできます。


Posted by Takuo Suzuki - Developer Relations Team