自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

苏洛的博客

长期进行windows平台的驱动开发;游戏小工具开发;自动化设备项目开发;DIY硬件开发和应用;

  • 博客(792)
  • 收藏
  • 关注

原创 window显示驱动开发—为 DirectX VA 2.0 扩展模式提供功能(二)

D3DDDICAPS_GETEXTENSIONGUIDCOUNT和D3DDDICAPS_GETEXTENSIONGUIDS是用于查询硬件支持的DXVA2.0扩展模式的请求类型。首先,通过D3DDDICAPS_GETEXTENSIONGUIDCOUNT获取支持的GUID数量,然后分配足够的内存,使用D3DDDICAPS_GETEXTENSIONGUIDS获取GUID列表。关键数据结构包括D3DDDIARG_GETCAPS,用于指定请求类型和返回数据。典型应用场景包括检查特定解码模式的支持和枚举所有支持的扩展模

2025-06-15 00:15:00 264

原创 window显示驱动开发—为 DirectX VA 2.0 扩展模式提供功能(三)

D3DDDICAPS_GETEXTENSIONCAPS请求类型用于查询Direct3D运行时支持的扩展模式功能。通过传递DXVADDI_QUERYEXTENSIONCAPSINPUT结构指定扩展GUID,UMD(用户模式驱动程序)将返回与该扩展相关的专用功能结构,如解码器配置或视频处理器能力。核心流程包括准备输入结构、分配输出缓冲区并调用GetCaps方法解析结果。典型应用场景包括查询解码器或视频处理器的具体能力。开发者需注意输出结构的不确定性、缓冲区大小及驱动兼容性,并结合动态检测和厂商文档确保正确解析返

2025-06-15 00:15:00 254

原创 window 显示驱动开发-DirectX VA 2.0 的扩展支持

DXVA2.0扩展了视频硬件加速支持,涵盖H.264、HEVC、VP9等编解码器,并引入混合解码模式,提升灵活性。其增强的处理能力支持多视频流并发和4K/8K高分辨率解码,同时提供去隔行、色彩转换等后处理功能。API扩展包括解码器管理、视频处理及设备资源共享接口。硬件要求需兼容DXVA2.0的GPU和驱动支持。应用场景广泛,包括播放器开发、游戏视频回放和视频编辑软件。后续版本如DXVA2.1+和D3D12VideoAPI进一步扩展支持。开发时需注意表面格式限制、兼容性检查和多线程安全。DXVA2.0显著提升

2025-06-14 00:15:00 389

原创 window显示驱动开发—为 DirectX VA 2.0 扩展模式提供功能(一)

查询DXVA2.0扩展模式的核心流程包括调用GetCaps函数,向用户模式显示驱动程序(UMD)请求DXVA2.0扩展能力。通过传递D3DDDIARG_GETCAPS结构,指定查询类型为DXVA相关功能,并填充关键字段如Type、pData和DataSize。Type成员需设置为特定值以查询解码配置数量、解码配置列表、解码器输出表面格式或视频处理器能力。解析返回数据时,根据Type不同,返回的数据结构也不同。开发者需注意驱动兼容性、缓冲区管理和错误处理,确保查询结果的准确性和兼容性。通过动态检测和结合硬件文

2025-06-14 00:15:00 865

原创 window 显示驱动开发-为视频处理创建渲染目标图面

Microsoft Direct3D运行时通过调用用户模式显示驱动程序的CreateResource函数,创建用于视频处理的呈现目标图面。驱动程序根据D3DDDIARG_CREATERESOURCE结构中的Flags成员,特别是VideoProcessRenderTarget位字段标志,确定创建视频处理图面。支持的图面类型包括使用VideoProcessRenderTarget标志创建的RGB或YUV图面,以及使用RenderTarget标志创建的RGB图面。驱动程序需验证格式支持,并根据需要分配视频专用表

2025-06-13 00:15:00 430

原创 window 显示驱动开发-处理视频帧

Microsoft Direct3D 运行时通过调用用户模式显示驱动程序的 VideoProcessBeginFrame 和 VideoProcessEndFrame 函数来管理视频帧的处理周期。在开始帧处理之前,必须调用 SetVideoProcessRenderTarget 函数设置渲染目标,且该调用只能在帧处理周期之外进行。在帧处理周期内,驱动程序通过 VideoProcessBlt 函数执行实际的视频帧处理。整个流程包括帧处理准备、渲染目标设置、视频处理执行和帧处理结束四个阶段,确保资源的高效管理和

