<!--

============================================
Application bugs worked around in this file:
============================================

* Unigine Heaven 3.0 and older contain too many bugs and can't be supported
  by drivers that want to be compliant.

* Various Unigine products don't use the #version and #extension GLSL
  directives, meaning they only get GLSL 1.10 and no extensions for their
  shaders.
  Enabling all extensions for Unigine fixes most issues, but the GLSL version
  is still 1.10.

* If ARB_sample_shading is supported, Unigine Heaven 4.0 and Valley 1.0 uses
  an #extension directive in the middle of its shaders, which is illegal
  in GLSL.

* Dying Light and Dead Island Definitive Edition redeclare vertex shader
  built-ins (specifically gl_VertexID), which causes the vertex shaders to fail
  to compile.

TODO: document the other workarounds.

-->

<driconf>
    <!-- Please always enable app-specific workarounds for all drivers and
         screens. -->
    <device>
        <application name="Unigine Sanctuary" executable="Sanctuary">
            <option name="force_glsl_extensions_warn" value="true" />
            <option name="disable_blend_func_extended" value="true" />
        </application>

        <application name="Unigine Tropics" executable="Tropics">
            <option name="force_glsl_extensions_warn" value="true" />
            <option name="disable_blend_func_extended" value="true" />
        </application>

        <application name="Unigine Heaven (32-bit)" executable="heaven_x86">
            <option name="allow_glsl_extension_directive_midshader" value="true" />
            <!-- remove dual_color_blend_by_location if 4.1 ever comes out -->
            <option name="dual_color_blend_by_location" value="true" />
        </application>

        <application name="Unigine Heaven (64-bit)" executable="heaven_x64">
            <option name="allow_glsl_extension_directive_midshader" value="true" />
            <!-- remove dual_color_blend_by_location if 4.1 ever comes out -->
            <option name="dual_color_blend_by_location" value="true" />
        </application>

        <application name="Unigine Valley (32-bit)" executable="valley_x86">
            <option name="allow_glsl_extension_directive_midshader" value="true" />
            <!-- remove dual_color_blend_by_location if 1.1 ever comes out -->
            <option name="dual_color_blend_by_location" value="true" />
        </application>

        <application name="Unigine Valley (64-bit)" executable="valley_x64">
            <option name="allow_glsl_extension_directive_midshader" value="true" />
            <!-- remove dual_color_blend_by_location if 1.1 ever comes out -->
            <option name="dual_color_blend_by_location" value="true" />
        </application>

        <application name="Unigine OilRush (32-bit)" executable="OilRush_x86">
            <option name="disable_blend_func_extended" value="true" />
            <option name="allow_glsl_extension_directive_midshader" value="true" />
        </application>

        <application name="Unigine OilRush (64-bit)" executable="OilRush_x64">
            <option name="disable_blend_func_extended" value="true" />
            <option name="allow_glsl_extension_directive_midshader" value="true" />
        </application>

        <application name="Savage 2" executable="savage2.bin">
            <option name="disable_glsl_line_continuations" value="true" />
        </application>

        <application name="Topogun (32-bit)" executable="topogun32">
            <option name="always_have_depth_buffer" value="true" />
        </application>

        <application name="Topogun (64-bit)" executable="topogun64">
            <option name="always_have_depth_buffer" value="true" />
        </application>

        <application name="Dead Island (incl. Definitive Edition)" executable="DeadIslandGame">
            <option name="allow_glsl_extension_directive_midshader" value="true" />

            <!-- For the Definitive Edition which shares the same executable name -->
            <option name="allow_glsl_builtin_variable_redeclaration" value="true" />
        </application>

        <application name="Dead Island Riptide Definitive Edition" executable="DeadIslandRiptideGame">
            <option name="allow_glsl_builtin_variable_redeclaration" value="true" />
        </application>

        <application name="Dying Light" executable="DyingLightGame">
            <option name="allow_glsl_builtin_variable_redeclaration" value="true" />
        </application>

        <application name="RAGE (64-bit)" executable="Rage64.exe">
            <option name="allow_glsl_builtin_variable_redeclaration" value="true" />
        </application>

        <application name="RAGE (32-bit)" executable="Rage.exe">
            <option name="allow_glsl_builtin_variable_redeclaration" value="true" />
        </application>

        <application name="Second Life" executable="do-not-directly-run-secondlife-bin">
            <option name="allow_glsl_extension_directive_midshader" value="true" />
        </application>

        <application name="Warsow (32-bit)" executable="warsow.i386">
            <option name="allow_glsl_extension_directive_midshader" value="true" />
        </application>

        <application name="Warsow (64-bit)" executable="warsow.x86_64">
            <option name="allow_glsl_extension_directive_midshader" value="true" />
        </application>

        <application name="Rust" executable="rust">
            <option name="glsl_zero_init" value="true"/>
        </application>

        <application name="Divinity: Original Sin Enhanced Edition" executable="EoCApp">
            <option name="allow_glsl_extension_directive_midshader" value="true" />
        </application>

        <application name="Metro 2033 Redux / Metro Last Night Redux" executable="metro">
            <option name="allow_glsl_extension_directive_midshader" value="true" />
        </application>

        <application name="Worms W.M.D" executable="Worms W.M.Dx64">
            <option name="allow_higher_compat_version" value="true" />
        </application>

        <application name="Crookz - The Big Heist" executable="Crookz">
            <option name="allow_higher_compat_version" value="true" />
        </application>

        <application name="Tropico 5" executable="Tropico5">
            <option name="allow_higher_compat_version" value="true" />
        </application>

        <application name="The Culling" executable="Victory">
            <option name="force_glsl_version" value="440" />
        </application>

        <application name="Spec Ops: The Line (32-bit)" executable="specops.i386">
            <option name="force_glsl_abs_sqrt" value="true" />
        </application>

        <application name="Spec Ops: The Line (64-bit)" executable="specops">
            <option name="force_glsl_abs_sqrt" value="true" />
        </application>

        <application name="Kerbal Space Program (32-bit)" executable="KSP.x86">
            <option name="glsl_zero_init" value="true"/>
        </application>

        <application name="Kerbal Space Program (64-bit)" executable="KSP.x86_64">
            <option name="glsl_zero_init" value="true"/>
        </application>

        <application name="Rocket League" executable="RocketLeague">
            <option name="glsl_correct_derivatives_after_discard" value="true"/>
        </application>

        <application name="The Witcher 2" executable="witcher2">
            <option name="glsl_correct_derivatives_after_discard" value="true"/>
        </application>

        <application name="Unreal 4 Editor" executable="UE4Editor">
            <option name="allow_glsl_cross_stage_interpolation_mismatch" value="true"/>
        </application>

        <application name="Observer" executable="TheObserver-Linux-Shipping">
            <option name="allow_glsl_cross_stage_interpolation_mismatch" value="true"/>
        </application>

        <application name="Steamroll" executable="Steamroll-Linux-Shipping">
            <option name="allow_glsl_cross_stage_interpolation_mismatch" value="true"/>
        </application>

        <application name="Refunct" executable="Refunct-Linux-Shipping">
            <option name="allow_glsl_cross_stage_interpolation_mismatch" value="true"/>
        </application>

        <application name="Google Earth VR" executable="Earth.exe">
            <option name="allow_glsl_builtin_const_expression" value="true"/>
            <option name="allow_glsl_relaxed_es" value="true"/>
        </application>

        <application name="No Mans Sky" executable="NMS.exe">
            <option name="force_glsl_extensions_warn" value="true" />
            <option name="allow_glsl_layout_qualifier_on_function_parameters" value="true" />
        </application>

        <application name="Wolfenstein The Old Blood" executable="WolfOldBlood_x64.exe">
            <option name="force_compat_profile" value="true" />
        </application>

        <application name="ARMA 3" executable="arma3.x86_64">
            <option name="glsl_correct_derivatives_after_discard" value="true"/>
        </application>

        <!-- The GL thread whitelist is below, workarounds are above.
             Keep it that way. -->

        <application name="Alien Isolation" executable="AlienIsolation">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="BioShock Infinite" executable="bioshock.i386">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="Borderlands 2" executable="Borderlands2">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="Civilization 5" executable="Civ5XP">
            <option name="mesa_glthread" value="true"/>
        </application>
        <application name="Civilization 6" executable="Civ6">
            <option name="mesa_glthread" value="true"/>
        </application>
        <application name="Civilization 6" executable="Civ6Sub">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="Dreamfall Chapters" executable="Dreamfall Chapters">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="Hitman" executable="HitmanPro">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="Renowned Explorers: International Society" executable="abbeycore_steam">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="Saints Row 2" executable="saintsrow2.i386">
            <option name="mesa_glthread" value="true"/>
        </application>
        <application name="Saints Row: The Third" executable="SaintsRow3.i386">
            <option name="mesa_glthread" value="true"/>
        </application>
        <application name="Saints Row IV" executable="SaintsRow4.i386">
            <option name="mesa_glthread" value="true"/>
        </application>
        <application name="Saints Row: Gat out of Hell" executable="SaintsRow4GooH.i386">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="Sid Meier's: Civilization Beyond Earth" executable="CivBE">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="The Witcher 2" executable="witcher2">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="American Truck Simulator" executable="amtrucks">
            <option name="mesa_glthread" value="true"/>
        </application>
        <application name="Euro Truck Simulator 2" executable="eurotrucks2">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="Overlord" executable="overlord.i386">
            <option name="mesa_glthread" value="true"/>
        </application>
        <application name="Overlord 2" executable="overlord2.i386">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="Oil Rush" executable="OilRush_x86">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="War Thunder" executable="aces">
            <option name="mesa_glthread" value="true"/>
        </application>
        <application name="War Thunder (Wine)" executable="aces.exe">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="Outlast" executable="OLGame.x86_64">
            <option name="mesa_glthread" value="true"/>
        </application>

        <application name="Spec Ops: The Line (32-bit)" executable="specops.i386">
            <option name="mesa_glthread" value="true"/>
        </application>
        <application name="Spec Ops: The Line (64-bit)" executable="specops">
            <option name="mesa_glthread" value="true"/>
        </application>
        <application name="Mount and Blade Warband" executable="mb_warband_linux">
            <option name="mesa_glthread" value="true"/>
        </application>

        <!-- around 18% performance increase in min and avg fps, max fps capped at 60fps. -->
        <application name="Medieval II: Total War" executable="Medieval2">
            <option name="mesa_glthread" value="true"/>
        </application>

        <!-- min fps ~21 ===> ~27 while standing still in game, also higher gpu load. -->
        <application name="Carnivores: Dinosaur Hunter Reborn (wine)" executable="Carnivores-master.exe">
            <option name="mesa_glthread" value="true"/>
        </application>

        <!-- around 30% increase in avg fps -->
        <application name="Far Cry 2 (wine)" executable="farcry2.exe">
            <option name="mesa_glthread" value="true"/>
        </application>
    </device>
    <!-- vmwgfx doesn't like full buffer swaps and can't sync to vertical retraces.-->
    <device driver="vmwgfx">
        <application name="gnome-shell" executable="gnome-shell">
            <option name="glx_disable_ext_buffer_age" value="true" />
            <option name="glx_disable_oml_sync_control" value="true" />
            <option name="glx_disable_sgi_video_sync" value="true" />
        </application>
        <application name="Compiz" executable="Compiz">
            <option name="glx_disable_ext_buffer_age" value="true" />
            <option name="glx_disable_oml_sync_control" value="true" />
        </application>
    </device>
    <device driver="radeonsi">
        <application name="ARK: Survival Evolved (and unintentionally the UE4 demo template)" executable="ShooterGame">
            <option name="radeonsi_clear_db_cache_before_clear" value="true" />
        </application>
        <application name="No Mans Sky" executable="NMS.exe">
            <option name="radeonsi_zerovram" value="true" />
        </application>
        <application name="Civilization 6" executable="Civ6">
            <option name="radeonsi_enable_nir" value="true"/>
        </application>
        <application name="Civilization 6" executable="Civ6Sub">
            <option name="radeonsi_enable_nir" value="true"/>
        </application>
    </device>
</driconf>
