Skip to content

Fix: resolve AMD GPU name mismatch between dashboard and monitoring via PCI BDF#1268

Merged
shm11C3 merged 13 commits into
developfrom
fix/amd-gpu-temp-dashboard-bdf-matching
Mar 21, 2026
Merged

Fix: resolve AMD GPU name mismatch between dashboard and monitoring via PCI BDF#1268
shm11C3 merged 13 commits into
developfrom
fix/amd-gpu-temp-dashboard-bdf-matching

Conversation

@shm11C3

@shm11C3 shm11C3 commented Mar 21, 2026

Copy link
Copy Markdown
Owner

Summary

On Windows AMD systems, the dashboard GPU info names come from DXGI (e.g. "AMD Radeon RX 7900 XTX") while monitoring event names come from ADL (e.g. "Radeon RX 7900 XTX"). This name mismatch caused GPU temperature to not display on the dashboard, even though Insights (which uses ADL names consistently) showed it correctly.

Introduce a SetupDi-based provider that enumerates display adapters with their PCI Bus/Device/Function addresses and device descriptions (which match DXGI names). ADL adapters now expose BDF alongside their metrics, enabling reliable cross-API GPU identification. The ADL name is resolved to the canonical DXGI name via BDF lookup at the monitoring boundary, so names are consistent throughout the entire data flow.

Related Issues

Type of Change

  • Bug fix (fix/ branch)
  • New feature (feat/ branch)
  • Refactoring (refactor/ branch)
  • Documentation (docs/ branch)
  • Dependencies update
  • Other (chore/ branch)

Screenshots / Videos

Test Plan

  • Manual testing
  • Unit tests

Checklist

  • Self-reviewed the code
  • Linting and formatting pass (npm run lint && npm run format / cargo tauri-lint && cargo tauri-fmt)
  • Tests pass (npm test / cargo tauri-test)
  • No new warnings or errors

…ia PCI BDF

On Windows AMD systems, the dashboard GPU info names come from DXGI
(e.g. "AMD Radeon RX 7900 XTX") while monitoring event names come from
ADL (e.g. "Radeon RX 7900 XTX"). This name mismatch caused GPU
temperature to not display on the dashboard, even though Insights
(which uses ADL names consistently) showed it correctly.

Introduce a SetupDi-based provider that enumerates display adapters
with their PCI Bus/Device/Function addresses and device descriptions
(which match DXGI names). ADL adapters now expose BDF alongside their
metrics, enabling reliable cross-API GPU identification. The ADL name
is resolved to the canonical DXGI name via BDF lookup at the monitoring
boundary, so names are consistent throughout the entire data flow.
Copilot AI review requested due to automatic review settings March 21, 2026 05:28
@github-actions github-actions Bot added bug Something isn't working rust Pull requests that update Rust code frontend configuration labels Mar 21, 2026
@github-actions

github-actions Bot commented Mar 21, 2026

Copy link
Copy Markdown
Contributor

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 99.09% (🎯 60%) 990 / 999
🔵 Statements 98.87% (🎯 60%) 1051 / 1063
🔵 Functions 98.79% (🎯 60%) 245 / 248
🔵 Branches 93.96% (🎯 60%) 327 / 348
File CoverageNo changed files found.
Generated in workflow #2529 for commit 70c9e17 by the Vitest Coverage Report Action

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes AMD GPU metric display on Windows by ensuring GPU names are consistent between the dashboard (DXGI) and monitoring (ADL) paths, using PCI Bus/Device/Function (BDF) to correlate adapters.

Changes:

  • Add a Windows SetupDi-based provider to enumerate display adapters with PCI BDF + device description (DXGI-style name).
  • Extend ADL per-adapter monitoring metrics to include PCI BDF and resolve ADL names to canonical DXGI names via BDF lookup.
  • Update dashboard GPU temperature selection to prefer exact GPU name matching with a fallback.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
src/features/hardware/dashboard/components/DashboardItems.tsx Updates GPU metric selection logic to rely on consistent backend-resolved GPU names (with fallback).
src-tauri/src/services/monitoring_service.rs Adds BDF→DXGI-name cache and uses BDF-based correlation when assembling AMD GPU samples.
src-tauri/src/infrastructure/providers/windows/setupdi_provider.rs New SetupDi enumeration provider returning adapter description + PCI BDF for cross-API identification.
src-tauri/src/infrastructure/providers/windows/mod.rs Exposes the new setupdi_provider module on Windows.
src-tauri/src/infrastructure/providers/windows/adl_provider.rs Adds BDF fields to adapter state and introduces AdlAdapterMetric for per-adapter usage/temperature results.
src-tauri/Cargo.toml Enables winapi features needed for SetupDi/DEVGUID access on Windows.

Comment thread src-tauri/src/services/monitoring_service.rs Outdated
Comment thread src-tauri/src/infrastructure/providers/windows/setupdi_provider.rs
Comment thread src-tauri/src/infrastructure/providers/windows/setupdi_provider.rs Outdated
Comment thread src/features/hardware/dashboard/components/DashboardItems.tsx Outdated
@github-actions

github-actions Bot commented Mar 21, 2026

Copy link
Copy Markdown
Contributor

Rust Backend Coverage Report