2025-06-13 00:15:00 605

原创 window 显示驱动开发-如何查询视频处理功能(六)

D3DDDICAPS_FILTERPROPERTYRANGE请求类型允许应用程序查询视频处理器支持的过滤器属性(如降噪强度、边缘增强等)的有效参数范围,用于精细控制视频后处理效果。通过DXVADDI_QUERYFILTERPROPERTYRANGEINPUT结构指定查询参数,返回的DXVADDI_VALUERANGE结构包含最小值、最大值、默认值和步进增量。驱动程序根据属性类型和硬件能力动态调整范围,确保参数设置的有效性和安全性。此机制使应用程序能够精确了解各视频过滤器的可调参数范围,提供专业的视频质量控制

2025-06-12 00:15:00 322

原创 window 显示驱动开发-创建视频处理设备

Microsoft Direct3D 运行时通过调用用户模式显示驱动程序的 CreateVideoProcessDevice 和 DestroyVideoProcessDevice 函数来管理视频处理设备的创建与销毁。这两个函数是 DirectX 视频处理流水线的核心环节,分别负责分配和释放硬件资源。CreateVideoProcessDevice 函数通过验证参数、分配硬件资源和创建上下文来初始化设备,而 DestroyVideoProcessDevice 函数则负责停止处理流水线、释放硬件资源和销毁上下

2025-06-12 00:15:00 406

原创 window显示驱动开发—支持 Direct3D 版本 10(一)

本文介绍了如何在用户模式显示驱动程序(UMD)中启用和支持Direct3D版本10DDI。关键步骤包括在INF文件中声明支持D3D10功能,实现OpenAdapter10函数入口点,以及通过D3D10DDI_ADAPTERFUNCS结构初始化与Direct3D版本10DDI的通信。文章还详细描述了呈现管道的硬件加速阶段、状态刷新回调函数的使用、Direct3D10句柄的管理、错误处理机制、GPU信息查询、自由线程CalcPrivateDDI的实现,以及DirectX图形基础结构(DXGI)DDI的作用和关键

2025-06-11 01:44:36 1118

原创 window 显示驱动开发-如何查询视频处理功能(五)

本文介绍了Direct3D中用于查询视频处理器模式支持的处理子流格式的两个请求类型:D3DDDICAPS_GETVIDEOPROCESSORRTSUBSTREAMFORMATCOUNT和D3DDDICAPS_GETVIDEOPROCESSORRTSUBSTREAMFORMATS。前者用于查询支持的处理子流格式数量,后者用于获取具体的处理子流格式列表。关键数据结构包括DXVADDI_VIDEOPROCESSORINPUT,用于指定视频处理器模式。查询流程分为两步:首先查询子流格式数量,然后获取子流格式列表。U

2025-06-11 01:41:33 350

原创 window 显示驱动开发-如何查询视频处理功能(四)

D3DDDICAPS_GETVIDEOPROCESSORRTFORMATCOUNT和D3DDDICAPS_GETVIDEOPROCESSORRTFORMATS是用于查询特定视频处理器模式支持的渲染目标(RT)格式的请求类型。前者用于获取支持的渲染目标格式数量,后者用于获取具体的格式列表。Direct3D运行时通过D3DDDIARG_GETCAPS结构传递查询参数,UMD(用户模式驱动程序)在D3DDDIFORMAT类型数组中返回支持的格式。关键数据结构包括DXVADDI_VIDEOPROCESSORINPU

2025-06-11 01:41:12 302

原创 window 显示驱动开发-如何查询视频处理功能(二)

本文详细介绍了D3DDDICAPS_GETVIDEOPROCESSORCAPS请求类型在UMD(用户模式驱动程序)中的应用,用于查询视频处理器的独特功能。通过DXVADDI_VIDEOPROCESSORINPUT结构指定视频处理模式,UMD返回DXVADDI_VIDEOPROCESSORCAPS结构中的详细能力信息。文章还解析了关键数据结构,包括输入和输出结构,并详细说明了设备能力标志、去隔行技术、ProcAmp控制能力等。此外,文章还提供了驱动程序实现的规范,包括参数验证、能力结构填充、动态能力适配和错误

