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
- Skip AGS-based version detection and report an unknown driver version.
- Bundle a known-good amd_ags DLL matching the AGS SDK headers in use.
- Verify symbol names against the AGS SDK version; exports changed across releases.
- 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.