[英]How to increment numbers in hlsl
我是着色器的新手,我不知道如何在计算着色器(HLSL)中增加数字。
groupshared uint i = 0;
#pragma kernel CSMain
[numthreads(8,1,1)]
void CSMain (uint3 id : SV_DispatchThreadID)
{
if(some_condition)
{
i++;
}
if(i == 10) do_something();
}
很明显上面的代码不起作用。 i++ 导致竞态条件(顺便说一句,我在几个小时前了解了竞态条件)。
我在 RWStructuredBuffer 方面取得了部分成功。
RWStructuredBuffer<int> i;
#pragma kernel CSMain
[numthreads(8,1,1)]
void CSMain (uint3 id : SV_DispatchThreadID)
{
if(some_condition)
{
int value_before_increment = i.IncrementCounter();
}
// if(i == 10) do_something();
// Can't access the value of i without continuous increment
}
我读了一些 MS 文档,要么他们的文档很烂,要么我的脑细胞很烂。 如果您可以提供一些对初学者友好的博客或文章或帮助我解答问题,那将非常有帮助。 我知道不允许在 Stack Overflow 上询问文章推荐,但有经验的人可以指导。
原子函数:
要访问新资源类型或共享 memory,请使用互锁的内在 function。 联锁功能保证以原子方式运行。 也就是说,它们保证按照编程的顺序发生。
您应该使用InterlockedAdd
function。
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.