#amd #marker #bindings #gpu #direct-x12 #pix3 #rgp

amd-ext-d3d

Rust bindings for AMD's DirectX12 modified PIX3 RGP markers

4 releases

0.2.1 Nov 17, 2023
0.2.0 Aug 26, 2023
0.1.1 Jun 2, 2023
0.1.0 May 25, 2023

#304 in Graphics APIs

MIT license

21KB
374 lines

Rust bindings for AMD's DirectX12 RGP markers

Actions Status Latest version Documentation Lines of code MIT Contributor Covenant

Banner

Call AMD's command list markers directly in Rust for event instrumentation in Radeon GPU Profiler, as well as other functionality provided on IAmdExtD3DDevice1.

Usage

Add this to your Cargo.toml:

[dependencies]
amd-ext-d3d = "0.2.1"

While upstream documentation details how to embed these calls into existing PIX3 markers (behind a C #derive), you get to call them explicitly in Rust:

use amd_ext_d3d::AmdExtD3DDevice;
use std::ffi::CStr;
use windows::{
    core::CanInto,
    Win32::Graphics::Direct3D12::{ID3D12Device, ID3D12GraphicsCommandList},
};

let device: ID3D12Device = todo!("Open DirectX12 graphics device");
let cmd_list: ID3D12GraphicsCommandList = todo!("device.CreateCommandList(...)");

// Load the extension
let amd_device = unsafe { AmdExtD3DDevice::new(device.can_clone_into()) }.unwrap();

let name = CStr::from_bytes_with_nul(b"My super cool GPU event!\0").unwrap();
unsafe { amd_device.push_marker(&cmd_list, name) };
// Submit work to the GPU...
unsafe { amd_device.pop_marker(&cmd_list) };

Contributing

See CONTRIBUTING.md for details on regenerating the metadata and Rust code from upstream headers.

Dependencies

~152MB
~2.5M SLoC