Vulkan Layers: Disabling Bloat via vulkan_icd.json Config

Vulkan layers are essentially “hooks” that intercept API calls. While Explicit Layers are requested by the game, Implicit Layers (like Steam Overlay or Discord) are loaded automatically by the system. In 2026, the Vulkan Loader 1.4 reads from a unified settings file to determine which layers are allowed to run.

File Path: The “Master Override”

To disable bloat globally or for a specific environment, you must target the vk_loader_settings.json file.

  • Windows: %AppData%\Local\LunarG\vulkan\vk_loader_settings.json
  • Linux (Steam Deck): $HOME/.local/share/vulkan/loader_settings.d/vk_loader_settings.json

Technical Note: If these files don’t exist, you can create them using the Vulkan Configurator (vkconfig) utility included with the SDK. This is safer than manual editing as it ensures the JSON schema is valid for the 2026 loader.

Optimized “Clean-Stream” Layer Configuration

If you prefer the “Master Prompt” approach to manual environment variables, use the following VK_ICD_FILENAMES and layer suppression flags in your Steam Launch Options or Global Profile.

ParameterRecommended ValueTechnical Purpose
VK_LOADER_LAYERS_DISABLE~all~The Kill Switch. Disables all implicit layers (Overlays/Tools).
VK_LOADER_LAYERS_ENABLE*steam*Re-enables only specific layers (e.g., if you need Steam Overlay).
VK_ICD_FILENAMES[Path_to_ICD].jsonForces a specific driver, skipping “Layer Discovery” delays.
VK_LAYER_SETTINGS_PATHnonePrevents layers from reading third-party .txt config files.

HowTo: Engineering a Zero-Bloat Vulkan Pipeline

Follow these GameEngineer.net technical steps to strip Vulkan of unnecessary overhead:

  1. The “Kill All” Launch Option: For any game where you suspect an overlay is causing stutters, use this launch option:VK_LOADER_LAYERS_DISABLE=~all~ %command%This tells the Vulkan Loader to skip the implicit_layer.d folder entirely, preventing Discord, OBS, or Steam from hooking into the $vkCreateInstance$ call.
  2. Using Vulkan Configurator (GUI): Open vkconfig. Switch to the Drivers tab (new in late 2025/2026). Here you can see every active layer. Use the “Exclude” list to permanently blacklist layers that cause crashes, such as older versions of OSD tools or non-updated screen recorders.
  3. Force ICD Selection: If you have an iGPU and a dGPU, the Vulkan loader can waste time ($T_{init}$) probing both. Force your primary driver by setting:
    • NVIDIA: VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json
    • AMD: VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.x86_64.json
  4. Disable Validation (For Users): Ensure VK_INSTANCE_LAYERS is empty. Validation layers ($VK\_LAYER\_KHRONOS\_validation$) are intended for developers and can reduce performance by up to 40% because they check every API call for errors.
  5. Audit via vulkaninfo: Run vulkaninfo --summary in your terminal. Look at the Layers: count section. If it’s anything higher than 0 (or 1 for Steam), you still have background bloat active.

Technical Explanation: Layer Interception and CPU Overhead

Every active Vulkan layer adds a “Trampoline” to the function call stack. When a game calls $vkQueueSubmit$, the call must pass through every enabled layer before reaching the Installable Client Driver (ICD).

Mathematically, the latency of a single API call ($L_{call}$) becomes:

$$L_{call} = T_{app} + \sum_{i=1}^{n} T_{layer,i} + T_{icd}$$

Where $n$ is the number of active layers. Even if a layer “does nothing,” the context switch and pointer redirection add nanoseconds that accumulate over thousands of draw calls per frame. By setting VK_LOADER_LAYERS_DISABLE=~all~, you reduce $n$ to $0$, achieving a direct-to-hardware path that minimizes CPU-bound frametime jitter.

Leave a Comment