zed-industries/zed · error

Failed to get agsDeInitialize address

Error message

Failed to get agsDeInitialize address

What it means

Raised in `get_driver_version` when GetProcAddress for `agsDeInitialize` on amd_ags_x64.dll/x86 returns null after (or alongside) the agsInitialize lookup failing: the loaded AMD AGS DLL lacks the expected exports, so the AGS context cannot be safely torn down. Diagnostics-only path for AMD driver version reporting.

Source

Thrown at crates/gpui_windows/src/directx_renderer.rs:1911

        context: *mut *mut AGSContext,
        gpu_info: *mut AGSGPUInfo,
    ) -> c_int;

    // https://github.com/GPUOpen-LibrariesAndSDKs/AGS_SDK/blob/5d8812d703d0335741b6f7ffc37838eeb8b967f7/ags_lib/inc/amd_ags.h#L436
    #[allow(non_camel_case_types)]
    type agsDeInitialize_t = unsafe extern "C" fn(context: *mut AGSContext) -> c_int;

    pub(super) fn get_driver_version() -> Result<String> {
        #[cfg(target_pointer_width = "64")]
        let amd_dll_name = s!("amd_ags_x64.dll");
        #[cfg(target_pointer_width = "32")]
        let amd_dll_name = s!("amd_ags_x86.dll");

        with_dll_library(amd_dll_name, |amd_dll| unsafe {
            let ags_initialize_addr = GetProcAddress(amd_dll, s!("agsInitialize"))
                .ok_or_else(|| anyhow::anyhow!("Failed to get agsInitialize address"))?;
            let ags_deinitialize_addr = GetProcAddress(amd_dll, s!("agsDeInitialize"))
                .ok_or_else(|| anyhow::anyhow!("Failed to get agsDeInitialize address"))?;

            let ags_initialize: agsInitialize_t = std::mem::transmute(ags_initialize_addr);
            let ags_deinitialize: agsDeInitialize_t = std::mem::transmute(ags_deinitialize_addr);

            let mut context: *mut AGSContext = std::ptr::null_mut();
            let mut gpu_info: AGSGPUInfo = AGSGPUInfo {
                driver_version: std::ptr::null(),
                radeon_software_version: std::ptr::null(),
                num_devices: 0,
                devices: std::ptr::null_mut(),
            };

            let result = ags_initialize(
                AGS_CURRENT_VERSION,
                std::ptr::null(),
                &mut context,
                &mut gpu_info,
            );

View on GitHub (pinned to f4178619ac)

Solutions

  1. Skip AGS-based version detection and report an unknown driver version.
  2. Bundle a known-good amd_ags DLL matching the AGS SDK headers in use.
  3. Verify symbol names against the AGS SDK version; exports changed across releases.
  4. Do not leak the AGSContext if initialization succeeded but teardown is unavailable — skip AGS entirely in that case.
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at crates/gpui_windows/src/directx_renderer.rs:1911 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of zed-industries/zed@f4178619ac (2026-08-20). Data as JSON: /api/errors/7509119c44f89915. Report an issue: GitHub.