我使用統一,我想發送一個字節數組到GPU使用HLSL。我知道ByteAddressBuffer,但我不知道如何使用它。我有點想知道如何發送「字節」到GPU。我想在我的計算着色器中有一個StructuredBuffer<byte>
。發送一個字節[]到GPU?
回答
對於着色器部分,可以使用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或某物)時,移位操作應該在着色器中可用
我知道如何使用結構化緩衝區,並且我知道如何將ints發送到GPU。我想知道如何發送「字節」到GPU @xyLe_ – None
在HLSL和CG中都沒有'byte'數據類型(這是默認情況下統一使用的)。在CG中你可以用'char'去,但是你不能只用'int'去嗎? – TheDjentleman
如果你真的擁有已使用的空間,那麼只需將4個字節裝入1個int並使用位移 – TheDjentleman
- 1. CUDA:從GPU發送數據到GPU
- 2. 發送一個字節net.Conn去
- 3. QT串行發送一個字節
- 4. 通過藍牙發送一個字節
- 5. 如何發送字節數組到一個函數?
- 6. DMA到UART只發送第一個字節
- 7. Android應用程序發送一個字節到Arduino板
- 8. 如何發送一個字節數組到Swift 3中?
- 9. 從PHP發送一個字節數組到WCF
- 10. 發送超過32768個字節,一旦到其他
- 11. 將大字節流緩衝區發送到另一個進程
- 12. 發送空字節?
- 13. Three.js紋理何時發送到GPU?
- 14. 字節到與TCP套接字發送的字節
- 15. 從一個站點發送字節數組到另一個(並返回)
- 16. 將ASCII字節流發送到管道
- 17. 發送字節命令到Apache TelnetClient
- 18. 從網站發送字節到串口
- 19. 從javascript發送字節數組到silverlight
- 20. 發送字節到服務器
- 21. UWP UART發送/收到字節錯誤
- 22. 發送字節[]到WCF服務
- 23. AudioQueue字節發送到服務器
- 24. 發送字節串到串口設備
- 25. 嘗試發送2個字節的字符串到服務器
- 26. 發送一個JavaScript字符串到PHPmailer
- 27. 發送一個字符到subprocess.Popen
- 28. 發送一個字符串到QLineEdit
- 29. 字節或Int?通過套接字發送哪一個更快?
- 30. 用C#中的.net UDP套接字發送一個字節
爲什麼我得到太多的低票?有什麼我錯過了嗎? – None
你的問題並沒有真正表明/你試圖解決你的問題。 (我想這就是爲什麼) – TheDjentleman