2025-06-10 00:15:00 1379

原创 window 显示驱动开发-如何查询视频处理功能(三)

D3DDDICAPS_GETPROCAMPRANGE请求类型允许应用程序查询视频处理器支持的ProcAmp控制参数(如亮度、对比度、色相、饱和度)的有效范围。通过DXVADDI_QUERYPROCAMPINPUT结构指定查询的属性和视频流信息,驱动程序返回DXVADDI_VALUERANGE结构,包含最小值、最大值、默认值和步进增量。此机制使应用程序能够准确了解可调整参数范围,提供合理的用户界面控制,并确保参数设置的有效性。驱动程序实现时需根据硬件能力和视频内容特性返回精确的范围值,并处理不支持的属性或无效

2025-06-10 00:15:00 263

原创 window 显示驱动开发-DirectX VA 2.0 的视频处理(一)

DirectXVA2.0在视频处理方面进行了重大架构升级,核心改进包括与Direct3D10+共享设备接口的统一设备模型、增强的视频处理器功能(如去隔行、缩放、色彩空间转换等)、以及改进的内存模型支持表面池和重用。视频处理管线包括解码器、处理器和服务等关键组件接口,支持硬件加速解码、后处理与转换、资源创建管理等功能。视频处理器功能详解涵盖了创建、能力查询和处理操作执行等步骤,支持实时色彩调整、区域处理控制和混合模式等高级处理特性。性能优化策略包括表面池管理、异步处理模式和硬件特性检测。错误处理与恢复机制涉及

2025-06-09 00:15:00 341

原创 window 显示驱动开发-如何查询视频处理功能(一)

在调用GetCaps函数时,用户模式显示驱动程序(UMD)根据D3DDDIARG_GETCAPS结构中的Type成员提供视频处理功能。具体包括D3DDDICAPS_GETVIDEOPROCESSORDEVICEGUIDCOUNT和D3DDDICAPS_GETVIDEOPROCESSORDEVICEGUIDS两种请求类型,分别用于查询支持的视频处理器GUID数量和具体GUID列表。UMD通过DXVADDI_VIDEODESC结构处理特定视频流,并返回支持的GUID。典型GUID包括逐行处理设备、Bob去隔行设

2025-06-09 00:15:00 428

原创 window 显示驱动开发-解码视频

Microsoft Direct3D 运行时通过调用用户模式显示驱动程序的 DecodeBeginFrame 和 DecodeEndFrame 函数来管理视频解码的生命周期。在解码操作开始前,必须调用 SetDecodeRenderTarget 函数设置呈现目标图面,且该调用只能在帧解码时间段之外进行。在受保护模式下,Direct3D 运行时通过 pPVPSetKey 指针设置或更改 DirectXVA 内容密钥,用于加密和解密压缩缓冲区。解码操作通过 DecodeExecute 函数执行,该函数处理不同类

2025-06-08 00:15:00 912

原创 window 显示驱动开发-同步视频解码操作

DirectXVA2.0的同步机制相较于1.0版本进行了显著改进,更贴近Microsoft Direct3D的操作模式。在1.0版本中,解码器需主动轮询缓冲区状态,导致高CPU占用率和不可预测的延迟。而2.0版本采用基于锁定的被动同步机制,解码器通过锁定压缩缓冲区来管理同步,若缓冲区被占用,驱动程序可选择重命名缓冲区,返回备用缓冲区指针,避免解码器阻塞。这种机制与Direct3D资源管理模型统一,支持自动缓冲区重命名,减少CPU等待开销,显著降低CPU占用率(最高减少90%),实现更稳定的帧率输出,并更好地

2025-06-08 00:15:00 938

原创 window 显示驱动开发-创建视频解码设备

Microsoft Direct3D 运行时通过调用用户模式显示驱动程序的 CreateDecodeDevice 和 DestroyDecodeDevice 函数来管理视频加速(VA)解码设备的生命周期。CreateDecodeDevice 在应用程序需要硬件加速视频解码时被调用,负责验证解码能力、分配硬件资源并返回解码设备句柄。DestroyDecodeDevice 在解码会话结束时被调用,负责释放所有关联的硬件和内存资源。驱动程序实现时需确保严格的参数验证、完善的错误处理、高效的资源管理以及安全的并发访

