I have been stuck with a seemingly random access violation issue occuring in atioglxx.dll for the last few days. After a lot of elimination I have come to the conclusion that there seems to be an issue with using subroutines together with uniform buffer blocks. Here are my findings:
1. Removing the code which sets the subroutines resolve the issue.
2. Subroutines make a direct fetch from the uniform buffer blocks within the shader, this might be the source of the issue.
3. Moving the block values to outside the subroutine (in hopes of getting them loaded) doesn't impact the behavior.
4. Switching to using a function resolves the issue, while retaining the same results.
5. Crash occurs seemingly at a random point in time, although it seems to happen during a draw call.
6. Running it through CodeXL or PerfStudio produce no errors, although the access violation still occurs.
7. Debug output is silent.
8. Increasing/decreasing UBO size has no impact.
Running with the latest Crimson driver on Windows 10 on a R9 Fury.