diff options
author | Eric Anholt <eric@anholt.net> | 2020-04-20 12:50:19 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2020-04-21 13:03:29 -0700 |
commit | 0c767078e749df995fc1358ba89b9a4d503cd2c1 (patch) | |
tree | a56db637b50635c3229be94fdad4d65845f01085 /run.c | |
parent | d050b03bcec1445e0229339f7225769a4c1d0739 (diff) |
run: Add support for running on GL 1.4 + ARB_shader_objects.
Fixes immediate crash in epoxy on freedreno a200.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Diffstat (limited to 'run.c')
-rw-r--r-- | run.c | 31 |
1 files changed, 25 insertions, 6 deletions
@@ -846,6 +846,7 @@ main(int argc, char **argv) if (type == TYPE_CORE || type == TYPE_COMPAT || type == TYPE_ES) { GLuint prog = glCreateProgram(); GLint param; + int gl_version = epoxy_gl_version(); glObjectLabel(GL_PROGRAM, prog, strlen(current_shader_name), current_shader_name); @@ -858,17 +859,26 @@ main(int argc, char **argv) glShaderSource(s, 1, &shader[i].text, &shader[i].length); glCompileShader(s); - glGetShaderiv(s, GL_COMPILE_STATUS, ¶m); + if (gl_version < 20) + glGetObjectParameterivARB(s, GL_COMPILE_STATUS, ¶m); + else + glGetShaderiv(s, GL_COMPILE_STATUS, ¶m); if (unlikely(!param)) { GLchar log[4096]; GLsizei length; - glGetShaderInfoLog(s, 4096, &length, log); + if (gl_version < 20) + glGetInfoLogARB(s, 4096, &length, log); + else + glGetShaderInfoLog(s, 4096, &length, log); fprintf(stderr, "ERROR: %s failed to compile:\n%s\n", current_shader_name, log); } glAttachShader(prog, s); - glDeleteShader(s); + if (gl_version < 20) + glDeleteObjectARB(s); + else + glDeleteShader(s); } /* takes care of pre-bindings */ @@ -882,11 +892,17 @@ main(int argc, char **argv) glLinkProgram(prog); - glGetProgramiv(prog, GL_LINK_STATUS, ¶m); + if (gl_version < 20) + glGetObjectParameterivARB(prog, GL_LINK_STATUS, ¶m); + else + glGetProgramiv(prog, GL_LINK_STATUS, ¶m); if (unlikely(!param)) { GLchar log[4096]; GLsizei length; - glGetProgramInfoLog(prog, sizeof(log), &length, log); + if (gl_version < 20) + glGetInfoLogARB(prog, 4096, &length, log); + else + glGetProgramInfoLog(prog, sizeof(log), &length, log); fprintf(stderr, "ERROR: failed to link program:\n%s\n", log); @@ -942,7 +958,10 @@ main(int argc, char **argv) free(prog_buf); } - glDeleteProgram(prog); + if (gl_version < 20) + glDeleteObjectARB(prog); + else + glDeleteProgram(prog); } else { for (unsigned i = 0; i < num_shaders; i++) { GLuint prog; |