window 顯示驅動開發-視頻內存供應和回收(一)

Windows 顯示驅動程序模型 (WDDM) 1.2 及更高版本用戶模式顯示驅動程序必須使用內存套餐和回收功能(從Windows 8開始提供),以減少本地內存和系統內存中臨時表面所需的內存開銷。

最低 WDDM 版本:1.2

最低 Windows 版本:8

驅動程序實現 - 完整圖形和僅呈現:必需

WHCK 要求和測試: Device.Graphics...OfferReclaim

特別是在移動方案中,需要硬件加速的圖形密集型應用可能會大量使用 GPU 資源。 此外,在許多移動設備中,GPU 集成到 CPU 芯片集中,GPU 使用部分系統內存作為視頻內存。 為了確保在多個應用大量使用 GPU 進而對系統內存提出大量需求時提供合理的系統性能,應盡量減少顯示驅動程序的內存占用。 提供/回收設備驅動程序接口 (DDI) 提供執行此操作的機制。

1. 核心目標

減少內存開銷:通過動態回收臨時表面(Temporary Surfaces)的內存,優化 集成GPU(如移動設備)的 系統內存利用率。

適用場景:

  • GPU 共享系統內存(如 Intel HD Graphics、AMD APU、移動 SoC)。
  • 多應用高負載時避免內存耗盡導致的性能下降。

2. 關鍵機制

(1) 內存套餐(Offer)
作用:驅動程序標記不再需要的內存分配為“可回收”,允許 OS 臨時將其分配給其他進程或系統使用。

觸發條件:

  • 應用釋放資源(如 Direct3D 紋理銷毀)。
  • 驅動程序檢測到閑置表面(如后臺應用的交換鏈緩沖區)。

(2) 內存回收(Reclaim)
作用:當原始需求恢復時(如應用重新激活),驅動程序嘗試收回之前“Offer”的內存。

可能結果:

  • 成功:內存內容可能保留(依賴 DXGI_RECLAIM_RESOURCE_FLAGS)
  • 失敗:需重新分配內存并初始化(內容丟失)。

3. 驅動程序實現要求

?(1) 必需接口

DDI 函數描述
OfferResources標記資源為可回收(調用?DXGK_OFFER_ALLOCATION_LIST)。
ReclaimResources嘗試收回資源(返回?DXGK_RECLAIM_RESULT?狀態)。

(2) 數據結構
DXGKARGCB_OFFER_ALLOCATION:

包含要 Offer 的分配句柄列表及優先級(DXGK_OFFER_PRIORITY)。

DXGK_RECLAIM_ALLOCATION_LIST:

指定需回收的資源列表及回收標志(如 Discarded 狀態)。

4. 用戶模式驅動(UMD)與內核模式驅動(KMD)協作

  • UMD 觸發 Offer:調用 IDXGIDevice2::OfferResources(Direct3D 11+)或 vkOfferResources(Vulkan)。
  • KMD 處理:通過 DxgkCbOfferAllocation 回調通知圖形內核。
  • OS 決策:根據內存壓力決定是否實際釋放物理內存。
  • UMD 觸發 Reclaim:調用 IDXGIDevice2::ReclaimResources。
  • KMD 驗證:返回資源是否可重用(如 DXGK_RECLAIM_RESULT_OK)。

5. 優先級與策略

Offer 優先級(DXGK_OFFER_PRIORITY):

  1. Low:緩存數據(可優先回收)。
  2. Normal:常規資源。
  3. High:關鍵資源(盡量避免回收)。

回收策略:若 ReclaimResources 返回 DXGK_RECLAIM_RESULT_DISCARDED,UMD 需重建資源內容。

6. 代碼示例(KMD 側)

// Offer 資源處理(在 DxgkDdiOfferAllocations 中)
NTSTATUS DxgkDdiOfferAllocations(DXGKARG_OFFER_ALLOCATIONS* pOfferArgs
) {for (UINT i = 0; i < pOfferArgs->NumAllocations; i++) {DXGK_ALLOCATION_HANDLE hAlloc = pOfferArgs->pAllocationList[i];MarkAsOfferable(hAlloc, pOfferArgs->Priority);}return STATUS_SUCCESS;
}// Reclaim 資源處理(在 DxgkDdiReclaimAllocations 中)
NTSTATUS DxgkDdiReclaimAllocations(DXGKARG_RECLAIM_ALLOCATIONS* pReclaimArgs
) {for (UINT i = 0; i < pReclaimArgs->NumAllocations; i++) {if (IsResourceValid(pReclaimArgs->pAllocationList[i])) {pReclaimArgs->pResults[i] = DXGK_RECLAIM_RESULT_OK;} else {pReclaimArgs->pResults[i] = DXGK_RECLAIM_RESULT_DISCARDED;}}return STATUS_SUCCESS;
}

7. 應用層兼容性(DXGI 1.2+)

API 使用示例:

// Direct3D 11 應用示例
IDXGIDevice2* pDXGIDevice;
pD3DDevice->QueryInterface(IID_PPV_ARGS(&pDXGIDevice));
pDXGIDevice->OfferResources(1, &pTexture, DXGI_OFFER_RESOURCE_PRIORITY_NORMAL);
// ... 后續可能需要回收 ...
HRESULT hr = pDXGIDevice->ReclaimResources(1, &pTexture, &bDiscarded);

8. WHCK 測試要求

測試項:Device.Graphics.WDDM12.Render.OfferReclaim

驗證點:

  • Offer 后內存壓力緩解。
  • Reclaim 后資源功能正常。
  • 正確處理 DISCARDED 狀態。

9. 性能與調試建議

日志記錄:跟蹤 Offer/Reclaim 調用頻率及結果。

內存分析:使用 ETW 事件(如 Microsoft-Windows-DxgKrnl)監控內存回收效率。

Fallback 處理:確保資源回收失敗時能優雅重建(如重新上傳紋理數據)。

10. 總結

必要性:WDDM 1.2+ 驅動必須實現 Offer/Reclaim 以通過 WHQL 認證。

優勢:顯著降低集成 GPU 的內存占用,提升多任務性能。

注意:正確處理 DISCARDED 狀態是健壯性關鍵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906607.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906607.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906607.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是VR場景?VR與3D漫游到底有什么區別

在數字化時代&#xff0c;虛擬現實&#xff08;Virtual Reality, 簡稱VR&#xff09;場景與3D漫游作為兩種前沿技術&#xff0c;改變著人們的生活方式和體驗模式。通過計算機模擬真實或假想的場景&#xff0c;讓用戶仿佛身臨其境&#xff0c;并能與虛擬環境進行互動。盡管VR場景…

JAVA查漏補缺(2)

AJAX 什么是Ajax Ajax&#xff08;Asynchronous Javascript And XML&#xff09;&#xff0c;即是異步的JavaScript和XML&#xff0c;Ajax其實就是瀏覽器與服務器之間的一種異步通信方式 異步的JavaScript 它可以異步地向服務器發送請求&#xff0c;在等待響應的過程中&…

客服中心大模型應用演進路線:從傳統服務到超級智能助手的轉型

客服中心作為企業與客戶溝通的重要橋梁&#xff0c;近年來經歷了從人工服務到人工智能驅動的深刻變革。本文基于"客服中心大模型應用演進路線圖"&#xff0c;詳細解析客服中心從傳統模式向AI驅動智能服務的轉型歷程&#xff0c;剖析每個發展階段的特點、應用場景及關…

使用 OpenCV 實現“隨機鏡面墻”——多鏡片密鋪的哈哈鏡效果

1. 引言 “哈哈鏡”是一種典型的圖像變形效果&#xff0c;通過局部鏡面反射產生扭曲的視覺趣味。在計算機視覺和圖像處理領域&#xff0c;這類效果不僅有趣&#xff0c;還能用于藝術創作、交互裝置、視覺特效等場景。 傳統的“哈哈鏡”往往是針對整張圖像做某種鏡像或扭曲變換…

Python訓練營打卡——DAY33(2025.5.22)

目錄 簡單的神經網絡 一、PyTorch的安裝 二、準備工作 三、數據的準備 四、模型架構定義 五、模型訓練&#xff08;CPU版本&#xff09; 1. 定義損失函數和優化器 2. 開始循環訓練 3. 可視化結果 六、通俗解釋 1. 環境安裝&#xff08;相當于買鍋碗瓢盆&#xff09;…

目標檢測 Lite-DETR(2023)詳細解讀

文章目錄 迭代高級特征跨尺度融合高效的低層次特征跨尺度融合KDA&#xff1a;Key-aware Deformable Attention 論文翻譯&#xff1a; CVPR 2023 | Lite DETR&#xff1a;計算量減少60%&#xff01;高效交錯多尺度編碼器-CSDN博客 DINO團隊的 &#xff08;Lightweight Transfo…

ES(Elasticsearch) 基本概念(一)

Elasticsearch作為當前最流行的開源搜索和分析引擎&#xff0c;廣泛應用于日志分析、全文搜索、業務智能等領域。Elasticsearch是一個基于 Apache Lucene 構建的分布式搜索和分析引擎、可擴展數據存儲和矢量數據庫。它針對生產級工作負載的速度和相關性進行了優化。使用 Elasti…

當物聯網“芯”闖入納米世界:ESP32-S3驅動的原子力顯微鏡能走多遠?

上次咱們把OV2640攝像頭“盤”得明明白白&#xff0c;是不是感覺ESP32-S3這小東西潛力無限&#xff1f;今天&#xff0c;咱們玩個更刺激的&#xff0c;一個聽起來就讓人腎上腺素飆升的挑戰——嘗試用ESP32-S3這顆“智慧芯”&#xff0c;去捅一捅科學界的“馬蜂窩”&#xff0c;…

Excel合并單元格后,如何自動批量生成序號列

1.選擇整列 2.組合鍵&#xff1a;CtrlG 3.定位條件&#xff0c;選擇“空值” 4.在第一個框中輸入“MAX(”&#xff0c;鼠標選中A1框&#xff0c;后加“&#xff1a;”&#xff0c;鼠標選中前方“A1”&#xff0c;按“F4”絕對引用&#xff0c;補全右括號&#xff0c;后輸入“1…

TDengine 運維—容量規劃

概述 若計劃使用 TDengine 搭建一個時序數據平臺&#xff0c;須提前對計算資源、存儲資源和網絡資源進行詳細規劃&#xff0c;以確保滿足業務場景的需求。通常 TDengine 會運行多個進程&#xff0c;包括 taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。 在這些進程…

Axure設計數字鄉村可視化大屏:從布局到交互的實戰經驗分享

鄉村治理正從傳統模式向“數據驅動”轉型。數字鄉村可視化大屏作為數據展示的核心載體&#xff0c;不僅能直觀呈現鄉村發展全貌&#xff0c;還能為決策提供科學依據。本文以Axure為工具&#xff0c;結合實際案例&#xff0c;分享如何從零設計一個功能完備、交互流暢的數字鄉村大…

從零基礎到最佳實踐:Vue.js 系列(1/10):《環境搭建與基礎概念》

Vue.js 環境搭建與基礎概念 關鍵點 Vue.js 是一個簡單易用的前端框架&#xff0c;適合初學者快速上手。搭建開發環境需要安裝 Node.js 和 npm/Yarn&#xff0c;推薦使用最新 LTS 版本。Vue CLI 是官方工具&#xff0c;可快速創建項目并提供開發服務器。Vue.js 基于 MVVM 模式&…

使用docker compose部署dify(大模型開發使用平臺)

Dify是一款生成式 AI 應用中間件&#xff0c;面向有私有部署與數據合規需求的企業用戶&#xff0c;推動企業向 AI 時代轉型。平臺支持無代碼構建&#xff0c;業務人員即可快速搭建與調試 AI 應用&#xff0c;顯著降低開發門檻。 參考 https://docs.dify.ai/zh-hans/getting-s…

npm 安裝時 SSL 證書過期問題筆記

問題描述: npm error code CERT_HAS_EXPIRED npm error errno CERT_HAS_EXPIRED npm error request to https://registry.npm.taobao.org/axios failed, reason: certificate has expired 這表明當前配置的 npm 鏡像源&#xff08;淘寶鏡像 https://registry.npm.taobao.org&…

力扣HOT100之二叉樹: 236. 二叉樹的最近公共祖先

果然&#xff0c;這道題二刷還是不會做&#xff0c;回去看卡爾視頻了。結合靈神的題解&#xff0c;我對這道題有了一些新的理解。 首先這道題還是用遞歸來做&#xff0c;由于我們需要計算兩個節點的最近公共祖先&#xff0c;一定是從下往上來遍歷&#xff0c;只有先判斷左右子樹…

Word 轉 HTML API 接口

Word 轉 HTML API 接口 圖像/轉換 Word 文檔轉換為 HTML 文件轉換 / 超高精度與還原度 文件轉換 / Word。 1. 產品功能 超高精度與還原度的 HTML 文件轉換&#xff1b;支持將 Word 文檔轉換為 HTML 格式&#xff1b;支持 .doc 和 .docx 格式&#xff1b;保持原始 Word 文檔的…

idea 安裝飛算-javaAI 插件使用

文章目錄 前言idea 安裝飛算-javaAI 插件使用1. 介紹一下飛算-AI2. 安裝使用 前言 如果您覺得有用的話&#xff0c;記得給博主點個贊&#xff0c;評論&#xff0c;收藏一鍵三連啊&#xff0c;寫作不易啊^ _ ^。 ??而且聽說點贊的人每天的運氣都不會太差&#xff0c;實在白嫖的…

Bert預訓練任務-MLM/NSP

MLM MLM:Masked Language Mode:在每一個訓練序列中以15%的概率隨機地選中某個token進行MASK,當一個token被選中后&#xff0c;有以下三種處理方式&#xff1a; 80%的概率被[MASK]&#xff0c;如my dog is hairy->my dog is [MASK]10%的概率修改為隨機的其他token,如my dog …

瀏覽器原生 Web Crypto API 實現 SHA256 Hash 加密

寫在前面 在我上一篇文章 《node 后端和瀏覽器前端&#xff0c;有關 RSA 非對稱加密的完整實踐&#xff0c; 前后端匹配的代碼演示》 中&#xff0c;我們使用 瀏覽器原生 Web Crypto API 實現了 RSA 的加密算法。 但是&#xff0c;在我之前的 《我設計的一個安全的 web 系統用…

5G 網絡尋呼的信令及 IE 信息分析

一、尋呼信令的觸發背景 在 5G 網絡中,當網絡側有下行數據要發送給處于空閑態(RRC_IDLE)或非激活態(RRC_INACTIVE)的用戶設備(UE)時,就會觸發尋呼流程。這是因為在這些狀態下,UE 與網絡之間沒有建立持續的無線資源控制(RRC)連接,網絡需要通過尋呼機制來通知 UE 有…