2025-06-07 00:15:00 474

原创 window 显示驱动开发-创建压缩缓冲区和解码渲染器目标(一)

Microsoft Direct3D 运行时通过调用用户模式显示驱动程序的 CreateResource 函数,创建用于视频解码的压缩缓冲区和呈现目标。压缩缓冲区的创建通过设置 D3DDDIARG_CREATERESOURCE 结构中的 DecodeCompressedBuffer 标志来标识,并根据 Format 成员的值确定缓冲区类型,如 D3DDDIFMT_PICTUREPARAMSDATA 等。呈现目标的创建则通过 DecodeRenderTarget 标志标识,并作为单个资源的子资源索引引用。驱动

2025-06-07 00:15:00 661

原创 window 显示驱动开发-提供视频解码功能(四)

在Direct3D运行时中,D3DDDICAPS_GETDECODECOMPRESSEDBUFFERINFOCOUNT和D3DDDICAPS_GETDECODECOMPRESSEDBUFFERINFO请求类型用于查询加速视频解码所需的压缩缓冲区信息。查询过程分为两步:首先获取特定解码器所需的压缩缓冲区类型总数,然后获取每种缓冲区的具体配置要求。关键数据结构包括DXVADDI_DECODEINPUT(输入结构)和DXVADDI_DECODEBUFFERINFO(输出结构)。UMD(用户模式驱动程序)负责解析输

2025-06-06 00:15:00 471

原创 window 显示驱动开发-提供视频解码功能(五)

Direct3D运行时通过D3DDDICAPS_GETDECODECONFIGURATIONCOUNT和D3DDDICAPS_GETDECODECONFIGURATIONS请求类型,查询用户模式驱动程序(UMD)支持的DirectXVA解码配置。查询过程分为两个阶段:首先,通过D3DDDICAPS_GETDECODECONFIGURATIONCOUNT确定特定解码场景支持的配置数量;其次,通过D3DDDICAPS_GETDECODECONFIGURATIONS获取所有可用配置的具体参数。核心数据结构包括DX

2025-06-06 00:15:00 440

原创 window 显示驱动开发-提供视频解码功能(二)

Direct3D运行时通过D3DDDICAPS_GETDECODEGUIDCOUNT和D3DDDICAPS_GETDECODEGUIDS请求类型查询用户模式驱动程序(UMD)支持的视频加速解码GUID。首先,运行时调用GetCaps获取支持的GUID数量,然后再次调用以获取具体的GUID列表。UMD返回支持的GUID列表,如MPEG-2、H.264、VC-1等解码模式。查询过程中,D3DDDIARG_GETCAPS结构的pInfo成员始终为NULL,pData指向返回数据的缓冲区,DataSize表示缓冲区

2025-06-05 00:15:00 739

原创 window 显示驱动开发-提供视频解码功能(三)

Direct3D运行时通过D3DDDICAPS_GETDECODERTFORMATCOUNT和D3DDDICAPS_GETDECODERTFORMATS请求类型,查询特定DirectXVA解码器支持的渲染目标(RT)格式。查询分为两步:首先获取支持的格式数量,然后获取具体的格式列表。关键数据结构包括D3DDDIARG_GETCAPS和DXVA2_DDI_GET_RT_FORMAT_COUNT,分别用于传递请求信息和解码器GUID。UMD(用户模式驱动程序)需解析GUID并返回支持的格式数量或列表,同时处理无

2025-06-05 00:15:00 596

原创 window 显示驱动开发-提供视频解码功能(一)

在DirectX视频加速架构中,查询用户模式显示驱动程序(UMD)的视频解码功能是通过调用GetCaps函数实现的。D3D运行时通过填充D3DDDIARG_GETCAPS结构体,并指定不同的请求类型(如D3DDDICAPS_GETDECODEGUIDCOUNT、D3DDDICAPS_GETDECODEGUIDS等)来获取UMD的解码能力信息。这些请求类型分别用于查询解码器GUID数量、具体GUID列表、支持的渲染目标格式、压缩缓冲区信息以及解码配置等。UMD需要分配足够大的缓冲区来存储这些信息,并通过dat

2025-06-04 00:40:38 544

原创 window 显示驱动开发-DirectX VA 2.0 的视频解码加速

