|
|
1
2
错误在于您的使用方式
作用 只需查看规格: 你基本上没有提供偏移量,我猜你为什么没有得到任何编译器错误,因为你缺少一个参数 代码示例:
编辑后的答案以反映评论中的请求: GPU可能会在管道的不同级别使用缓存,因此BufferObject中的更改不会从管道的其他阶段立即可见。指定目标的内存屏障强制一致性,以便屏障之前的每个写入操作在屏障之后都可见。如果有任何写入操作 之后 那你就麻烦了。
您提到了一个长时间的计算,那么(假设没有驱动程序错误)SSBO的当前内容可能取决于纹理。因此,纹理上的内存屏障确保SSBO的内容具有纹理数据。然后,SSBO上的内存屏障似乎是不必要的,因为当访问SSBO时,它已经具有正确的数据(在这种情况下,理论上需要设置纹理和SSBO位:在更新SSBO之前设置纹理屏障,在使用之前设置SSBO屏障)。 如果您可以用小代码重现问题,那么它可能是一个驱动程序错误。 请记住在使用不同硬件的多台机器上测试代码,因为由于缺少内存屏障,您仍然可能会得到意外的结果。 |
|
AstralHex · 矩阵乘法代码工作不正常 11 月前 |
|
|
Giogre · 为包含许多数值字段的简单“struct”重载比较运算符 11 月前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 11 月前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 11 月前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 11 月前 |