#amd #marker #gpu #instrumentation #bindings #profiler #direct-x12

amd-ext-d3d

Rust bindings for AMD's DirectX12 modified PIX3 RGP markers

6 releases

0.3.1 Jul 14, 2024
0.3.0 Jun 28, 2024
0.2.1 Nov 17, 2023
0.2.0 Aug 26, 2023
0.1.0 May 25, 2023

#190 in Graphics APIs

Download history 35/week @ 2024-07-05 128/week @ 2024-07-12 25/week @ 2024-07-19 19/week @ 2024-07-26 8/week @ 2024-08-02 12/week @ 2024-08-09 18/week @ 2024-08-16 4/week @ 2024-08-23 18/week @ 2024-08-30 17/week @ 2024-09-06 21/week @ 2024-09-13 47/week @ 2024-09-20 51/week @ 2024-09-27 15/week @ 2024-10-04 56/week @ 2024-10-11 49/week @ 2024-10-18

182 downloads per month

MIT license

17KB
289 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.3.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::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.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

~128MB
~2M SLoC