本项目探讨了使用DirectX Video Acceleration (DXVA) 2.0实现视频解码加速功能的关键步骤和注意事项。DXVA 2.0通过硬件加速支持多种视频格式(如H.264、VC-1、MPEG-2等),利用GPU进行解码以减轻CPU负担,并提供统一的接口访问不同硬件厂商的解码能力。创建视频解码设备的流程包括查询图形设备支持、创建DXVA 2.0设备接口、配置解码器和验证设备能力。此外,项目还详细介绍了压缩缓冲区和解码渲染器的设计,强调了内存资源管理的重要性,包括压缩缓冲区的环形结构设计、解

2025-06-04 00:40:29 956

原创 window 显示驱动开发-DirectX 视频加速 2.0

DirectX视频加速2.0(VA 2.0)提供了一系列结构和枚举类型,用于用户模式显示驱动程序的开发。这些结构包括视频解码器配置、视频处理和加密保护等核心数据结构,如DXVA2_DecodeBufferDesc、DXVA2_VideoProcessorCaps和DXVA2_EncryptProtocolHeader。关键枚举类型定义了缓冲区类型、视频处理器功能和解码器GUID,如DXVA2_BufferType和DXVA2_VideoProcessorOperations。驱动实现流程涉及解码器初始化和视

2025-06-03 08:51:48 965

原创 window 显示驱动开发-处理多个锁

在使用Direct3D运行时,顶点缓冲区和索引缓冲区支持多个未完成的锁定,用户模式显示驱动程序需遵循与Windows2000显示驱动程序模型相同的处理方式。驱动程序在首次成功锁定资源后,不得对同一资源的锁定函数调用失败。运行时确保每次锁定调用都有对应的解锁调用,并负责跨线程调用的同步。驱动程序需维护资源的锁定状态,并在解锁时验证资源是否已锁定。LockAsync函数对同一资源仅允许一次成功调用,后续调用必须失败。解锁函数在资源未锁定时返回E_INVALIDARG,否则必须成功。驱动实现需确保线程安全,避免资

2025-06-03 08:51:26 1045

原创 window 显示驱动开发-驱动程序处理的Multiple-Processor优化

在驱动程序实现自主多处理器优化时,必须禁用LockAsync、UnlockAsync和Rename函数,并通过调用pfnSetAsyncCallbacksCb函数通知运行时。驱动程序应遵循Direct3D运行时的策略,确保系统资源的公平共享。在特定情况下,如应用程序在窗口模式下运行、计算机仅有一个处理器或应用程序请求禁用优化时,驱动程序应禁用多处理器优化。若厂商希望在禁用场景下启用优化,需联系Microsoft并实现隔离机制。此外,驱动程序需确保多线程安全,使用原子操作或锁保护共享状态,并避免高优先级线程影

2025-06-02 21:20:11 703

原创 window 显示驱动开发-支持多个处理器

在多处理器计算机上,用户模式显示驱动程序(UMD)可以通过两种方式实现多处理器优化:依赖Microsoft Direct3D运行时的自动优化或驱动程序自主优化。运行时自动优化由Direct3D运行时自动分配渲染任务到多个CPU核心,适用于大多数硬件,开发成本低,但无法针对特定GPU架构优化。驱动自主优化则允许驱动程序根据硬件特性进行特定优化,如线程绑核、GPU引擎亲和性和NUMA优化,适用于高性能硬件,但开发成本较高。选择优化路径时,建议大多数驱动依赖运行时优化,而高性能或专用硬件可考虑自主优化。调试工具如

2025-06-02 11:31:17 419

原创 window 显示驱动开发-复制深度模具值

Microsoft Direct3D 运行时通过调用用户模式显示驱动程序的 Blt 函数,实现深度模具值在视频内存和系统内存之间的复制。驱动程序需支持所有不透明深度模具格式的相互转换,但排除特定格式如 D3DDDIFMT_D16_LOCKABLE 等。转换过程中,驱动程序需将源深度值先转换为 32 位无符号整数值,再转换为目标格式。对于模板值,驱动程序需将其扩展到 8 位整数,并在目标精度较低时丢弃高位。驱动程序必须支持任意子实体的深度模具副本,但无需执行镜像、拉伸或颜色键操作。运行时要求源和目标格式至少共

2025-06-01 00:15:00 684

