better output for nvidia
This commit is contained in:
parent
0c40bb9b5f
commit
0e45ef7e43
1 changed files with 11 additions and 18 deletions
|
@ -1371,7 +1371,10 @@ mod shader_resources {
|
|||
}
|
||||
|
||||
mod nvidia {
|
||||
use std::os::raw::{c_char, c_int, c_uint};
|
||||
use std::{
|
||||
ffi::CStr,
|
||||
os::raw::{c_char, c_int, c_uint},
|
||||
};
|
||||
|
||||
use anyhow::{Context, Result};
|
||||
use windows::{
|
||||
|
@ -1386,10 +1389,6 @@ mod nvidia {
|
|||
#[allow(non_camel_case_types)]
|
||||
type NvAPI_ShortString = [c_char; NVAPI_SHORT_STRING_MAX];
|
||||
|
||||
// https://github.com/NVIDIA/nvapi/blob/7cb76fce2f52de818b3da497af646af1ec16ce27/nvapi.h#L87
|
||||
#[allow(non_camel_case_types)]
|
||||
type NvAPI_Initialize_t = unsafe extern "C" fn() -> c_int;
|
||||
|
||||
// https://github.com/NVIDIA/nvapi/blob/7cb76fce2f52de818b3da497af646af1ec16ce27/nvapi_lite_common.h#L447
|
||||
#[allow(non_camel_case_types)]
|
||||
type NvAPI_SYS_GetDriverAndBranchVersion_t = unsafe extern "C" fn(
|
||||
|
@ -1405,18 +1404,6 @@ mod nvidia {
|
|||
.ok_or_else(|| anyhow::anyhow!("Failed to get nvapi_QueryInterface address"))?;
|
||||
let nvapi_query: extern "C" fn(u32) -> *mut () = std::mem::transmute(nvapi_query_addr);
|
||||
|
||||
// https://github.com/NVIDIA/nvapi/blob/7cb76fce2f52de818b3da497af646af1ec16ce27/nvapi_interface.h#L33
|
||||
let nvapi_init_ptr = nvapi_query(0x0150e828);
|
||||
if nvapi_init_ptr.is_null() {
|
||||
anyhow::bail!("Failed to get NVIDIA API function pointer");
|
||||
}
|
||||
let nvapi_init: NvAPI_Initialize_t = std::mem::transmute(nvapi_init_ptr);
|
||||
|
||||
let result = nvapi_init();
|
||||
if result != 0 {
|
||||
anyhow::bail!("Failed to initialize NVIDIA API, error code: {}", result);
|
||||
}
|
||||
|
||||
// https://github.com/NVIDIA/nvapi/blob/7cb76fce2f52de818b3da497af646af1ec16ce27/nvapi_interface.h#L41
|
||||
let nvapi_get_driver_version_ptr = nvapi_query(0x2926aaad);
|
||||
if nvapi_get_driver_version_ptr.is_null() {
|
||||
|
@ -1440,7 +1427,13 @@ mod nvidia {
|
|||
}
|
||||
let major = driver_version / 100;
|
||||
let minor = driver_version % 100;
|
||||
Ok(format!("{}.{}", major, minor))
|
||||
let branch_string = CStr::from_ptr(build_branch_string.as_ptr());
|
||||
Ok(format!(
|
||||
"{}.{} {}",
|
||||
major,
|
||||
minor,
|
||||
branch_string.to_string_lossy()
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue