hlsl - 调用 RWByteAddressBuffer.InterlockedAdd 时会发生什么?

标签 hlsl

我通常使用 OpenGL 进行编程,但我需要从 HLSL 翻译一些代码。

我看过RWByteAddressBuffer的文档,但我不确定它如何与 InterlockedAdd 一起使用.

据说,RWByteAddressBuffer是按字节寻址的。不过,我认为 InterlockedAdd 适用于 uint,它们是 32 位无符号整数。

我的疑问是,当我这样做时会发生什么?

uint c;
buffer.InterlockedAdd(0, 1, c);

我是递增缓冲区的第一个字节,还是缓冲区的第一个 32 位字?如果我使用的偏移量不是 4 的倍数会怎样?

最佳答案

当你打电话时:

uint c;
uint location = 0;
buffer.InterlockedAdd(location, 1, c);

位置以字节为单位指定,但您确实在前 4 个字节(int 大小)上加了 1。

根据文档,ByteAddressBuffer/RWByteAddressBuffer 内存偏移量需要是 4 的倍数,其他值未定义。

参见(字节地址缓冲区部分):https://learn.microsoft.com/en-us/windows/win32/direct3d11/direct3d-11-advanced-stages-cs-resources

关于hlsl - 调用 RWByteAddressBuffer.InterlockedAdd 时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71845154/

相关文章:

c++ - DirectX Clip 空间纹理坐标

directx-11 - HSLS float1,..., float4 及其字段

directx - HLSL 错误 X3086 : DX9-style 'compile' syntax is deprecated in strict mode

unity-game-engine - 如何在着色器中定义自定义预处理器宏?

geometry - 如何在 GLSL/HLSL 中实现 SLERP

c++ - 延迟渲染 : Problems when passing Render Targets as Shader Resource Views to shader

c# - SpriteBatch 的 PixelShader 和 VertexShader 的不同版本

c++ - 添加几何着色器会导致 “shader linkage error”

c++ - Windows Phone 8 上的模糊太慢

c++ - 无法编译 HLSL Hull 着色器代码