Add support for compute shaders.
[movit] / init.cpp
index d312cd8..7f2f5cc 100644 (file)
--- a/init.cpp
+++ b/init.cpp
@@ -15,7 +15,7 @@ namespace movit {
 bool movit_initialized = false;
 MovitDebugLevel movit_debug_level = MOVIT_DEBUG_ON;
 float movit_texel_subpixel_precision;
-bool movit_timer_queries_supported;
+bool movit_timer_queries_supported, movit_compute_shaders_supported;
 int movit_num_wrongly_rounded;
 MovitShaderModel movit_shader_model;
 
@@ -310,6 +310,16 @@ bool check_extensions()
        movit_timer_queries_supported =
                (epoxy_gl_version() >= 33 || epoxy_has_gl_extension("GL_ARB_timer_query"));
 
+       // Certain effects have compute shader implementations, which may be
+       // more efficient than the normal fragment shader versions.
+       // GLSL 3.10 supposedly also has compute shaders, but I haven't tested them,
+       // so we require desktop OpenGL.
+       movit_compute_shaders_supported =
+               (epoxy_is_desktop_gl() &&
+                (epoxy_gl_version() >= 43 ||
+                 (epoxy_has_gl_extension("GL_ARB_compute_shader") &&
+                  epoxy_has_gl_extension("GL_ARB_shader_image_load_store"))));
+
        return true;
 }