message: Don't crash in glslang reflection fallback path if shaders don't compile
diff: @@ -205,8 +205,13 @@ void WrappedOpenGL::ShaderData::ProcessCompilation(WrappedOpenGL &drv, ResourceI
  // if we don't have program_interface_query, need to compile the shader with glslang to be able
  // to reflect with. This is needed on capture or replay
  if(!HasExt[ARB_program_interface_query] && status == 1)
  + {
  glslangShader = CompileShaderForReflection(rdcspv::ShaderStage(ShaderIdx(type)), sources);
  + if(glslangShader == NULL)
  + RDCERR("glslang shader failed to compile, reflection will fail");
  + }
  +
  if(IsReplayMode(drv.GetState()) && !drv.IsInternalShader())
  {
  // no shaders made under this point should be reflected themselves, they're only used for
  @@ -249,11 +254,18 @@ void WrappedOpenGL::ShaderData::ProcessCompilation(WrappedOpenGL &drv, ResourceI
  // In this case we forcibly emulate ARB_program_interface_query.
  RDCASSERT(!HasExt[ARB_program_interface_query]);
  - // to do this, we need to create an empty program object and manually configure its glslang
  - // program.
  + if(glslangShader == NULL)
  + {
  + RDCERR("Couldn't compile shader via glslang - functionality will be broken.");
  + }
  + else
  + {
  + // to do this, we need to create an empty program object and manually configure its
  + // glslang program.
  GLuint fakeProgram = drv.glCreateProgram();
  - ResourceId progid = drv.GetResourceManager()->GetResID(ProgramRes(drv.GetCtx(), fakeProgram));
  + ResourceId progid =
  + drv.GetResourceManager()->GetResID(ProgramRes(drv.GetCtx(), fakeProgram));
  ProgramData &progDetails = drv.m_Programs[progid];
  @@ -266,6 +278,7 @@ void WrappedOpenGL::ShaderData::ProcessCompilation(WrappedOpenGL &drv, ResourceI
  drv.glDeleteProgram(fakeProgram);
  }
  + }
  if(reflected)
  {
  