繁体   English   中英

如何在 hlsl 中增加数字

[英]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。

问题未解决?试试以下方法:

如何在 hlsl 中增加数字

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM