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
- Hub shows 6.0 as Latest LTS when opening a project after deleting its 6.3 Editor version
- Localization Group Rules bypasses Locale logic when SharedGroup asset provided
- UI Toolkit World UI Text Field unfocuses immediately when clicking on it using XR Controller
- Crash on CallWindowProcW when entering Play mode for the second time and running the Editor in the background while using System.Windows.Forms functions
- 2D Freeform Light shadows disappear when light center is offset from shape bounds
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.