1
2
错误在于您的使用方式
作用 只需查看规格: 你基本上没有提供偏移量,我猜你为什么没有得到任何编译器错误,因为你缺少一个参数 代码示例:
编辑后的答案以反映评论中的请求: GPU可能会在管道的不同级别使用缓存,因此BufferObject中的更改不会从管道的其他阶段立即可见。指定目标的内存屏障强制一致性,以便屏障之前的每个写入操作在屏障之后都可见。如果有任何写入操作 之后 那你就麻烦了。
您提到了一个长时间的计算,那么(假设没有驱动程序错误)SSBO的当前内容可能取决于纹理。因此,纹理上的内存屏障确保SSBO的内容具有纹理数据。然后,SSBO上的内存屏障似乎是不必要的,因为当访问SSBO时,它已经具有正确的数据(在这种情况下,理论上需要设置纹理和SSBO位:在更新SSBO之前设置纹理屏障,在使用之前设置SSBO屏障)。 如果您可以用小代码重现问题,那么它可能是一个驱动程序错误。 请记住在使用不同硬件的多台机器上测试代码,因为由于缺少内存屏障,您仍然可能会得到意外的结果。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |