我使用统一,我想发送一个字节数组到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