2016-11-26 69 views
1

將數據發送到頂點着色器時,directX中的速度更快。float4 vs 4 floatX in directX

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

VS

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

胡亂猜測是說,第一個是更快,因爲它在128位寄存器組。但我認爲有更好的答案。

+0

根據常量緩衝區的包裝規則(https://msdn.microsoft.com/en-us/library/windows/desktop/bb509632(v=vs.85).aspx),它們將被同樣打包成一個float4寄存器,所以我會假設沒有任何區別,但第二個是更可讀性和可維護性:) – Gnietschow

+0

這是輸入彙編程序在這裏,所以包裝規則不適用 – catflier

回答

2

如果您正在考慮CPU和GPU之間的內存傳輸: 如果這些都來自相同的緩衝區對象,那麼它應該沒有關係。第二個是對着色器已知的數據的解釋,它與正在傳輸的實際數據無關。在情況2中使用多個頂點流的情況下,它可能具有不同的性能,但是這種差異與着色器中使用的格式不相關。

如果您擔心頂點緩存效率: 在這兩種情況下,每個頂點將存儲和檢索16個字節,因此這裏也沒有區別。