あかすくぱるふぇ

同人サークル「あかすくぱるふぇ」のブログです。

DIrectX9のテクスチャはLockRectにより上書きできる。
このことはググればすぐに出てくるが、読む方についてはあまり見当たらず、つまづいたのでメモ。

・書き込み
pTexture->LockRect(0, &d3dLRect, 0, D3DLOCK_DISCARD);

・読み込み
pTexture->LockRect(0, &d3dLRect, 0, D3DLOCK_READONLY);

D3DLOCK_DISCARDは上書きモードなので、読む時はD3DLOCK_READONLYを指定する必要がある。

D3DXCreateTextureの引数とLockRect, SetRenderTargetの成否との関係について記します。
想定しているのは下図のような状況。
無題
・関数の説明
- D3DXCreateTexure
テクスチャを生成する関数。引数としてUsageとD3DFORMATを与える。

- LockRect
テクスチャのデータを読み書きするための関数。

- SetRenderTarget
レンダーターゲットを設定する関数。

・D3DXCreateTextureの引数
- Usage
テクスチャの使われ方を示す引数。
引数の主な値としてD3DUSAGE_DYNAMICとD3DUSAGE_RENDERTARGETがある。
D3DUSAGE_DYNAMICはデータの読み書きを行えることを示す。
D3DUSAGE_RENDERTARGETはレンダーターゲットとして設定できることを示す。

- D3DFORMAT
テクスチャのフォーマットを示す引数。
カラー情報を格納するもの(D3DFMT_A8R8G8B8など)とデプスステンシル情報を格納するもの(D3DFMT_D24S8など)に大別される。

・D3DXCreateTextureの成否
- 複数のUsageを設定すると失敗。
- カラー情報を格納するD3DFORMATは、D3DUSAGE_DYNAMICとD3DUSAGE_RENDERTARGETの両方と組み合わせて設定できる。
- デプスステンシル情報を格納するD3DFORMATは、D3DUSAGE_RENDERTARGETと組み合わせて設定することができない。

・LockRectの成否
- D3DUSAGE_DYNAMICなら成功。

・SetRenderTargetの成否
- D3DUSAGE_RENDERTARGETなら成功。

以上のような条件があるため、下記サイトに示されているような問題が面倒が発生するようです。
http://marupeke296.com/DXG_No43_ZBufferTexture.html

工学社の"はじめてのCUDAプログラミング"のまとめ。
内容が古かったり、分からなかったりしたところを補完します。

・GPUのアーキテクチャ(p.26~28)
演算性能[Flops] = SP数 * SPクロック * 2(積和演算)
メモリバンド幅[bit/sec] = メモリインターフェース[bit] * メモリクロック

・スレッドの階層構造(p.44~46)
1つのGPUで1グリッド。
グリッドは複数のブロックで構成される。1SMで1ブロック。ブロック数はGPUごとに異なる。
ブロックは複数のスレッドで構成される。1SP(CUDAコア)で1スレッド。スレッド数は世代ごとに異なる。

・高速アクセスのコツ
ウォープ:連続するスレッドでは同じ分岐を通るようにする。
コアレッシング:アライメントずれはSharedMemoryを使って解決する。
バンクコンフリクト:SharedMemoryの同じバンクに同時アクセスしない。

↑このページのトップヘ