Hi all! There are some latest bugs in AMD/NV OpenGL driver:
1. Program queries, that generates GL_INVALID_ENUM on AMD:
glGetProgramiv(glProgram, GL_GEOMETRY_INPUT_TYPE, &val);
glGetProgramiv(glProgram, GL_GEOMETRY_OUTPUT_TYPE, &val);
glGetProgramiv(glProgram, GL_GEOMETRY_VERTICES_OUT, &val);
glGetProgramiv(glProgram, GL_GEOMETRY_SHADER_INVOCATIONS, &val);
// where glProgram is valid GL program object
2. Global queries, that generates GL_INVALID_ENUM on AMD:
glGetIntegerv(GL_MAX_VERTEX_IMAGE_UNIFORMS, &val);
glGetIntegerv(GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS, &val);
glGetIntegerv(GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS, &val);
glGetIntegerv(GL_MAX_GEOMETRY_IMAGE_UNIFORMS, &val);
glGetIntegerv(GL_MAX_FRAGMENT_IMAGE_UNIFORMS, &val);
glGetIntegerv(GL_MAX_COMBINED_IMAGE_UNIFORMS, &val);
3. Internal format queries, that generates GL_INVALID_ENUM on AMD:
glGetInternalformativ(any_target, GL_SRGB8, GL_NUM_SAMPLE_COUNTS / GL_SAMPLES, …);
glGetInternalformativ(any_target, GL_SRGB8_ALPHA8, GL_NUM_SAMPLE_COUNTS / GL_SAMPLES, …);
glGetInternalformativ(any_target, GL_RGB9_E5, GL_NUM_SAMPLE_COUNTS / GL_SAMPLES, …);
// NOTE: all this formats are renderable
4. Very old NV glClearBuffer bug:
// leads to GL_INVALID_VALUE on NV with message: <drawbuffer> exceeds the maximum number of supported draw buffers
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glClearBufferfv(GL_COLOR, GL_BACK, color);
// WORKAROUND (but out of spec)
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glClearBufferfv(GL_COLOR, 0, color);
P.S. I hate AMD Very slow, very buggy driver…
P.P.S. to be continued…