为什么计算着色器会从不变的数据中随机产生不同的结果?

问题描述 投票:0回答:1

我有一个计算着色器,它从RWTexture2D纹理读取像素,并根据点亮的像素修改一些RWStructuredBuffer数据。

如果像素1点亮,则修改数据范围A。如果像素2点亮,则修改数据范围B。等等。>>

在大多数情况下,着色器似乎工作正常。但是随机地,RWTexture2D上的某些点亮/熄灭像素配置会导致着色器随机修改错误的数据。将点亮/熄灭的像素更改回以前可以使用的配置,然后再次可以使用。

着色器不是多线程的,因此没有读写冲突。它可以在不到1ms的时间内完成,因此不会跨越多个帧。

几乎可以肯定,这要么是(a)代码中的错误,要么是(b)我误解了的有关计算着色器的基本知识。假设它是一个错误,我已经尝试了好几天,直到重写代码为止。

所以,我希望这种声音能与某人敲响?当计算着色器的行为像这样随机发生时,我应该在哪里寻找错误?

非常感谢。乐于在需要时提供更多信息,我只是不想让人们在不需要时进行冗长的解释。

我有一个计算着色器,可从RWTexture2D纹理读取像素,并根据点亮的像素修改一些RWStructuredBuffer数据。如果像素1点亮,则会修改数据范围A。如果...

unity3d graphics compute-shader
1个回答
0
投票

解决了。当您依次Dispatch()多个内核时,它们会同时运行。我以为Dispatch()等待内核完成。我已经对代码进行了重组,可以在一个内核中完成所有工作,并且可以按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.