最近AMDドライバを更新したらVRAM情報用の拡張がなくなっているじゃないか、の続きの話です。
関連する話は、OpenGLでVRAM情報を得る – AMDや、OpenGLでVRAM使用状況を取得…出来なくなった?!などになります。
結局のところ、ドライバを更新して Catalyst 13.4で RADEON 6850 を使用している状況では、ATI_meminfo エクステンションがやっぱり消えてしまっているようです。そこで一応強引に、VBO_FREE_MEMORY_ATI,TEXTURE_FREE_MEMORY_ATI を試してみたところ、なんと値が返ってきました。値の内容もそれなりに正しいようです。
こんな感じです。
VBO_FREE_MEMORY_ATI 1036288, 774144, 2096128, 2096128
4つの値がある理由はパラメータ1つで4つの値が返ってくるためです。詳しくはATI_meminfoの仕様を参照してください。
1GBの搭載メモリなので、1036288 という値が返ってきているところは正常そうです。ただ、元々のAPIの仕様からか現在使用中もしくは空きメモリをトータルで返す機能はないようです。これではモニタリングという点では厳しそうです。
また、GL_TOTAL_PHYSICAL_MEMORY_ATI で搭載している物理メモリ分もとれるよ!と過去の日記では書いたのですが、どうやらこれは現在使えないようです。この定義はどうやら Undocumented extension 的な扱いだったようです・・・。
話を戻して、他のアプリケーションの起動によって使用可能領域に関するパラメータが変動するかを調べてみます。
↑では第2パラメータの部分がアロケーションの最大ブロックなので、これが変動するかを確認してみようとおもいます。複数のアプリケーションを起動した後、取得したら値が変わるかどうか。
試してみた結果は、変動無し。まだまだ使用量が足りなかったのかもしれません。小ブロックでも消費した分がわかるAPI拡張だったら安心できるのにと思うのですが・・・OpenGLだとVRAMのメモリ使用量を気にするな、という意志を継いでいるのでしょうか。
以上の点により、とりあえずはなんとなく値はとれるようだけど、NVIDIAに比べて、信用ならない印象です。
どの環境でもそれなりにというのであればProcessExplorerが搭載している機能と同じ方法でやるしかなさそうです。Intelの場合はAMD以上に拡張そのものが使えないですし。