GLSL compile fix, compare dot() result against scalar
Use correct serialised target enum for replay-side
Add function to go from binding or cube face to texture target
Use sanitised texture target
# mips should be calculated as GL_TEXTURE_MAX_LEVEL + 1
Only set GL_DEPTH_STENCIL_TEXTURE_MODE if it has a valid value
Respect the maximum number of bindings for indexed buffer binds
Globally store the GL core version and list of extensions

* For now we just store the highest core version and only re-fetch the
  extensions when we see a context of a higher version that before. This is
  just working off the assumption that there might be a low-version context
  (especially on windows where it's necessary before getting a 3.2+ core
  context), but otherwise all contexts will be the same level.
Check for version > 4.4 or GL_ARB_enhanced_layouts
With some regret, add hack on AMD to not use VERTEX_BINDING_BUFFER

* AMD drivers (at least on linux, haven't tested windows) don't recognise
  VERTEX_BINDING_BUFFER, so instead we create a dummy VAO with each attrib
  bound to the corresponding buffer and then use
  VERTEX_ATTRIB_ARRAY_BUFFER_BINDING to query the buffer out.
Fix for hook fetching/populating on capture and replay