Windows 圖形顯示驅動開發-WDDM 2.4功能-GPU 半虛擬化(十二)

DxgkDdiQueryAdapterInfo 更新

DXGKARG_QUERYADAPTERINFO 結構已更新,以包括以下字段以支持半虛擬化:

  • 添加了 Flags 成員,允許 Dxgkrnl 指示以下內容:
  1. 它將 VirtualMachineData 設置為指示調用來自 VM。
  2. 它將 SecureVirtualMachine 設置為表示 VM 在安全模式下運行。
  • 添加了 hKmdProcessHandle,這允許驅動程序在處理源自來賓 VM 的查詢時識別和使用主機端的正確進程上下文。

DxgkDdiEscape 更新

hKmdProcessHandle 成員被添加到 DXGKARG_ESCAPE 結構中,以允許驅動程序在處理來自來賓虛擬機的轉義時,識別并使用主機端的正確進程上下文。

VirtualMachineData 標志被添加到 D3DDDI_ESCAPEFLAGS 結構中,以指示 DxgkDdiEscape 是從虛擬機調用的。

物理訪問 GPU 分配

目前,驅動程序不會實現對分配的物理訪問。 驅動程序必須支持 GpuMmu。

WDDM 2.5 DDI 更新

對于 WDDM 2.5,為了支持半虛擬化,還需要進行以下 DDI 更改。

?由 KMD 主機發出來賓事件信號

當 KMD 需要對 UMD 創建的事件發出信號時,會出現一些沒有虛擬化的情況。 若要在使用半虛擬化時處理此類情況,主機上的 KMD 需要向客戶機中創建的事件發送信號。 為此添加了 DxgkCbSignalEvent 回調。 KMD 還可以使用此回調來發出主機進程的事件信號。

支持虛擬機中 UMD 提供的句柄

某些驅動程序回調接受 UMD 傳遞的 Dxgkrnl 分配或資源句柄,例如:

  • DxgkCbAcquireHandleData
  • DxgkCbReleaseHandleData
  • DxgkCbGetHandleData
  • DxgkCbGetHandleParent

主機上的調用必須在調用 DxgkDdiXxx 函數的同一線程上下文中進行。

例如,假設在沒有虛擬化的情況下,KMD 在調用 D3DKMTEscape 的用戶模式線程的上下文中調用 DxgkCbAcquireHandleData,該線程調用 DxgkDdiEscape。

UMD 在虛擬機中運行時,它只知道來賓分配句柄,并且無法將此類句柄傳遞給 KMD,因為 KMD 在主機中運行。 來賓中的 UMD 會調用 D3DKMTEscape,而主機中的 KMD 會接收相應的 DxgkDdiEscape 調用。 KMD 需要在此線程的上下文中調用 DxgkCbAcquireHandleData。

為了能將來賓分配/資源句柄轉換為相應的主機句柄,添加了 D3DDDI_ESCAPEFLAGS::DriverKnownEscape 驅動程序轉義標志。

在調用 D3DKMTEscape 并設置 DriverKnownEscape 標記時:

  • 將 D3DKMT_ESCAPE::Type 設置為 D3DKMT_ESCAPE_DRIVERPRIVATE。
  • 將 D3DKMT_ESCAPE::pPrivateDriverData 設置為指向已知的驅動程序轉義結構,該結構在下一節中定義。 每個結構都以 D3DDDI_DRIVERESCAPETYPE 值開頭。

如果未使用虛擬化,則轉換后的句柄與輸入句柄相同。

定義了以下已知的驅動程序轉義字符。

  • D3DDDI_DRIVERESCAPE_TRANSLATEALLOCATIONEHANDLE
  • D3DDDI_DRIVERESCAPE_TRANSLATERESOURCEHANDLE

以下代碼片段演示如何使用 DriverKnownEscape 標志。

D3DDDI_DRIVERESCAPE_TRANSLATEALLOCATIONEHANDLE Command = {};Command.EscapeType = D3DDDI_DRIVERESCAPETYPE_TRANSLATEALLOCATIONHANDLE;Command.hAllocation = hAlloc;D3DKMT_ESCAPE Args = {};Args.hAdapter = hAdapter;Args.Flags.DriverKnownEscape = TRUE;Args.Type = D3DKMT_ESCAPE_DRIVERPRIVATE;Args.pPrivateDriverData = &Command;Args.PrivateDriverDataSize = sizeof(Command);Status = D3DKMTEscape(&Args);

