Exemplo n.º 1
0
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
}
Exemplo n.º 2
0
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
}