原创 window 显示驱动开发-验证索引值

用户模式显示驱动程序在进行硬件徽标测试时,无论是否执行索引验证,均可通过“专为Microsoft Windows设计”认证。然而,为确保驱动程序在DirectX应用程序中处理可能传递的无效索引时仍能稳定运行,建议执行索引验证。关键验证场景包括:处理步幅值为0的特殊情况,确保仅引用顶点0;在调用SetStreamSourceUM函数时,动态检查用户内存缓冲区的索引越界问题;以及在绘制时确保最大索引不超过NumVertices-1。实现建议包括利用硬件加速验证、延迟验证以提高性能,以及通过ETW事件和调试断言支

2025-06-01 00:15:00 850

原创 window 显示驱动开发-转换 Direct3D 固定函数状态(三)

摘要: 当启用固定功能顶点着色器转换器时,Direct3D运行时不会传递特定的渲染状态(如顶点混合、光照、雾化等),驱动程序可安全忽略这些状态。这些功能已由转换器直接嵌入生成的着色器代码中。驱动需保留状态接口存根以兼容API,但可跳过硬件更新以提高性能。开发调试时可借助工具验证转换后着色器的等效功能,确保兼容性与正确性。此机制适用于硬件支持顶点着色器2.0+或混合处理模式的场景。<|end▁of▁sentence|>

2025-05-31 00:15:00 939

原创 window 显示驱动开发-转换 Direct3D 固定函数状态(四)

在启用固定功能像素着色器转换器时,Direct3D运行时会传递所有纹理阶段状态,但驱动程序应忽略特定状态,如颜色和Alpha混合操作、凹凸环境映射矩阵系数等。这些状态的效果将由转换器直接嵌入生成的像素着色器中。驱动程序应安全忽略这些状态,但仍需保留函数接口,并建议记录被忽略的状态以便调试。性能优化建议包括减少状态更新开销和着色器缓存。WHCK认证要求验证驱动是否正确忽略指定状态,并检查转换器生成的像素着色器功能是否完整。调试工具如PIXonWindows和DirectXDebugRuntime可用于检查转换

2025-05-31 00:15:00 1565

原创 window 显示驱动开发-转换 Direct3D 固定函数状态(一)

Microsoft Direct3D 运行时在用户模式显示驱动程序支持着色器类型2.0或更高版本时,会将Direct3D固定函数状态转换为顶点或像素着色器版本2.0。然而,运行时不会转换着色器版本,如版本1.1将直接传递给驱动程序。固定函数顶点和像素着色器转换器的工作原理取决于使用的DirectX版本:DirectX 9.0的转换器与Windows Vista显示驱动程序模型兼容,默认启用,并支持混合顶点处理;而DirectX 8.0及更早版本的转换器仅与Windows Vista模型兼容,且软件顶点处理不

2025-05-30 00:15:00 1917

原创 window 显示驱动开发-转换 Direct3D 固定函数状态(二)

摘要:当启用固定函数顶点着色器转换器时,Direct3D运行时将跳过对MultiplyTransform、SetTransform等传统函数的调用,因为这些状态已自动嵌入生成的着色器中。驱动程序仍需实现这些函数以满足兼容性要求,但可简化处理。转换器会将固定功能操作转换为着色器代码,减少驱动状态管理开销。开发者需注意WHQL认证要求,并通过调试工具验证转换器行为。此机制在硬件支持顶点着色器2.0+或混合处理模式时自动激活。<|end▁of▁sentence|>

2025-05-30 00:15:00 651

原创 window 显示驱动开发-处理 E_INVALIDARG 返回值

用户模式显示驱动程序(UMD)在正常情况下不应主动返回E_INVALIDARG错误,即使遇到无效参数(如NULL指针或越界值)。唯一的例外是当UMD调用Direct3D运行时提供的函数并收到E_INVALIDARG时,必须将该错误原样传递回运行时。这一规则旨在防止恶意代码利用驱动返回的E_INVALIDARG探测系统漏洞,同时确保应用程序的稳定性和调试友好性。开发者需在驱动内部处理无效参数,避免依赖运行时拦截,并在必要时使用其他错误代码(如E_FAIL)替代E_INVALIDARG。违反此规则将导致WHCK

2025-05-29 00:15:00 445

原创 window 显示驱动开发-处理着色器代码

