Search Issue Tracker
By Design
Votes
0
Found in
2019.4
2019.4.14f1
2020.2
2020.3
2021.1
2021.2
Issue ID
1319312
Regression
No
Incorrect buffer values when computing shaders on AMD
Reproduction steps:
1. Download and open the "computeBuffers.zip" project
2. Build the project
3. Open the built project with "RenderDoc"
4. In the RenderDoc toolbar, press "Window" > "Resource Inspector"
5. Capture a frame and double-click on it
6. In the Resource Inspector window, inspect the "indirectDataBuffer_TestAMD" buffer
Expected result: Buffer contents don't differ when using AMD or Nvidia
Actual result: When using AMD, buffer contents differ from when using Nvidia
Reproducible with: 2019.4.22f1, 2020.2.4f1, 2020.3.0f1, 2021.1. 0b11, 2021.2.0a8
Could not test with: 2018.4 (Build errors)
Add comment
All about bugs
View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.
Latest issues
- Mono Windows Builds don't produce full log callstacks when generating logs
- AssetBundles fail to load when running in Built Players for Mobile Devices
- UI elements with text gets bigger and grey when Player window is moved to another screen with different resolution
- System name accepts multiline text but crops it on confirmation, duplicates input, and shrinks the field when empty
- UI element scale and position are wrong in project build when DRS is changed with HDR and Software Dynamic Resolution enabled
Resolution Note:
Not a bug. Buffer created with indirect arg usage only, but used also as a structured buffer (compute shader write). DX11 doesn't support structured buffer and indirect argument usage for the same buffer. Indirect argument buffers must be either raw or typed buffers if you want to write to them on GPU side.
Would should get DX11 validation layer error for your use case. AMD hardware is AoSoA swizzling structured buffers, so their data layout is not compatible with indirect argument buffer layout. Nvidia has identical data layout for both cases. This explains why the incorrect usage of DX11 resource flags works fine on Nvidia but breaks AMD. Please enable DX11 validation layers to get more info about this issue.
The correct flag combination is ComputeBufferType.IndirectArguments | ComputeBufferType.Raw. Use HLSL RWByteAddressBuffer for writing to indirect argument buffer.