<?xml version="1.0" standalone="yes"?>
<!--

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

-->

<!DOCTYPE driconf [
   <!ELEMENT driconf      (device+)>
   <!ELEMENT device       (application | engine)+>
   <!ATTLIST device       driver CDATA #IMPLIED
                          device CDATA #IMPLIED>
   <!ELEMENT application  (option+)>
   <!ATTLIST application  name CDATA #REQUIRED
                          executable CDATA #IMPLIED
                          executable_regexp CDATA #IMPLIED
                          sha1 CDATA #IMPLIED
                          application_name_match CDATA #IMPLIED
                          application_versions CDATA #IMPLIED>
   <!ELEMENT engine       (option+)>

   <!-- engine_name_match: A regexp matching the engine name -->
   <!-- engine_versions: A version in range format
             (version 1 to 4 : "1:4") -->

   <!ATTLIST engine       engine_name_match CDATA #REQUIRED
                          engine_versions CDATA #IMPLIED>

   <!ELEMENT option       EMPTY>
   <!ATTLIST option       name CDATA #REQUIRED
                          value CDATA #REQUIRED>
]>

<!-- NOTE: `executable` shouldn't be used for shader based drirc workarounds
     because they aren't applied when replaying with Fossilize for precompilation. -->
<driconf>
    <device driver="radv">
        <!-- Engine workarounds -->
        <engine engine_name_match="vkd3d">
            <option name="radv_zero_vram" value="true" />
            <option name="radv_disable_aniso_single_level" value="true" />
            <option name="radv_disable_trunc_coord" value="true" />
            <option name="radv_cooperative_matrix2_nv" value="true" />
        </engine>

        <engine engine_name_match="DXVK">
            <option name="radv_disable_aniso_single_level" value="true" />
            <option name="radv_disable_trunc_coord" value="true" />
        </engine>

        <engine engine_name_match="mesa zink">
            <option name="radv_disable_aniso_single_level" value="true" />
        </engine>

        <engine engine_name_match="Quantic Dream Engine">
            <option name="radv_zero_vram" value="true" />
            <option name="radv_disable_tc_compat_htile_general" value="true" />
            <option name="radv_app_layer" value="quanticdream" />
        </engine>

        <engine engine_name_match="^UnrealEngine"> <!-- UE4/5 Vulkan RHI -->
            <option name="radv_flush_before_query_copy" value="true" />
            <option name="radv_flush_before_timestamp_write" value="true" />
            <option name="radv_zero_vram" value="true" />
        </engine>

        <engine engine_name_match="DXVK_NvRemix">
            <option name="radv_tex_non_uniform" value="true" />
        </engine>

        <!-- VK_MAKE_VERSION() encode for 4.0.0 to 4.20.2 -->
        <engine engine_name_match="GTK" engine_versions="16777216:16859138">
            <option name="vk_wsi_disable_unordered_submits" value="true" />
        </engine>

        <!-- Game workarounds -->
        <application name="Shadow Of The Tomb Raider (Native)" application_name_match="ShadowOfTheTomb">
            <option name="radv_report_llvm9_version_string" value="true" />
            <option name="radv_invariant_geom" value="true" />

            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
        </application>

        <application name="Shadow Of The Tomb Raider (DX11/DX12)" application_name_match="SOTTR.exe">
            <!-- DXVK and vkd3d-proton both enable invariant position but it's
                 disabled for SotTR because it breaks NV more than it helps -->
            <option name="radv_invariant_geom" value="true" />
            <option name="radv_split_fma" value="true" />
        </application>

        <application name="RAGE 2" application_name_match="Rage 2">
            <option name="radv_enable_mrt_output_nan_fixup" value="true" />
            <option name="radv_app_layer" value="rage2" />
            <option name="radv_zero_vram" value="true" />
        </application>

        <application name="The Surge 2" application_name_match="Fledge">
            <option name="radv_disable_shrink_image_store" value="true" />
            <option name="radv_zero_vram" value="true" />
        </application>

        <application name="World War Z (and World War Z: Aftermath)" application_name_match="WWZ|wwz">
            <option name="radv_override_uniform_offset_alignment" value="16" />
            <option name="radv_disable_shrink_image_store" value="true" />
            <option name="radv_invariant_geom" value="true" />
        </application>

        <application name="DOOM VFR" application_name_match="DOOM_VFR">
            <option name="radv_no_dynamic_bounds" value="true" />
        </application>

        <application name="DOOM Eternal" application_name_match="DOOMEternal">
            <option name="radv_zero_vram" value="true" />
        </application>

        <application name="Indiana Jones: The Great Circle" application_name_match="TheGreatCircle">
            <option name="radv_zero_vram" value="true" />
            <option name="radv_disable_dcc_stores" value="true" />
            <option name="radv_invariant_geom" value="true" />
            <option name="radv_emulate_rt" value="true" />
            <option name="radv_enable_float16_gfx8" value="true" />

            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
        </application>

        <application name="DOOM (2016)" application_name_match="DOOM$">
            <option name="radv_disable_dcc" value="true" />
            <option name="radv_invariant_geom" value="true" />
        </application>

        <application name="DOOM: The Dark Ages" application_name_match="DOOMTheDarkAges">
            <option name="radv_zero_vram" value="true" />
            <option name="radv_disable_dcc_stores" value="true" />
            <option name="radv_no_implicit_varying_subgroup_size" value="true" />
        </application>

        <application name="Wolfenstein II" application_name_match="Wolfenstein II The New Colossus">
            <option name="radv_disable_dcc" value="true" />
        </application>

        <application name="Grid Autosport" application_name_match="GRIDAutosport_avx.exe">
            <option name="radv_disable_sinking_load_input_fs" value="true" />
        </application>

        <application name="Grid Autosport" application_name_match="GRIDAutosport.exe">
            <option name="radv_disable_sinking_load_input_fs" value="true" />
        </application>

        <application name="Hammerting" application_name_match="TDTD">
            <option name="radv_zero_vram" value="true" />
        </application>

        <application name="RDR2" application_name_match="Red Dead Redemption 2">
            <option name="radv_enable_unified_heap_on_apu" value="true" />

            <!-- Hide resizable (only when detected) and report a carveout of
                 256MiB to workaround bad VRAM memory management. -->
            <option name="radv_hide_rebar_on_dgpu" value="true" />

            <option name="radv_zero_vram" value="true" />
            <!-- Disable DCC for mips to workaround rendering issues because
                 the game aliases two images incorrectly. -->
            <option name="radv_disable_dcc_mips" value="true" />

            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
        </application>

        <application name="Metro Exodus (Linux native)" application_name_match="metroexodus">
            <option name="radv_app_layer" value="metroexodus" />
        </application>

        <application name="Hellblade: Senua's Sacrifice" application_name_match="HellbladeGame-Win64-Shipping.exe">
            <!-- RT shaders in Hellblade: Senua's Sacrifice cause misrenders because they assume full subgroups.
                 This is only guaranteed with wave64, so force wave64 on for this game. -->
            <option name="radv_rt_wave64" value="true" />
        </application>

        <application name="War Thunder" application_name_match="WarThunder">
            <option name="radv_invariant_geom" value="true"/>
        </application>

        <!-- Crysis 2/3 remastered are DX11 games that use Vulkan interop for RT
             and the app/engine (nvpro-sample) seems too generic to apply the
             drirc entry for. The executable name works just fine but that means
             no pre-compilation for the RT shaders. -->
        <application name="Crysis 2 Remastered" executable="Crysis2Remastered.exe">
            <option name="radv_ssbo_non_uniform" value="true" />
        </application>

        <application name="Crysis 3 Remastered" executable="Crysis3Remastered.exe">
            <option name="radv_ssbo_non_uniform" value="true" />
        </application>

        <application name="Persona 3 Reload" application_name_match="P3R.exe">
            <option name="radv_disable_ngg_gs" value="true" />
        </application>

        <application name="WWE 2k23" application_name_match="WWE2K23_x64.exe">
            <option name="radv_disable_dcc" value="true" />
        </application>

        <application name="GPUScore: Breaking Limit" application_name_match="GPUScoreVulkan">
            <option name="radv_zero_vram" value="true" />
        </application>

        <application name="DiRT4" application_name_match="dirt4.exe">
            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
        </application>

        <application name="Strange Brigade (DX12)" application_name_match="StrangeBrigade_DX12.exe">
            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
        </application>

        <application name="Strange Brigade (VK)" application_name_match="Strange">
            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />

            <!-- To fix a hazard with present after write. -->
            <option name="radv_app_layer" value="strange_brigade" />
        </application>

        <application name="Sniper Elite 5 (DX12)" application_name_match="sniper5_dx12.exe">
            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
        </application>

        <application name="Sniper Elite 5 (VK)" application_name_match="Sniper5">
            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
        </application>

        <application name="Counter Strike 2" application_name_match="csgo">
            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
        </application>

        <application name="Forza Horizon 5" application_name_match="ForzaHorizon5.exe">
            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
            <!-- Force waiting for VM MAP updates at allocation time to
                 workaround an use-before-alloc which causes GPU hangs. -->
            <option name="radv_wait_for_vm_map_updates" value="true" />
        </application>

        <application name="Far Cry 2" application_name_match="FarCry2.exe">
            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
        </application>

        <application name="DiRT Rally 2.0" application_name_match="dirtrally2.exe">
            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
        </application>

        <application name="Valheim" application_name_match="Valheim">
            <!-- The full WA hurts performance too much, use the partial one
                 that seems fine overall. -->
            <option name="radv_gfx12_hiz_wa" value="partial" />
        </application>

        <application name="The Last of Us Part I" application_name_match="tlou-i.exe">
            <!-- TLOU1 is much faster with 2D swizzle modes for 3D storage images. -->
            <option name="radv_prefer_2d_swizzle_for_3d_storage" value="true" />
        </application>

        <!-- OpenGL Game workarounds (zink) -->
        <application name="Black Geyser: Couriers of Darkness" executable="BlackGeyser.x86_64">
            <option name="radv_zero_vram" value="true" />
        </application>

        <!-- https://gitlab.freedesktop.org/mesa/mesa/-/issues/2686 -->
        <application name="7 Days to Die" executable="7DaysToDie.x86_64">
            <option name="radv_zero_vram" value="true" />
        </application>
        <application name="7 Days to Die" executable="7DaysToDie.x86">
            <option name="radv_zero_vram" value="true" />
        </application>

        <application name="Monolith demo5" executable="runner" sha1="0c40d509a74e357f0280cb1bd882e9cd94b91bdf">
            <option name="radv_zero_vram" value="true" />
        </application>

        <application name="American Truck Simulator" executable="amtrucks">
            <option name="radv_zero_vram" value="true" />
        </application>

        <application name="Counter-Strike Global Offensive" executable="csgo_linux64">
            <option name="radv_zero_vram" value="true" />
        </application>

        <application name="Exanima" executable="Exanima.exe">
            <option name="radv_zero_vram" value="true"/>
        </application>

        <application name="Rocket League" executable="RocketLeague">
            <option name="radv_zero_vram" value="true" />
        </application>
        <application name="Crystal Project" executable="Crystal Project.bin.x86_64">
            <option name="radv_zero_vram" value="true" />
        </application>

        <application name="Enshrouded" executable="enshrouded.exe">
            <option name="radv_zero_vram" value="true"/>
        </application>

        <!-- If storage features for depth formats are advertised, the Game chooses a code path
             for Terrain height map initialization that has countless bugs:
             https://gitlab.freedesktop.org/mesa/mesa/-/issues/11265 -->
        <application name="Total War: WARHAMMER III" application_name_match="TotalWarhammer3">
            <option name="radv_disable_depth_storage" value="true"/>
        </application>

        <application name="No Man's Sky" application_name_match="No Man's Sky">
            <option name="radv_app_layer" value="no_mans_sky" />
        </application>

        <application name="Forza Horizon 5" application_name_match="ForzaHorizon5.exe">
            <option name="vk_x11_override_min_image_count" value="4" />
        </application>
    </device>
</driconf>