用户模式显示驱动程序(UMD)在图形处理中扮演关键角色,主要负责接收、转换和管理着色器代码及顶点声明。UMD通过Direct3D运行时的回调函数接收顶点和像素着色器代码,以及顶点声明,并将这些高级代码转换为特定硬件的指令格式。此外,UMD为每个着色器和声明创建唯一的句柄,供运行时在后续的绘制操作中使用。处理过程中,UMD需注意着色器代码以结束标记终止,而顶点声明则无此标记。UMD还需确保错误处理不返回E_INVALIDARG,并优化性能,如通过缓存已转换的着色器指令。这些操作对于确保图形渲染的正确性和效率至

2025-05-29 00:15:00 1001

原创 window 显示驱动开发-Direct3D 呈现性能改进(二)

本文介绍了针对Windows 8.1(WDDM 1.3)的Direct3D呈现性能优化,重点更新和新增了多个用户模式结构和枚举,适用于Direct3D 9及以上版本的驱动程序。新增的结构和枚举包括D3DDDI_FLUSH_FLAGS、D3DDDIARG_COPYFLAGS、D3DDDIARG_COUNTER_INFO、D3DDDIARG_UPDATESUBRESOURCEUP等,旨在优化资源管理、GPU性能计数器和子资源更新等操作。特别地,D3D11_1_DDI_FLUSH_FLAGS仅适用于Direct3

2025-05-28 00:15:00 748

原创 window 显示驱动开发-Direct3D 呈现性能改进(三)

从WDDM1.3开始,用户模式驱动程序在实现Direct3D9和Direct3D11函数时需遵循新的强制和可选要求。强制要求包括必须实现的函数如BufBlt1、CreateResource2、TexBlt1和VolBlt1,这些函数在WDDM1.3之前是可选的。此外,新增的可选函数组如pfnCheckCounter、pfnFlush1等,需全有或全无实现。这些函数的行为变更包括支持本机暂存资源、优化资源映射和内存回收等。驱动实现时需特别注意GetCaps的扩展支持,如时间戳和简化实例化的查询。WDDM1.3

2025-05-28 00:15:00 1552

原创 window 显示驱动开发-用户模式显示驱动程序

用户模式显示驱动程序(UMD)是图形硬件供应商为显示适配器编写的关键组件,负责连接应用层(如Direct3D游戏)和内核模式驱动(KMD)。UMD的主要职责包括实现Direct3D API接口、资源管理、命令提交和性能优化。UMD的架构依赖于Direct3D运行时加载的动态链接库(DLL),并通过DXGI/D3DKMT与KMD交互。开发UMD的关键步骤包括实现必需的DDI函数表、处理资源创建与共享、命令生成与提交。UMD与KMD的交互涉及资源创建、命令提交、查询硬件能力和同步控制。调试与验证工具如PIX o

2025-05-28 00:15:00 694

A*算法解决八数码问题

这是人工智能中非常常见的算法:在一个3x3的网格里,有8个编号的方块和一个空格,目标是通过滑动方块把它们排列成目标状态,通常是数字1到8按顺序排列,空格在右下角。问题是给定任意一个初始状态,是否一定能够通过滑动到达目标状态呢?

2025-03-26

windows USB 驱动,用于PL2303芯片上报GPS信息使用

平台支持: win 10 x64 驱动功能: 打开并上报GPS信息,自己开源的。 项目开源地址:https://github.com/wangma/USBPL2303Win.git

2024-12-22

pl2303-linux.zip

代码截取于/drivers/usb/serial/pl2303.c,它作为linux平台下常用的驱动存在。 用于和驱动开发系列中的文章参考,了解PL2303的运行方式。

2024-12-19

基于win 10的 NDIS 6.0 Filter 驱动,新增加了收发数据包以及查询网卡Mac地址的代码

操作系统: win 10 x64 VS版本: VisualStudio.17.Release/17.11.4+35312.102 Windows Driver Kit 10.0.26100.1 内容概要: 新增以下功能的NDIS Filter driver,作为案例分析使用的; 1. 发送OID请求; 2. 发送自定义数据包,以ICMP数据包为例; 3. 接收数据包; 可以从代码中学习: 1. 内核OID的请求发送和接收; 2. 内核资源的分配和回收; 3. 数据包的发送和接受;

2024-10-27

基于NDIS 6.x的Filter生成代码

操作系统: win 10 x64 VS版本: VisualStudio.17.Release/17.11.4+35312.102 Windows Driver Kit 10.0.26100.1 内容概要: 默认情况下生成的NDIS Filter Sample,作为讲解用的; 可以从里面看到WDF和NDIS的基本运行方式。

2024-10-12

LUA脚本工具在windows平台下编译的版本

系统环境: windows 10 编译环境: VS2019 安装使用: 在windows + VS2019环境下面编译即可; 文档情况: /doc目录下可以找到合适的文档 新手只需要有一定的C语言基础,就看懂并实现简单的脚本编写和运行,和Python不一样,lua一直以简单高效、扩展性强著称。 教程网址: https://www.lua.org/docs.html

2024-10-02

基于windows 的日志串口驱动案例

开发支持: Microsoft Visual Studio Community 2019 版本 16.11.3 + WDK 19041 系统支持: Windows 10 版本 1507 测试情况: 关闭驱动签名强制,使用sscom测试OK; 介绍: 这是基于win 10 x64平台开发的,它创建了一个定时器(1s),并在定时器中上报日志信息,新手可以从中学到如何构建缓冲区、创建定时器、使用互斥锁等基本技能。 阅读建议: 1. 学习和使用前,请详细阅读专栏文章: WDF驱动程序开发专栏 2. 更详细的开发和代码讲解可以参考主页的文章: windows 驱动实例分析系列-定时日志的COM驱动

2024-10-01

基于UMDF 2.15版本的VirtualSerial(虚拟串口)驱动程序代码

开发支持: vistualMicrosoft Visual Studio Community 2019 版本 16.11.3 + WDK 19041 系统支持: Windows 10 版本 1507 ,Windows Server 2016 和更高版本 运行支持: Windows 10 版本 1507 测试情况: 关闭驱动签名强制,使用sscom测试OK; 这个是基于win 10 x64平台开发的,主要演示UMDF 2.x驱动程序的创建,以及演示serial类别的驱动如何与系统进行交互,新手可以从中学到UMDF驱动的开发技术,以及PORT类驱动的基础知识。 阅读建议: 1. 学习和使用前,请详细阅读专栏文章: WDF驱动程序开发专栏 2. 更详细的开发和代码讲解可以参考主页的文章: windows 驱动实例分析系列-COM驱动案例讲解.

2024-09-22

UnderConstructionSolution.zip

介绍: 这是windows C++ team 在开发和讲解推介C++ 、CX系列中用于演示的C++类别,它是一个 Visual Studio 解决方案,其中包含Widget 的完整代码,它主要是讲解和演示C++中的构造过程; 知识点: 可以从里面学习windows C++ team 的代码风格和编程技巧;C++/CX中的构造过程; 阅读建议: 先下载和安装 VS 2015以上版本+windows 10;

2024-08-18

ASimpleClassSolution: windows C++ team code

介绍: 这是windows C++ team 在开发和讲解推介C++ 、CX系列中用于演示的C++类别,它是一个 Visual Studio 解决方案,其中包含 C++/CX 和 WRL 组件的完整代码,以及一个使用两者的简单测试应用程序。 知识点: 可以从里面学习windows C++ team 的代码风格和编程技巧; 阅读建议: 先下载和安装 VS 2015以上版本+windows 10;

2024-08-18

微软提供的关于鼠标驱动的案例

此示例是原始WDM滤波器驱动程序示例的WDF版本。此示例的WDM版本已被弃用。 此驱动程序可以抓取系统上特定鼠标的输入。在其当前状态下,它只挂接到鼠标数据包报告链和鼠标ISR,不处理它看到的数据。ISR的挂钩仅在i8042prt堆栈中可用。

2024-01-01

基于ADNS-2620的光学鼠标方案

ADNS-2620是一个小型因子光学鼠标传感器。它用于实施非机械跟踪鼠标。与前代不同, ADNS-2620允许更紧凑、更实惠的光学鼠标设计。 附件包含: ADNS2620 Arduino测试代码 + adns2620 评估板原理图和PCB源文件 + HID代码 + 相关参考文档以及设计资料。

2023-12-28

鼠标HID实现方案方案

基于auduino的鼠标方案源代码

2023-12-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除