DirectX11

IDXGISwapChain::Present()を基準に動いている件

前々からID3D11DeviceContext::Flush()を呼んでもいまいちコマンドが即座に発射されている気がしなかったり、GPU PerfStudio 2やPIX先生がIDXGISwapChain::Present()を発射しないとログれなかったりと、いやな予感はしてたんだけど実際に計測プログラムをGUI…

5870性能評価(5)

話としては、昨日*1の続き。そしてついでに性能評価にからめてみる。 すっごい遅い件 シェーダのこの部分 #ifdef GI_IS_B uint3 rgb = uint3(Gid.x, Gid.y, Gid.z*NUM_THREAD_X*NUM_THREAD_Y*NUM_THREAD_Z+GI); #else uint3 rgb = uint3(Gid.x*NUM_THREAD_X*…

float->UNORM変換丸め確認

ということで、先日*1予告していたROPのfloat->UNORM変換が単純な「切り捨て」ではなく、「近い数値へ丸め」となっているかどうかの検証をやってみた。 検証プログラムの概要 こんな感じのプログラムで検証をしたいと思う。 ComputeShaderで3DテクスチャにRG…

GPU ShaderAnalyzerで遊んでみた

ComputeShaderを叩いていたらどこにボトルネックがあるのか気になったのでGPU ShaderAnalyzer v1.59.3208を入れて試しに解析させてみた。 対象ソース 以前記事にしたHSV変換コードをかけてみた。 ここで再掲する。 // hsv.hlsl float3 rgb2hsv(float3 rgb) {…

自作ラッパの一部をさらしてみる

次の記事が長くなりそうなのと、そろそろソースを載せるたびに細かいコード断片を出すのがアレなので共通ライブラリとして作っている自作のDirectX11のラッパコードから今後掲載する可能性がありそうなコードをさらしてみる。 基本的にペラペラの薄いラッパ…

RGBHSV変換を実装してみた

Wikipediaの変換式とかを見ながら実装してみた。*1まずRGB->HSV float3 rgb2hsv(float3 rgb) { float3 hsv; float rgb_max, rgb_min; float diff; float base; float div1; float div2; rgb_max = max(max(rgb.x, rgb.y), rgb.z); rgb_min = min(min(rgb.x, …

3Dテクスチャの謎

また盛大にハマってしまった。 今回はD3D11_TEX3D_UAV::WSize様とD3D11_MAPPED_SUBRESOURCE様の2名様に翻弄されてました…やりたかったことはComputeShaderで3Dテクスチャに書き込んでそれをCPU側で確認する、ってだけの簡単なお仕事のはずだったんだけど、…

GDIとDirectX

激しく今さら感がするけど、以前ID3DX10Fontの代わりにDrawText()してたやつについて。 RGB値が反転してるっぽい感触がしていたっぽい件について情報が整理できたのでまとめ。まずWindowsの色を扱うAPIは色の表現としてCOLORREF型とRGBQUAD型の2種類のどち…

TypeZ性能評価(3)

で、前回の続きでMap()しない版での測定結果。(単位はGB/sec) 項目 5870 7670M 内臓グラ read 148.1 62.5 6.6 write 209.9 339.0 1.8 RW 166.9 329.9 2.0 てな感じで明らかにおかしい。意図した動作をしていないっぽい。 まず5870。明らかにD3D11_USAGE_ST…

TypeZ性能評価(2)

GPUのボトルネックを探る で、肝心の外付けGPUなんだけど。まぁスペックレベルですでに死亡フラグが立ってるとかそういう話もありますが。 まず机上から検証してみる。 コンピューティングパワー GPU-Zで見てみると480SPで600MHzなのでスペック上のコンピュ…

ID3DX10Fontがいなくなった件

とりあえずそろそろFPS表示したいなぁとか思いつつ調べてみたら、DirectX11になってからSpriteさんとかFontさんがいなくなったらしい。ので、自分で作らなければならない。(実は11からも呼び出せるとかってオチじゃなければ(^^;) ってことで、とりあえず昔懐…

Shadow Volume(3)

前回エッジ検出アルゴリズムを整理したので、今回は残りのアルゴリズムを整理。 Shadowポリゴン(Shadow Volume) Shadowポリゴンの作り方だけど、前回のエッジ検出アルゴリズムで「エッジ辺」と決めた辺から四角形(triangle * 2)を引き延ばす。辺を構成する2…

Shadow Volume(2)

この間「整理する」って言ってたShadow Volume関連のアルゴリズムだけど。いろいろ検討していたら、エッジ検出アルゴリズムだけで結構な分量になりそうなのでいったんエッジ検出アルゴリズムだけまとめ。 エッジ判定のキモ Shadow Volumeを作るためには、光…

Shadow Volume(1)

次はGeometry Shaderの性能評価するぞ〜と思って、何か良い応用は無いかなと言うことで西川さんの本*1を読んだら、Shadow VolumeをGeometry Shaderでやるのが良さそうなのでコードを書こうとしたんだけど、文献が基本英語で読む気が起らずしばらく放置状態…(…

テクスチャフォーマットとHLSL記述の対応

調べたことが、ある程度まとまってきたので忘れる前にメモメモ... 以前DXGI_FORMAT_R8G8B8A8_UNORMの「UNORM」って何だろうって思ってた件は、「Windows DirectX Graphics Documentation」ヘルプの「DXGI」−「Reference」−「Enumerations」−「DXGI_FORMAT」…

5870性能評価(4)

測定用に作ったテストプログラムで10K個を超える頂点数のモデルを表示していたら、どうも頂点数4個の時より重いなぁと感じたのでいろいろ調査していたのがようやく答えらしきところまで到達できた… 長かった。 事の発端は、板きれモデルの頂点数を4から一…

テクスチャ付きの板きれを表示するまで

DirectX11で板きれモデルを表示するプログラムを作ってみた。ハマリまくって、ようやく画面いっぱいにテクスチャ画像が表示できるところまで進んだので整理も兼ねてメモ。 まずは今回のバッドノウハウから。 ○バックバッファのフォーマットはDXGI_FORMAT_R8G…

Zのグラフがヤバい件

前回「どこかの書籍に書いてあったような気もする」と書いた透視投影変換後のZ値のグラフがヤバい件だけど、やっぱり以前読んだ書籍に思いっきり書いてあった。*1 14.9「おまけ:zバッファ精度問題」に思いっきり前回載せたのと同じようなグラフが載ってい…

座標変換まとめてみた

DirectX11で板きれを表示するプログラムを作るぞ〜」と意気込んでみたものの、例によって大ハマリしてしまって何が悪いのか分からなくなったので、自分用に"そもそも3Dモデルを表示するまでの座標変換ってどうなってるのか"をまとめ。ワールド変換までは分か…

CreateInputLayoutをContent Assistで入力できるようになるまで

DirectXヘルプをいちいち見ながらコードを組むのが面倒になってきたのでEclipseでアシストの設定を入れてみた…ら再びはまってしまった。 とりあえずいろいろいじってID3D11Device::CreateInputLayoutが入力できるところまで設定できたので自分用にメモ。使っ…

5870性能評価(3)

今回はラスタライザがネックにならないか調べてみる。 今までは4頂点の板きれモデルを使用していたけど、これを細かく分割して頂点数を無駄に増やしてみる。もし頂点数が増えただけでFPSが落ちるようならラスタライザがボトルネックになっているってことに…

5870性能評価(2)

そういえば、なぜか前回の日記のソースコードに「/pp」って謎の文字列が入っているのは何なんだろう…プレビュー画面だと何もないんだけど。まぁ、それはさておき。 前回は5870のコンピューティング性能を見たので、今回からはボトルネックを探る旅に出ようか…

5870性能評価(1)

ComputeShaderでGPUの性能を測定しようと四苦八苦してみたけど、処理が明らかに速すぎる… 処理結果を取りにいっていないせいか、処理そのものがスキップされてるのかも。レンダリングパイプラインへのコマンド発行も非同期的に行われているみたいだし、1発…

シェーダからstoreするとUnordered Access View?

いまだによくわかってないけど、なんとなくCompute Shaderからテクスチャにwriteしたら、Unordered Access View(UAV)経由でstoreになってる気がしてきた。こんなコードをコンパイルすると Texture3D InputBuffer; RWTexture3D OutputBuffer; [numthreads(16,…

ComputeShaderが呼べるようになるまで

前回から何かこう、とてつもなく初歩レベルでつまづいているような気がするけど、まぁ新しい環境でプログラムを作るときはだいたいこんなモンだよね。って感じで作業内容をさらにメモ。 とりあえず今回は、ComputeShaderで何か適当に動かすところまでやって…

D3D11CreateDeviceが呼べるようになるまで

新しい環境でそろそろDirectX 11と遊んでみようとしたらいきなりincludeのレベルではまってしまった…orz DX9の時はそんなに苦労しなかったのに、手厳しい。とりあえずD3D11CreateDevice()呼び出しまでしか確認してないけど、そこにたどり着くまでの作業内容…