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 {
|
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 anyhow::{Context, Result};
|
||||||
use windows::{
|
use windows::{
|
||||||
|
@ -1386,10 +1389,6 @@ mod nvidia {
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
type NvAPI_ShortString = [c_char; NVAPI_SHORT_STRING_MAX];
|
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
|
// https://github.com/NVIDIA/nvapi/blob/7cb76fce2f52de818b3da497af646af1ec16ce27/nvapi_lite_common.h#L447
|
||||||
#[allow(non_camel_case_types)]
|
#[allow(non_camel_case_types)]
|
||||||
type NvAPI_SYS_GetDriverAndBranchVersion_t = unsafe extern "C" fn(
|
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"))?;
|
.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);
|
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
|
// https://github.com/NVIDIA/nvapi/blob/7cb76fce2f52de818b3da497af646af1ec16ce27/nvapi_interface.h#L41
|
||||||
let nvapi_get_driver_version_ptr = nvapi_query(0x2926aaad);
|
let nvapi_get_driver_version_ptr = nvapi_query(0x2926aaad);
|
||||||
if nvapi_get_driver_version_ptr.is_null() {
|
if nvapi_get_driver_version_ptr.is_null() {
|
||||||
|
@ -1440,7 +1427,13 @@ mod nvidia {
|
||||||
}
|
}
|
||||||
let major = driver_version / 100;
|
let major = driver_version / 100;
|
||||||
let minor = 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