「 2014年12月 」一覧

2014年もあと僅か・・・。


2014年ももう終わりなので、どのようなことをやったのかまとめてみました。

  • OpenGL 4.x での描画関連。
  • テセレーションのサンプル実装、DrawIndirect系,GPUパーティクルっぽい何か
  • OpenGL での ComputeShader のテスト
  • Gitの使い方ちょっと調べた
  • LinuxでのOpenGL や EGL の調査
  • 相変わらずのAndroid新デバイスでの GL extension チェック
  • MSAAの実装事例(DirectX11, OpenGL)
  • DLLインジェクションの調査
  • PEフォーマットの調査
  • Mach-O フォーマットの調査。そして関数フックの実現へ. オブジェクトファイルの関数呼び出し実験
  • Google Cardboard のアプリ作ってた
  • Jetson TK1入手のため、いろいろといじってた
  • MIPS Creator CI20入手のため、いろいろといじってた
  • クロス開発のためのクロスコンパイラの作成&環境構築にがんばってた

こうしてみると OpenGL 4.x の基礎をおさらいして、その後インジェクションの魅力にとりつかれて半年ほど過ごしているような感じでした。また組み込みボードを2枚ほど手に入れられたこともあって、Linuxやらクロス開発のための準備に時間を費やしていたようです。

そしてソースコードの公開をGithubでするようになりました。まだちゃんとしたアプリケーションやらライブラリではないのですが、一応アクセスして操作できるようにはなってきたかと。

2013年のまとめと比べると、今年は比較的分野が偏っていて深い部分ばかりやっていたなぁという感じです。

それではよいお年を。


GPUViewを使う前に


GPUViewを使ってみようと思い、Windows Performance Toolkit とかを入れてみたのですが、ログ収集のためのコマンドバッチ log.cmd を実行するとエラーが出ることが確認できました。ちなみにこの症状は WIndows7 64bit 上で確認しています。
 そのエラーというのが、「4000 の使い方が誤っています。」というもので、このメッセージだけではよくわかりません。

これを解決するためには環境変数をセットすると良いようです。log.cmdを実行する前に、以下のようにして値をセットすると実行できるようになりました。

実行した後は、対象アプリケーションなどを実行して、再び log.cmd を実行してログ収集を停止して、その際に出来上がる Merged.etl ファイルを GPUView で開いてあげれば OK です。まだ GPUView の見方がわかっていませんが、これで実行&情報収集は出来るようになったのでよしとします。


CI20でOpenGL 2.1 使えないかも


MIPS Creator CI20 で OpenGL 2.1 のサポートとあるのですが、手元で試している限りではうまく動きません。各OpenGLの関数はポインタがとれているので動きそうなのですが、肝心のシェーダーのコンパイルで SIGSEGV が発生してしまいます。
そのときの様子が以下のようになります。

glXGetProcAddress による方法や、直接関数宣言させる GL_GLEXT_PROTOTYPES など試してみましたが、症状は変化せずでした。
GLEWによる拡張のサポートを見ると、 OpenGL 3.3 機能の一部まで extension があるので、使えたら面白いのになと思うだけに残念です。


MIPS Creator CI20 を SDカード起動にする


MIPS Creator CI20 には eMMC があり、ここからデフォルトでは Debian が起動するようになっています。しかしご存じの通り書き換え回数問題があるため、出来るだけ SDカードなど交換がきく外部ストレージからブートさせたいと思います。
今回、それがうまく出来たので手順を記事化しようと思いました。

必要なもの

  1. UbuntuなどのLinux環境。仮想マシンでも可。
  2. 上記の環境で使えるカードリーダー。SDカードの書き込みを行います
  3. MIPS用のクロスコンパイラ

手順

Ubuntuで作業することを想定しています。まずは必要なツールをインストールします。

https://github.com/ZubairLK/ci20_other_files のリポジトリをクローンして、作成のためのスクリプト等を取得します。

この中に、工場出荷状態のカーネル(uImage_ci20_production_20140625)も含んでいるので、まずはこちらを利用させてもらいます。
そして、elinux.org から取得できる rootfs-20140625.tar をダウンロードしておきます。

そろったら、dev以下にアクセスするので root で作業します。とはいっても便利なスクリプトなのでやることは以下のように簡単な手順です。
環境変数ではクロスコンパイラのプレフィックスやパスを設定しています。

うまくいけば書き込みが成功します。エラーが出た場合には足りないものをインストールなどして下さい。

MIPS Creator CI20 に書き込んだSDカードをセットして、ジャンパーピンをSDカードからのブートに切り替えて下さい。
この状態でリセットして起動させると SDカードから起動してくると思います。物によるとは思いますが、結構遅いです・・・。

起動してディスク容量などを確認してみると以下のように明らかな差異を確認できました。
sdboot-debian-ci20


MIPS Creator CI20が発売になったらしい


とうとう強化版Raspberry PI といえる MIPS Creator CI20 が発売になったようです。残念ながら日本への発送はまだ出来ないようですが。
お値段としても、1万以下になりそうですし、これはなかなか強力な選択肢となりそうです。

http://blog.imgtec.com/powervr/mips-creator-ci20-development-board-now-available

入手性がぼちぼちよくなっていきそうなので、先日のクロスコンパイラの需要も高まってくれるとちょっと嬉しいなと思います。

CI20 での glShaderSource の問題

手元の環境で OpenGL の API を使った場合に glShaderSource 実行で不正終了してしまうという問題に出遭っています。 EGL と GLES 2.0 で初期化して、同じ関数呼び出した場合には問題なかったものです。こういった症状と PowerVR SGX540 というモバイル向けチップという点から、 OpenGL への対応はドライバでやれてないのかなと思っていました。しかしながら、上記のスペックシートを見ると、 OpenGL 2.1 への対応が記載してあります。ハードでは対応しているということですので、再度チェックしてみようと思います。