Coverage Details
Filename                                         Regions    Missed Regions     Cover   Functions  Missed Functions  Executed       Lines      Missed Lines     Cover    Branches   Missed Branches     Cover
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_tests/commands/background_image_test.rs              39                 0   100.00%           6                 0   100.00%          21                 0   100.00%           0                 0         -
_tests/commands/settings_test.rs                     220                 0   100.00%          18                 0   100.00%         167                 0   100.00%           0                 0         -
commands/background_image.rs                          22                 7    68.18%          11                 5    54.55%          19                 7    63.16%           0                 0         -
commands/hardware.rs                                  65                65     0.00%          20                20     0.00%          65                65     0.00%           0                 0         -
commands/settings.rs                                 544               544     0.00%          97                97     0.00%         463               463     0.00%           0                 0         -
commands/system.rs                                     6                 6     0.00%           3                 3     0.00%           5                 5     0.00%           0                 0         -
commands/ui.rs                                        17                17     0.00%           2                 2     0.00%          13                13     0.00%           0                 0         -
commands/updater.rs                                   97                97     0.00%          15                15     0.00%          66                66     0.00%           0                 0         -
enums/error.rs                                       105                 0   100.00%           8                 0   100.00%          89                 0   100.00%           0                 0         -
enums/hardware.rs                                    188                 1    99.47%          15                 0   100.00%         114                 0   100.00%           0                 0         -
enums/settings.rs                                    415                 6    98.55%          24                 0   100.00%         279                 0   100.00%           0                 0         -
infrastructure/database/db.rs                         21                21     0.00%           2                 2     0.00%          12                12     0.00%           0                 0         -
infrastructure/database/gpu_archive.rs                49                49     0.00%           4                 4     0.00%          18                18     0.00%           0                 0         -
infrastructure/database/hardware_archive.rs           41                41     0.00%           4                 4     0.00%          21                21     0.00%           0                 0         -
infrastructure/database/migration.rs                   8                 8     0.00%           1                 1     0.00%          37                37     0.00%           0                 0         -
infrastructure/database/process_stats.rs              41                41     0.00%           4                 4     0.00%          29                29     0.00%           0                 0         -
infrastructure/providers/linux/dmidecode.rs          229                15    93.45%          16                 3    81.25%         319                14    95.61%           0                 0         -
infrastructure/providers/linux/drm_sys.rs            143               143     0.00%          13                13     0.00%          87                87     0.00%           0                 0         -
infrastructure/providers/linux/hwmon.rs              119                94    21.01%           8                 6    25.00%          68                56    17.65%           0                 0         -
infrastructure/providers/linux/kernel.rs             165                22    86.67%          19                 2    89.47%         161                 8    95.03%           0                 0         -
infrastructure/providers/linux/lspci.rs               23                23     0.00%           1                 1     0.00%          12                12     0.00%           0                 0         -
infrastructure/providers/linux/net_sys.rs            171               171     0.00%          13                13     0.00%          93                93     0.00%           0                 0         -
infrastructure/providers/linux/procfs.rs             261                24    90.80%          25                 3    88.00%         222                19    91.44%           0                 0         -
infrastructure/providers/sysinfo_provider.rs          54                54     0.00%           2                 2     0.00%          45                45     0.00%           0                 0         -
lib.rs                                               209               209     0.00%           5                 5     0.00%         114               114     0.00%           0                 0         -
main.rs                                                3                 3     0.00%           1                 1     0.00%           3                 3     0.00%           0                 0         -
models/hardware.rs                                   133                 0   100.00%          11                 0   100.00%          83                 0   100.00%           0                 0         -
models/hardware_archive.rs                             3                 0   100.00%           1                 0   100.00%           7                 0   100.00%           0                 0         -
models/settings.rs                                   301                 0   100.00%          17                 0   100.00%         264                 0   100.00%           0                 0         -
platform/factory.rs                                   18                18     0.00%           4                 4     0.00%          15                15     0.00%           0                 0         -
platform/linux/cache.rs                               53                53     0.00%           4                 4     0.00%          38                38     0.00%           0                 0         -
platform/linux/gpu.rs                                139               139     0.00%          13                13     0.00%         102               102     0.00%           0                 0         -
platform/linux/memory.rs                              43                43     0.00%           6                 6     0.00%          41                41     0.00%           0                 0         -
platform/linux/mod.rs                                 34                34     0.00%          11                11     0.00%          70                70     0.00%           0                 0         -
platform/linux/network.rs                              4                 4     0.00%           1                 1     0.00%           4                 4     0.00%           0                 0         -
services/archive_service.rs                         1127               154    86.34%          90                15    83.33%         654               134    79.51%           0                 0         -
services/background_image_service.rs                 165                96    41.82%          16                10    37.50%          93                59    36.56%           0                 0         -
services/cpu_service.rs                               32                32     0.00%           4                 4     0.00%          15                15     0.00%           0                 0         -
services/gpu_service.rs                               37                37     0.00%          10                10     0.00%          31                31     0.00%           0                 0         -
services/hardware_service.rs                          67                67     0.00%           5                 5     0.00%          43                43     0.00%           0                 0         -
services/language_service.rs                         101                 0   100.00%          18                 0   100.00%          57                 0   100.00%           0                 0         -
services/memory_service.rs                            22                22     0.00%           4                 4     0.00%          15                15     0.00%           0                 0         -
services/monitoring_service.rs                       853               138    83.82%          60                15    75.00%         480                91    81.04%           0                 0         -
services/motherboard_service.rs                       10                10     0.00%           3                 3     0.00%           7                 7     0.00%           0                 0         -
services/network_service.rs                            9                 9     0.00%           1                 1     0.00%           7                 7     0.00%           0                 0         -
services/process_service.rs                           86                86     0.00%           5                 5     0.00%          50                50     0.00%           0                 0         -
services/settings_service.rs                         338               158    53.25%          34                16    52.94%         288               148    48.61%           0                 0         -
services/system_service.rs                            22                22     0.00%           2                 2     0.00%          12                12     0.00%           0                 0         -
services/ui_service.rs                                45                45     0.00%           8                 8     0.00%          36                36     0.00%           0                 0         -
utils/color.rs                                        66                 1    98.48%           4                 0   100.00%          26                 0   100.00%           0                 0         -
utils/file.rs                                        224                 5    97.77%          14                 0   100.00%         144                 4    97.22%           0                 0         -
utils/formatter.rs                                   195                 8    95.90%          16                 0   100.00%         160                12    92.50%           0                 0         -
utils/ip.rs                                           65                 0   100.00%           5                 0   100.00%          33                 0   100.00%           0                 0         -
utils/logger.rs                                       71                71     0.00%           1                 1     0.00%          38                38     0.00%           0                 0         -
utils/rounding.rs                                     68                 0   100.00%           7                 0   100.00%          41                 0   100.00%           0                 0         -
utils/tauri.rs                                       138                 0   100.00%          17                 0   100.00%          82                 0   100.00%           0                 0         -
workers/hardware_archive.rs                           52                52     0.00%           6                 6     0.00%          36                36     0.00%           0                 0         -
workers/mod.rs                                        24                24     0.00%           2                 2     0.00%          16                16     0.00%           0                 0         -
workers/system_monitor.rs                            151               151     0.00%          11                11     0.00%         106               106     0.00%           0                 0         -
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TOTAL                                               7951              3140    60.51%         748               363    51.47%        5636              2317    58.89%           0                 0         -