WDDM 2.6 DDI 更新

從 WDDM 2.6(Windows 10 版本 1903 開始),為半虛擬化支持進行了以下更新:

  1. 驅動程序可以在虛擬機中使用 DXGK_ALLOCATIONINFOFLAGS::ACCESSEDPHYSICALLY 標志。 在 WDDM 2.6 之前,驅動程序無法在虛擬機中使用此標志,并且此標志的分配創建失敗。
  2. UMD 可以在虛擬機中使用 Pfnd3dkmtUpdateallocationproperty。 在 WDDM 2.6 之前,此調用將失敗。

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

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

相關文章

iOS審核被拒:Missing privacy manifest 第三方庫添加隱私聲明文件

問題: iOS提交APP審核被拒,蘋果開發者網頁顯示二進制錯誤,收到的郵件顯示的詳細信息如下圖: 分析: 從上面信息能看出第三方SDK庫必須要包含一個隱私文件,去第三方庫更新版本。 幾經查詢資料得知,蘋果在…

馬達加斯加企鵝字幕

Antarctica 南極洲 An inhospitable wasteland 一個荒涼的不毛之地 But even here 但即使在這里 on the Earth’s frozen bottom 地球另一端的冰天雪地里 we find life 也有生命存在 And not just any life 不是別的什么生物 Penguins 而是企鵝 Joyous, frolicking 快樂的 頑皮…

愛因斯坦求和 torch

目錄 向量點積 矩陣乘法 矩陣轉置 向量轉換相機坐標系 在 Python 的科學計算庫(如 NumPy)中,einsum 是一個強大的函數,它可以簡潔地表示各種張量運算。下面是幾個不同類型的使用示例: 向量點積 向量點積是兩個向量…

FPGA調試筆記

XILINX SSTL屬性電平報錯 錯誤如下: [DRC BIVRU-1] Bank IO standard Vref utilization: Bank 33 contains ports that use a reference voltage. In order to use such standards in a bank that is not configured to use INTERNAL_VREF, the banks VREF pin mu…

一區嚴選!挑戰5天一篇脂質體組學 DAY1-5

Day 1! 前期已經成功挑戰了很多期NHANES啦!打算來試試孟德爾隨機化領域~ 隨著孟德爾隨機化研究的普及,現在孟德爾發文的難度越來越高,簡單的雙樣本想被接收更是難上加難,那么如何破除這個困境,這次我打算…

DataGear 5.3.0 制作支持導出表格數據的數據可視化看板

DataGear 內置表格圖表底層采用的是DataTable表格組件,默認并未引入導出數據的JS支持庫,如果有導出表格數據需求,則可以在看板中引入導出相關JS支持庫,制作具有導出CSV、Excel、PDF功能的表格數據看板。 在新發布的5.3.0版本中&a…

【個人筆記】用戶注冊登錄思路及實現 springboot+mybatis+redis

基本思路 獲取驗證碼接口 驗證碼操作用了com.pig4cloud.plugin的captcha-core這個庫。 AccountControl的"/checkCode"接口代碼,通過ArithmeticCaptcha生成一張驗證碼圖片,通過text()函數得到驗證碼的答案保存到變量code,然后把圖…

Linux網絡編程概述

Linux網絡編程是在Linux操作系統環境下進行的網絡相關程序開發,主要用于實現不同計算機之間的數據通信和資源共享。以下從基礎知識、網絡編程模型、常用函數和編程步驟等方面進行詳細介紹: 基礎知識 1. 網絡協議 TCP/IP協議族:是互聯網通信…

Linux內核perf性能分析工具案例分析

一、系統級性能分析工具perf原理 1. perf 的基本概念 內核集成:perf 直接集成在 Linux 內核源碼中,能夠深度訪問硬件和操作系統層面的性能數據,具有低開銷、高精度的特點。 事件采樣原理:通過定期采樣系統事件&#xff0…

word-spacing 屬性

介紹 CSS word-spacing 屬性,用于指定段字之間的空間,例如: p {word-spacing:30px; }word-spacing屬性增加或減少字與字之間的空白。 注意: 負值是允許的。 瀏覽器支持 表格中的數字表示支持該屬性的第一個瀏覽器版本號。 屬…

5種特效融合愚人節搞怪病毒

內容供學習使用,不得轉賣,代碼復制后請1小時內刪除,此代碼會危害計算機安全,謹慎操作 并在虛擬機里運行此代碼!&#xff0c;病毒帶來后果自負! #include <windows.h> #include <cmath> #include <thread> using namespace std; // 屏幕特效函數聲明 void In…

深入理解 Windows 進程管理:taskkill 命令詳解

引言 在 Windows 系統開發和日常使用中&#xff0c;我們經常會遇到程序卡死、文件被占用導致無法編譯等問題。這時&#xff0c;taskkill 命令就成了解決問題的利器。本文將詳細介紹 taskkill 的使用方法、常見場景以及注意事項&#xff0c;幫助你高效管理系統進程。 1. 什么是…

【C++】右值引用與完美轉發

目錄 一、右值引用&#xff1a; 1、左值與右值&#xff1a; 2、左值引用和右值引用&#xff1a; 二、右值引用的使用場景&#xff1a; 1、左值引用的使用場景&#xff1a; 2、右值引用的使用場景&#xff1a; 移動構造 移動賦值 三、完美轉發&#xff1a; 1、萬能引用…

wx201基于ssm+vue+uniapp的購物系統設計與實現小程序

開發語言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

Mac 常用命令

一、文件操作(必知必會)? ?1. 快速導航 cd ~/Documents # 進入文檔目錄 cd .. # 返回上級目錄 pwd # 顯示當前路徑 2. ?文件管理 touch new_file.txt # 創建空文件 mkdir -p project/{src,docs} # 遞歸創建目錄 cp …

Nginx RTMP 處理模塊 (ngx_rtmp_handler.c) 詳細分析

ngx_rtmp_handler 是 Nginx RTMP 模塊中的核心處理部分&#xff0c;主要負責處理 RTMP 流會話中的數據接收、發送、ping 操作以及分塊大小的設置等。 1. 全局變量 ngx_rtmp_naccepted: 記錄接受的 RTMP 連接數。 ngx_rtmp_bw_out 和 ngx_rtmp_bw_in: 分別表示輸出帶寬和輸入帶…

(二)萬字長文解析:deepResearch如何用更長的思考時間換取更高質量的回復?各家產品對比深度詳解

DeepResearch的研究背景 業務背景&#xff1a;用更長的等待時間&#xff0c;換取更高質量、更具實用性的結果 當前AI技術發展正經歷從“即時響應”到“深度思考”的范式轉變。用戶對延遲的容忍度顯著提升&#xff0c;從傳統200ms的交互響應放寬至數秒甚至數分鐘&#xff0c;以…

綜述速讀|086.04.24.Retrieval-Augmented Generation for AI-Generated Content A Survey

論文題目&#xff1a;Retrieval-Augmented Generation for AI-Generated Content: A Survey 論文地址&#xff1a;https://arxiv.org/abs/2402.19473 bib引用&#xff1a; misc{zhao2024retrievalaugmentedgenerationaigeneratedcontent,title{Retrieval-Augmented Generation…

Spring Cache:簡化緩存管理的抽象框架

Spring Cache Spring Cache是Spring框架提供的緩存抽象層&#xff0c;通過注解和自動化配置&#xff0c;簡化應用中對緩存的操作&#xff0c;支持多種緩存實現&#xff08;如Redis、Ehcache、Caffeine&#xff09;。 1. 核心特性 聲明式緩存&#xff1a;通過注解&#xff08;…

求矩陣某列的和

設計函數sum_column( int A[E1(n)][E2(n)], int j )&#xff0c;E1(n)和E2(n)分別為用宏定義的行數和列數&#xff0c;j為列號。在該函數中&#xff0c;設計指針ptr&A[0][j]&#xff0c;通過*ptr及ptrptrE2(n)訪問第j列元素&#xff0c;從而求得第j列元素的和。在主函數中定…