window 顯示驅動開發-呈現開銷改進(二)

對共享表面的紋理格式支持
驅動程序應支持共享資源和可共享的后臺緩沖區,以使用 DXGI_FORMAT 枚舉中的這些附加紋理格式:

  • DXGI_FORMAT_A8_UNORM
  • DXGI_FORMAT_R8_UNORM
  • DXGI_FORMAT_R8G8_UNORM
  • DXGI_FORMAT_BC1_TYPELESS\*
  • DXGI_FORMAT_BC1_UNORM
  • DXGI_FORMAT_BC1_UNORM_SRGB
  • DXGI_FORMAT_BC2_TYPELESS\*
  • DXGI_FORMAT_BC2_UNORM
  • DXGI_FORMAT_BC2_UNORM_SRGB
  • DXGI_FORMAT_BC3_TYPELESS\*
  • DXGI_FORMAT_BC3_UNORM
  • DXGI_FORMAT_BC3_UNORM_SRGB

此外,如果驅動程序在 Direct3D 功能級別 9 硬件上支持 Microsoft Direct3D 11 及更高版本,則應支持 DXGI_FORMAT_L8_UNORM 占位符格式。 DXGI_FORMAT_L8_UNORM 在功能上等效于 D3DDDIFMT_L8 格式。

驅動程序還應支持 來自 D3DDDIFORMAT 枚舉的其他紋理格式:

  • D3DDDIFMT_G8R8
  • D3DDDIFMT_R8

1. 核心支持格式列表

WDDM 驅動程序必須為 共享資源 和 可交換的后臺緩沖區 支持以下紋理格式:

(1) DXGI 格式(Direct3D 10/11/12)

格式描述典型用途
DXGI_FORMAT_A8_UNORM8-bit 單通道 Alpha(無類型)UI 蒙版、字體渲染
DXGI_FORMAT_R8_UNORM8-bit 單通道 Red灰度圖像、高度圖
DXGI_FORMAT_R8G8_UNORM16-bit 雙通道(Red+Green)法線貼圖、矢量場
DXGI_FORMAT_BC1_*BC1 壓縮格式(DXT1)不透明/1-bit Alpha 紋理壓縮
DXGI_FORMAT_BC2_*BC2 壓縮格式(DXT3)帶顯式 Alpha 的紋理壓縮
DXGI_FORMAT_BC3_*BC3 壓縮格式(DXT5)帶插值 Alpha 的紋理壓縮

:標有?*_TYPELESS?的格式需支持類型轉換(如?BC1_TYPELESS?→?BC1_UNORM)。

注:標有 *_TYPELESS 的格式需支持類型轉換(如 BC1_TYPELESS → BC1_UNORM)。

(2) D3DDDI 格式(Direct3D 9 兼容性)

格式等效 DXGI 格式描述
D3DDDIFMT_L8_UNORMDXGI_FORMAT_R8_UNORM8-bit 灰度(Direct3D 9 遺留)
D3DDDIFMT_G8R8DXGI_FORMAT_R8G8_UNORM16-bit Green+Red
D3DDDIFMT_R8DXGI_FORMAT_R8_UNORM8-bit Red

2. 驅動實現要求

(1) 格式聲明
在 D3D10DDI_D3D11_OPTIONS 或 DXGI_DDI_BASE_ARGS 中聲明支持:

DXGI_DDI_BASE_ARGS BaseArgs = {0};
BaseArgs.DDIVersion = DXGI_DDI_VERSION_1_3;
BaseArgs.SupportedFormats.R8_UNORM = TRUE;  // 示例:啟用 R8_UNORM

(2) 共享資源創建
處理 D3D11_DDI_RESOURCE_MISC_SHARED 標志的資源分配:

