Query 系を少しだけ試してみました。やはり RADEON HD2900XT でも
同じように使えます。TIMESTAMP 取れました。よし。
ただドライバによって結果が異なるかもしれませんが、
GeForce8800GTS (163.11) では ID3D10Query の PIPELINE_STATISTICS の
CInvocations, CPrimitives が 0 のままです。
RADEON HD2900XT だとそれっぽい値が入っています。
IA 系の基礎的なパラメータは一緒ですが、CI~CP~以外にも値の
違うものがあります。例えば VSinvocations など。
おそらく描画に StreamOutput を使っているせいだと思いますが、
RADEON は IAVertices と同じ値で、GeForce はなぜか半分以下の値です。
SO_STATISTICS のPrimitivesStorageNeeded は、GeForce の場合
NumPrimitivesWritten と同じですが、RADEON の場合やたらと大きな値です。
基本的に動的な増減も無く、3 in 3 out しか使ってないのでこれは
計算方法の違いでしょうか。
まったく同じデータを表示してみた結果の例
・キャラクタの表示なので描画面積はかなり小さい
・ボーンアニメーションしているので、Pixel 数が常に変動しており誤差がある
・結果を表示するフォント描画の分も計算に含まれている
●GeForce8800GTS 163.11
IAVertices 4092
IAPrimitives 1504
VSInvocations 1893
GSInvocations 115
GSPrimitives 230
CInvocations 0
CPrimitives 0
PSInvocations 9034
NumPrimitivesWritten 95
PrimitivesStorageNeeded 95
●RADEON HD2900XT 07.7
IAVertices 4100
IAPrimitives 1512
VSInvocations 4100
GSInvocations 123
GSPrimitives 246
CInvocations 1635
CPrimitives 1635
PSInvocations 9656
NumPrimitivesWritten 95
PrimitivesStorageNeeded 1389
Primitive 数が 8 個だけ RADEON の方が多いのは、上記の計測値もポリゴン
でフォント描画しているためです。つまり、CInvocations, CPrimitives,
PrimitivesStorageNeeded の値でちょうど 8桁分、数字が多いわけです。
データもプログラムも同一です。
もう少しライブラリを整備したらきちんと調べていきます。
ちなみに Counter はどちらも全滅でした。
D3D10_COUNTER_INFO は両者とも
LastDeviceDependentCounter= 0
NumSimultaneousCounters= 0
NumDetectableParallelUnits= 1