shm11C3 added 2 commits March 21, 2026 14:32
- setupdi_provider: check GetLastError() for ERROR_NO_MORE_ITEMS to
  distinguish enumeration end from unexpected errors in
  SetupDiEnumDeviceInfo
- setupdi_provider: extract read_registry_string() helper that retries
  with a dynamically allocated buffer when the fixed-size stack buffer
  is too small (ERROR_INSUFFICIENT_BUFFER)
- monitoring_service: switch bdf_to_dxgi_name from std OnceLock to
  tokio OnceCell with spawn_blocking so the blocking SetupDi calls
  never stall an async worker thread
- DashboardItems: guard against empty gpus array and add optional
  chaining on the element access
Copilot AI review requested due to automatic review settings March 21, 2026 05:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 5 comments.

Comment thread src-tauri/src/infrastructure/providers/windows/setupdi_provider.rs
Comment thread src/features/hardware/dashboard/components/DashboardItems.tsx Outdated
Comment thread src-tauri/src/services/monitoring_service.rs
Comment thread src-tauri/src/services/monitoring_service.rs
Comment thread src-tauri/src/services/monitoring_service.rs Outdated
Copilot AI review requested due to automatic review settings March 21, 2026 06:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.

Comment thread src/features/hardware/dashboard/components/DashboardItems.tsx Outdated
Comment thread src-tauri/src/services/monitoring_service.rs Outdated
Comment thread src-tauri/src/infrastructure/providers/windows/adl_provider.rs
shm11C3 added 3 commits March 21, 2026 15:14
- setupdi_provider: remove unused `log_internal` import that would fail
  `clippy -D warnings` in CI
- DashboardItems: restrict fallback to single-GPU + single-metric case
  to avoid showing another adapter's metrics on multi-GPU systems
- monitoring_service: log JoinError explicitly in bdf_to_dxgi_name
  instead of silently swallowing it via unwrap_or_default
- monitoring_service: fetch BDF→name map once before the loop instead
  of awaiting resolve_gpu_name per iteration
- monitoring_service: extract resolve_gpu_name_from_map as a pure
  function and add 4 unit tests covering hit, miss, multi-BDF
  disambiguation, and duplicate-entry behavior
Copilot AI review requested due to automatic review settings March 21, 2026 06:18
@github-actions github-actions Bot added the docs label Mar 21, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Comment thread src-tauri/src/services/monitoring_service.rs
Copilot AI review requested due to automatic review settings March 21, 2026 06:36

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Comment thread src-tauri/src/services/monitoring_service.rs
Copilot AI review requested due to automatic review settings March 21, 2026 08:24

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Comment thread src-tauri/Cargo.toml
wmi = "0.18.3"
dxgi = "0.1.7"
winapi = { version = "0.3", features = ["dxgi"] }
winapi = { version = "0.3", features = ["dxgi", "setupapi", "devguid"] }

Copilot AI Mar 21, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

setupdi_provider.rs imports additional WinAPI modules (um::errhandlingapi, um::handleapi, plus shared::minwindef/shared::winerror). The winapi dependency here only enables dxgi, setupapi, and devguid, so the build can become brittle if those extra module features aren’t pulled in transitively. Consider explicitly enabling the needed winapi features (e.g., errhandlingapi, handleapi, minwindef, winerror) or switching those calls to the already-enabled windows crate APIs to avoid feature-gate compile failures.

Suggested change
winapi = { version = "0.3", features = ["dxgi", "setupapi", "devguid"] }
winapi = { version = "0.3", features = ["dxgi", "setupapi", "devguid", "errhandlingapi", "handleapi", "minwindef", "winerror"] }

Copilot uses AI. Check for mistakes.
@shm11C3 shm11C3 enabled auto-merge (squash) March 21, 2026 08:29
@shm11C3 shm11C3 merged commit 8dfed7c into develop Mar 21, 2026
28 checks passed
@shm11C3 shm11C3 deleted the fix/amd-gpu-temp-dashboard-bdf-matching branch March 21, 2026 08:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working configuration docs frontend rust Pull requests that update Rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants