2016-11-26 2 views
1

データを頂点シェーダに送るときの方がdirectXが速い。float4 vs 4 float in directX

struct VertexInputType 
{ 
    float2 pos : POSITION; 
    float distance : DISTANCE; 
    float size : SIZE; 
} 

struct VertexInputType 
{ 
    float4 data : DATA; // x,y - POSITION, z - distance, w - size 
} 

野生の推測では、それは128ビットのレジスタにパックするため、最初の1が高速であると言うことだろう。しかし、私は良い答えがあると思っています。

+0

定数バッファ(https://msdn.microsoft.com/en-us/library/windows/desktop/bb509632(v=vs.85).aspx)のパッキング規則から、それらは両方とも等しくパックされていますfloat4-registerなので、違いはないと思いますが、2番目の方がはるかに読みやすくメンテナンス可能です:) – Gnietschow

+0

これは入力アセンブラですので、パッキングルールは適用されません – catflier

答えて

2

CPUとGPU間のメモリ転送について考えている場合: これらがすべて同じバッファオブジェクトから来ている場合は、問題ではありません。 2つ目は、シェーダに知られているデータの解釈であり、実際のデータが転送されていることとは何の関係もありません。ケース2で複数の頂点ストリームを使用する場合、パフォーマンスは異なるかもしれませんが、この違いはシェーダで使用されているフォーマットとは関係ありません。

頂点キャッシュの効率が心配な場合: どちらの場合も、16バイトが1つの頂点につき格納され、取得されるので、ここでも違いはありません。