使用 windows-rs 板条箱在 Rust 中获取
D3D12DebugInterface
时,出现以下错误:
failed to get d3d12 debug interface: No such interface supported (0x80004002)
这是我认为应该有效的代码:
#[derive(Default)]
struct DebugLayer {
d3d12_debug: Option<ID3D12Debug6>,
dxgi_debug: Option<IDXGIDebug1>,
}
impl DebugLayer {
fn init() -> Self {
unsafe {
let mut debug_layer = Self::default();
match D3D12GetDebugInterface(&mut debug_layer.d3d12_debug) {
Ok(()) => {
if let Some(ref d3d12_debug) = debug_layer.d3d12_debug {
d3d12_debug.EnableDebugLayer();
println!("d3d12: debug layer enabled");
match DXGIGetDebugInterface1::<IDXGIDebug1>(0) {
Ok(dxgi_debug) => {
dxgi_debug.EnableLeakTrackingForThread();
println!("d3d12: leak tracking enabled");
debug_layer.dxgi_debug = Some(dxgi_debug);
}
Err(err) => println!("failed to get dxgi debug interface: {}", err),
}
}
}
Err(err) => println!("failed to get d3d12 debug interface: {}", err),
}
debug_layer
}
}
}
以及我在 Cargo.toml 中启用的功能:
[target.'cfg(target_os = "windows")'.dependencies.windows]
version = "0.52.0"
features = [
"Win32_Foundation",
"Win32_Graphics_Gdi",
"Win32_Graphics_Direct3D_Fxc",
"Win32_Graphics_Direct3D12",
"Win32_Graphics_Dxgi_Common",
"Win32_Security",
"Win32_System_LibraryLoader",
"Win32_System_Threading",
"Win32_System_WindowsProgramming",
"Win32_UI_Input_KeyboardAndMouse",
"Win32_UI_WindowsAndMessaging",
]
我使用的是 Windows 10,我已检查我的设置并安装了图形工具。我错过了什么/做错了什么?
ID3D12Debug6
在您的系统(或我的1)上不可用。这就是错误代码 0x80004002
(i.e. E_NOINTERFACE
)所传达的信息。
这是说明问题的最小示例。
Cargo.toml
[package]
name = "d3d12_debug_layer"
version = "0.0.0"
edition = "2021"
[dependencies.windows]
version = "0.52.0"
features = ["Win32_Graphics_Direct3D12"]
src/main.rs
use windows::{
core::Result,
Win32::Graphics::Direct3D12::{D3D12GetDebugInterface, ID3D12Debug6},
};
fn main() -> Result<()> {
let mut dbg_itf: Option<ID3D12Debug6> = None;
unsafe { D3D12GetDebugInterface(&mut dbg_itf) }?;
Ok(())
}
发出
cargo run
会产生以下输出1:
Error: Error { code: HRESULT(0x80004002), message: "No such interface supported" }
这不是您可以通过更改代码来“修复”的问题。所请求的接口 (
ID3D12Debug6
) 未在操作系统发行版附带的二进制文件中实现。
1 Windows 10 版本 22H2(操作系统内部版本 19045.3693)。