Aeolius, Wyvern: Fix the intermittent crash on Linux (issue #45)
Aeolius, Wyvern: Fix the intermittent crash on Linux (issue #45)

The recent changes to stride handling were completely broken.  This caused
accesses to uniform buffer backing memory to be out of bounds and ended up
clobbering memory close by.  Hence the random behaviour.  The spirv-reflect
tool now determines whether the uniform in the block is an array or not
(the trick is to use the base type from the member_types array.)  This then
translates into a stride of 0 or 16.

This is obviously a stop-gap solution to prevent the crashes.  Stride
handling would need to be significantly more advanced to handle general
situations. Here are some of notes on layout from the OpenGL and Vulkan
specifications:

OpenGL 4.5 specification 7.6.2.2 Standard Uniform Block Layout:

  If the member is an array of scalars or vectors, the base alignment and array
  stride are set to match the base alignment of a single array element, according
  to rules (1), (2), and (3), and rounded up to the base alignment of a vec4. The
  array may have padding at the end; the base offset of the member following
  the array is rounded up to the next multiple of the base alignment

Vulkan specification 14.5.4. Offset and Stride Assignment

  The std140 layout in GLSL satisfies these rules.

Added back the debug asserts to catch out-of-bounds accesses to uniform
buffers in future.

StrayLightning/aeolius,StrayLightning/aeolius,StrayLightning/aeolius