2016-11-23 25 views
-5

我使用統一,我想發送一個字節數組到GPU使用HLSL。我知道ByteAddressBuffer,但我不知道如何使用它。我有點想知道如何發送「字節」到GPU。我想在我的計算着色器中有一個StructuredBuffer<byte>發送一個字節[]到GPU?

+0

爲什麼我得到太多的低票?有什麼我錯過了嗎? – None

+0

你的問題並沒有真正表明/你試圖解決你的問題。 (我想這就是爲什麼) – TheDjentleman

回答

1

對於着色器部分,可以使用StructuredBuffer。我不清楚HLSL中是否有字節數據類型,所以我將在這個例子中使用整數。

shader代碼:

Shader "Name" { 
    SubShader { 
     ... 
     StructuredBuffer<int> _Data; 
     ... 
    } 
} 

在C#的一面,你必須對應於您的着色器材料,讓我們把它叫做mat,和你的字節數組bArr。此外,你必須創建一個gpu緩衝區,然後你可以綁定到你的着色器:ComputeBuffer dataBuf = new ComputeBuffer(bArr.Length, sizeof(int))

最後,加載您的陣列到GPU dataBuf.SetData(bArr)和緩衝綁定到你的shader mat.SetBuffer("_Data", dataBuf);

編輯

我想在我的計算着色器StructuredBuffer <字節>。

從我讀過的,你不能。 HLSL中沒有byte數據類型(也就是CG,這是統一使用的)。上面的例子是一個標準的頂點/片段着色器,爲了使用計算着色器,我會在您的其他問題上將您引用到我的answer。將其擴展到您的需求。正如我已經寫了評論,如果你不想爲你的byte數據使用int並因此浪費24位,你可以通過位移將4 bytes打到1 int。當使用高於4的着色器模型(DX10.1或某物)時,移位操作應該在着色器中可用

+0

我知道如何使用結構化緩衝區,並且我知道如何將ints發送到GPU。我想知道如何發送「字節」到GPU @xyLe_ – None

+0

在HLSL和CG中都沒有'byte'數據類型(這是默認情況下統一使用的)。在CG中你可以用'char'去,但是你不能只用'int'去嗎? – TheDjentleman

+0

如果你真的擁有已使用的空間,那麼只需將4個字節裝入1個int並使用位移 – TheDjentleman