void Context::setupDriverWorkarounds() { #define _setRequiredVersion(extension, version) \ if(_extensionRequiredVersion[Extensions::extension::Index] < Version::version) \ _extensionRequiredVersion[Extensions::extension::Index] = Version::version #ifndef MAGNUM_TARGET_GLES /* This extension causes crash in GLSL compiler on AMD linux drivers 13.251 */ if(detectedDriver() & DetectedDriver::AMD) _setRequiredVersion(GL::ARB::explicit_uniform_location, None); #ifdef CORRADE_TARGET_WINDOWS /* On Windows Intel drivers ARB_shading_language_420pack is exposed in GLSL even that the extension (e.g. binding keyword) is not supported */ if((detectedDriver() & DetectedDriver::IntelWindows) && !isExtensionSupported<Extensions::GL::ARB::shading_language_420pack>()) _setRequiredVersion(GL::ARB::shading_language_420pack, None); #endif /* Layout qualifier causes compiler error with GLSL 1.20 on Mesa, GLSL 1.30 on NVidia and 1.40 on Mac OS X */ /** @todo Different version on different vendors? */ _setRequiredVersion(GL::ARB::explicit_attrib_location, GL320); _setRequiredVersion(GL::ARB::explicit_uniform_location, GL320); _setRequiredVersion(GL::ARB::shading_language_420pack, GL320); #endif /* Disable extensions not available on NaCl */ #ifdef CORRADE_TARGET_NACL _setRequiredVersion(GL::EXT::multi_draw_arrays, None); _setRequiredVersion(GL::EXT::debug_label, None); _setRequiredVersion(GL::EXT::debug_marker, None); _setRequiredVersion(GL::EXT::disjoint_timer_query, None); _setRequiredVersion(GL::EXT::separate_shader_objects, None); _setRequiredVersion(GL::EXT::multisampled_render_to_texture, None); _setRequiredVersion(GL::EXT::robustness, None); _setRequiredVersion(GL::KHR::debug, None); _setRequiredVersion(GL::NV::read_buffer_front, None); _setRequiredVersion(GL::OES::mapbuffer, None); _setRequiredVersion(GL::ANGLE::framebuffer_blit, None); _setRequiredVersion(GL::ANGLE::framebuffer_multisample, None); _setRequiredVersion(GL::ANGLE::instanced_arrays, None); _setRequiredVersion(GL::APPLE::framebuffer_multisample, None); _setRequiredVersion(GL::EXT::discard_framebuffer, None); _setRequiredVersion(GL::EXT::blend_minmax, None); _setRequiredVersion(GL::EXT::texture_storage, None); _setRequiredVersion(GL::EXT::map_buffer_range, None); _setRequiredVersion(GL::EXT::instanced_arrays, None); _setRequiredVersion(GL::EXT::draw_instanced, None); _setRequiredVersion(GL::NV::draw_buffers, None); _setRequiredVersion(GL::NV::fbo_color_attachments, None); // ?? _setRequiredVersion(GL::NV::read_buffer, None); _setRequiredVersion(GL::NV::draw_instanced, None); _setRequiredVersion(GL::NV::framebuffer_blit, None); _setRequiredVersion(GL::NV::framebuffer_multisample, None); _setRequiredVersion(GL::NV::instanced_arrays, None); _setRequiredVersion(GL::OES::texture_3D, None); _setRequiredVersion(GL::OES::vertex_array_object, None); #endif #undef _setRequiredVersion }
void Context::setupDriverWorkarounds() { #define _setRequiredVersion(extension, version) \ if(_extensionRequiredVersion[Extensions::extension::Index] < Version::version) \ _extensionRequiredVersion[Extensions::extension::Index] = Version::version #ifndef MAGNUM_TARGET_GLES #ifdef CORRADE_TARGET_WINDOWS if((detectedDriver() & DetectedDriver::IntelWindows) && !isExtensionSupported<Extensions::GL::ARB::shading_language_420pack>() && !isDriverWorkaroundDisabled("intel-windows-glsl-exposes-unsupported-shading-language-420pack")) _setRequiredVersion(GL::ARB::shading_language_420pack, None); #endif if(!isDriverWorkaroundDisabled("no-layout-qualifiers-on-old-glsl")) { _setRequiredVersion(GL::ARB::explicit_attrib_location, GL320); _setRequiredVersion(GL::ARB::explicit_uniform_location, GL320); _setRequiredVersion(GL::ARB::shading_language_420pack, GL320); } #endif #ifdef CORRADE_TARGET_NACL if(!isDriverWorkaroundDisabled("nacl-missing-extension-entrypoints")) { _setRequiredVersion(GL::EXT::multi_draw_arrays, None); _setRequiredVersion(GL::EXT::debug_label, None); _setRequiredVersion(GL::EXT::debug_marker, None); _setRequiredVersion(GL::EXT::disjoint_timer_query, None); _setRequiredVersion(GL::EXT::separate_shader_objects, None); _setRequiredVersion(GL::EXT::multisampled_render_to_texture, None); _setRequiredVersion(GL::EXT::robustness, None); _setRequiredVersion(GL::KHR::debug, None); _setRequiredVersion(GL::NV::read_buffer_front, None); _setRequiredVersion(GL::OES::mapbuffer, None); _setRequiredVersion(GL::ANGLE::framebuffer_blit, None); _setRequiredVersion(GL::ANGLE::framebuffer_multisample, None); _setRequiredVersion(GL::ANGLE::instanced_arrays, None); _setRequiredVersion(GL::APPLE::framebuffer_multisample, None); _setRequiredVersion(GL::EXT::discard_framebuffer, None); _setRequiredVersion(GL::EXT::blend_minmax, None); _setRequiredVersion(GL::EXT::texture_storage, None); _setRequiredVersion(GL::EXT::map_buffer_range, None); _setRequiredVersion(GL::EXT::instanced_arrays, None); _setRequiredVersion(GL::EXT::draw_instanced, None); _setRequiredVersion(GL::NV::draw_buffers, None); _setRequiredVersion(GL::NV::fbo_color_attachments, None); // ?? _setRequiredVersion(GL::NV::read_buffer, None); _setRequiredVersion(GL::NV::draw_instanced, None); _setRequiredVersion(GL::NV::framebuffer_blit, None); _setRequiredVersion(GL::NV::framebuffer_multisample, None); _setRequiredVersion(GL::NV::instanced_arrays, None); _setRequiredVersion(GL::OES::texture_3D, None); _setRequiredVersion(GL::OES::vertex_array_object, None); } #endif #undef _setRequiredVersion }