我需要为我的片段着色器调用原子地将矢量添加到某些图像,因为更多的片段可以访问相同的纹素。如何在片段着色器中原子地添加矢量
所以我的问题是,这样做的最好方法是什么?
每个片段应该添加两个向量,一个应具有16位的部件和其他8个组件。
我想过一个自旋锁,但每一个自旋锁我试图用崩溃......
另一种选择是用packSnorm2x16/4x8
数据打包成3个R32UI
纹理atomicAdd
,首先将包含的xy
16位向量,所述第二将包含16位矢量的z
和第三纹理将包含整个8比特向量(packSnorm4x8
),但问题是,总和将超过1.0f
,但(un)packSnorm
正在与签名归一化值,我甚至不知道你是否可以添加打包的数据并获得好的结果。
您是否考虑过其他选项来避免原子,比如在稍后的传递中累积矢量或者在计算着色器中使用本地组存储?你能详细说明你需要什么吗? – Quinchilion
我从灯光角度渲染场景,每个片段都应该添加从光源到片段的方向为3D纹理,这些纹理包含我的体素化场景(用于体素锥形追踪),此刻我是只是存储从光线到体素中心的方向,但那不是准确的,我应该存储入射光线方向的平均向量。 – FamZ
因此,如果我理解正确,那么每个片段都会沿着它的射线前进,并将射线方向添加到它穿过的每个体素?或者多个片段如何访问相同的纹理元素? – Quinchilion