HRESULT CreateSharedResource(D3D10DDI_HDEVICE hDevice,CONST D3D11DDIARG_CREATERESOURCE* pArgs
) {if (pArgs->MiscFlags & D3D11_DDI_RESOURCE_MISC_SHARED) {ValidateFormat(pArgs->Format);  // 檢查是否為支持的共享格式}// 正常創建資源...
}

(3) 跨 API 兼容性
Direct3D 9 → Direct3D 11 共享:

  • 將 D3DDDIFMT_L8_UNORM 映射為 DXGI_FORMAT_R8_UNORM。
  • 確保 D3DDDIFMT_G8R8 與 DXGI_FORMAT_R8G8_UNORM 數據布局一致。

3. 特殊場景處理

(1) Direct3D 9 硬件的 D3D11 支持
若硬件僅支持 Direct3D 9 功能級別,仍需通過占位符格式 DXGI_FORMAT_L8_UNORM 提供灰度支持:

// 在 GetCaps 中響應查詢
if (Type == D3DDDICAPS_GET_FORMAT_SUPPORT) {if (pArgs->Format == DXGI_FORMAT_L8_UNORM) {*(BOOL*)pData = TRUE;  // 聲明支持}
}

(2) 壓縮紋理的共享
BCn 壓縮格式需保證跨進程/設備可訪問:

  • 內存對齊:BC1/BC2/BC3 的塊大小為 4x4 像素。
  • 禁止格式轉換(除非顯式指定 TYPELESS)。

4. WHCK 認證測試項

測試項驗證目標方法
Device.Graphics.WDDM13.Format.Shared共享資源的格式支持正確性。創建共享表面并跨進程讀寫驗證。
Device.Graphics.WDDM13.Format.BCnBC 壓縮紋理的共享與渲染一致性。PIX 捕獲壓縮紋理數據。
Device.Graphics.WDDM13.Format.D3D9CompatD3D9 遺留格式(如?L8_UNORM)的兼容性。D3D9 與 D3D11 互操作測試。

5. 調試與問題排查

常見問題:

  • 共享失敗:檢查格式是否在 SupportedFormats 中聲明。
  • 數據錯亂:驗證 D3DDDIFMT_G8R8 與 DXGI_FORMAT_R8G8_UNORM 的通道順序是否一致(G=R, R=G)。

工具推薦:

  • PIX on Windows:捕獲共享表面的內存布局。
  • DirectX Caps Viewer:檢查驅動聲明的格式支持。

6. 性能優化建議

  • 壓縮紋理優先:對共享的靜態紋理(如 UI 素材)使用 BCn 壓縮以減少內存帶寬。
  • 灰度優化:R8_UNORM/L8_UNORM 格式適合單通道數據(如遮罩),節省 75% 內存。
  • 內存對齊:共享表面按 4KB 對齊,避免跨進程訪問的性能懲罰。

7. 總結

強制要求:WDDM 1.3+ 驅動必須支持上述格式以實現跨 API/進程資源共享。

關鍵點:

  • 正確處理 D3DDDIFMT_* 與 DXGI_FORMAT_* 的映射關系。
  • 壓縮紋理(BCn)需保證共享時的數據一致性。

兼容性:Direct3D 9 硬件需通過 L8_UNORM 提供灰度支持。

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

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

相關文章

jenkins集成gitlab實現自動構建

jenkins集成gitlab實現自動構建 前面我們已經部署了Jenkins和gitlab,本文介紹將二者結合使用 項目源碼上傳至gitee提供公網訪問:https://gitee.com/ye-xiao-tian/my-webapp 1、創建一個群組和項目 2、添加ssh密鑰 #生成密鑰 [rootgitlab ~]# ssh-keyge…

barker-OFDM模糊函數原理及仿真

文章目錄 前言一、巴克碼序列二、barker-OFDM 信號1、OFDM 信號表達式2、模糊函數表達式 三、MATLAB 仿真1、MATLAB 核心源碼2、仿真結果①、barker-OFDM 模糊函數②、barker-OFDM 距離分辨率③、barker-OFDM 速度分辨率④、barker-OFDM 等高線圖 四、資源自取 前言 本文進行 …

深入解析 Redis Cluster 架構與實現(一)

#作者:stackofumbrella 文章目錄 Redis Cluster特點Redis Cluster與其它集群模式的區別集群目標性能hash tagsMutli-key操作Cluster Bus安全寫入(write safety)集群節點的屬性集群拓撲節點間handshake重定向與reshardingMOVED重定向ASK重定向…

linux centos 服務器性能排查 vmstat、top等常用指令

背景:項目上經常出現系統運行緩慢,由于數據庫服務器是linux服務器,記錄下linux服務器性能排查常用指令 vmstat vmstat介紹 vmstat 命令報告關于內核線程、虛擬內存、磁盤、陷阱和 CPU 活動的統計信息。由 vmstat 命令生成的報告可以用于平衡系統負載活動。系統范圍內的這…

在IIS上無法使用PUT等請求

錯誤來源: chat:1 Access to XMLHttpRequest at http://101.126.139.3:11000/api/receiver/message from origin http://101.126.139.3 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 其實我的后…

Python訓練第四十一天

DAY 41 簡單CNN 知識回顧 數據增強卷積神經網絡定義的寫法batch歸一化:調整一個批次的分布,常用與圖像數據特征圖:只有卷積操作輸出的才叫特征圖調度器:直接修改基礎學習率 卷積操作常見流程如下: 1. 輸入 → 卷積層 →…

Linux線程同步實戰:多線程程序的同步與調度

個人主頁:chian-ocean 文章專欄-Linux Linux線程同步實戰:多線程程序的同步與調度 個人主頁:chian-ocean文章專欄-Linux 前言:為什么要實現線程同步線程饑餓(Thread Starvation)示例:搶票問題 …

5.2 初識Spark Streaming

在本節實戰中,我們初步探索了Spark Streaming,它是Spark的流式數據處理子框架,具備高吞吐量、可伸縮性和強容錯能力。我們了解了Spark Streaming的基本概念和運行原理,并通過兩個案例演示了如何利用Spark Streaming實現詞頻統計。…

Go 即時通訊系統:日志模塊重構,并從main函數開始

重構logger 上次寫的logger.go過于繁瑣,有很多沒用到的功能;重構后只提供了簡潔的日志接口,支持日志輪轉、多級別日志記錄等功能,并采用單例模式確保全局只有一個日志實例 全局變量 var (once sync.Once // 用于實現…

「數據采集與網絡爬蟲(使用Python工具)」【數據分析全棧攻略:爬蟲+處理+可視化+報告】

- 第 103 篇 - Date: 2025 - 06 - 01 Author: 鄭龍浩/仟墨 文章目錄 「據采集與網絡爬蟲」【使用工具:Python】一 數據采集1 數據采集綜述(1)基本介紹(2)數據目標源(3)采集方式(4&am…

響應式系統與Spring Boot響應式應用開發

響應式系統概述 過去十年間,為應對移動和云計算的需求,軟件行業通過改進開發流程來構建更穩定、健壯且靈活的軟件系統。這種演進不僅服務于傳統用戶端(桌面/Web),還需支持多樣化設備(手機、傳感器等)。為應對這些挑戰,多個組織共同制定了《響應式宣言》(2014年發布)…

POJO、DTO和VO:Java應用中的三種關鍵對象詳解

在軟件開發特別是Java開發中,常常會遇到POJO、DTO和VO這三類對象。它們在不同場景下扮演著重要角色,有助于優化代碼結構、增強系統安全性和提升性能。本文將全面解析這三者的定義、區別及常見使用場景,幫助你更好地理解和應用。 1. POJO&…

leetcode付費題 353. 貪吃蛇游戲解題思路

貪吃蛇游戲試玩:https://patorjk.com/games/snake/ 問題描述 設計一個貪吃蛇游戲,要求實現以下功能: 初始化游戲:給定網格寬度、高度和食物位置序列移動操作:根據指令(上、下、左、右)移動蛇頭規則: 蛇頭碰到邊界或自身身體時游戲結束(返回-1)吃到食物時蛇身長度增加…

NLP學習路線圖(十三):正則表達式

在自然語言處理(NLP)的浩瀚宇宙中,原始文本數據如同未經雕琢的璞玉。而文本預處理,尤其是其中至關重要的正則表達式技術,正是將這塊璞玉轉化為精美玉器的核心工具集。本文將深入探討正則表達式在NLP文本預處理中的原理…

計算機網絡(4)——網絡層

1.概述 1.1 網絡層服務 (1) 網絡層為不同主機(Host)之間提供了一種邏輯通信機制 (2)每個主機和路由器都運行網絡層協議 發送方:將來自傳輸層的消息封裝到數據報(datagram)中接收方:向傳輸層交付數據段(segment) 1.2 網絡層核心功能 路由選擇(routing…

EMO2:基于末端執行器引導的音頻驅動虛擬形象視頻生成

今天帶來EMO2(全稱End-Effector Guided Audio-Driven Avatar Video Generation)是阿里巴巴智能計算研究院研發的創新型音頻驅動視頻生成技術。該技術通過結合音頻輸入和靜態人像照片,生成高度逼真且富有表現力的動態視頻內容,值得…

[Redis] Redis:高性能內存數據庫與分布式架構設計

標題:[Redis] 淺談分布式系統 水墨不寫bug 文章目錄 一、什么是Redis?一、核心定位二、核心優勢三、典型應用場景四、Redis vs 傳統數據庫 二、架構選擇與設計1、單機架構(應用程序 數據庫服務器)2、應用程序和數據庫服務器分離3…

HTML5 視頻播放器:從基礎到進階的實現指南

在現代Web開發中,視頻播放功能是許多網站的重要組成部分。無論是在線教育平臺、視頻分享網站,還是企業官網,HTML5視頻播放器都扮演著不可或缺的角色。本文將從基礎到進階,詳細介紹如何實現一個功能完善的HTML5視頻播放器&#xff…

牛客小白月賽117

前言:solveABCF相對簡單,D題思路簡單但是實現麻煩,F題郭老師神力b( ̄▽ ̄)。 A. 好字符串 題目大意:給定字符串s,里面的字母必須大小寫同時出現。 【解題】:沒什么好說的&#xff0…

特倫斯 S75 電鋼琴:重構演奏美學的極致表達

在數字音樂時代,電鋼琴正從功能性樂器升級為融合藝術、科技與生活的美學載體。特倫斯 S75 電鋼琴以極簡主義哲學重構產品設計,將專業級演奏體驗與現代家居美學深度融合,為音樂愛好者打造跨越技術邊界的沉浸式藝術空間。 一、極簡主義的視覺敘…