恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Looking Glass IDD 配置指南:模式列表、默认刷新率、渲染偏好与共享内存约束详解
首页
资讯中心
/
Looking Glass IDD 配置指南:模式列表、默认刷新率、渲染偏好与共享内存约束详解
Looking Glass IDD 配置指南:模式列表、默认刷新率、渲染偏好与共享内存约束详解
发布时间:2026/10/12 4:54:01
音视频图形学【免费下载链接】LookingGlassAn extremely low latency KVMFR (KVM FrameRelay) implementation for guests with VGA PCI Passthrough.项目地址https://gitcode.com/gh_mirrors/lo/LookingGlass点击查看免费下载导读本文围绕 Looking Glass 项目中 Windows 虚拟显示驱动 IDDIndirect Display Driver的配置体系展开以官方文档 doc/idd_configuration.rst 为骨架结合 LGIddHelper 配置窗口、CSettings 注册表读写、CDisplayConfiguration 模式过滤与 CLGMPFrameCaps 共享内存容量计算等源码实现系统讲解如何打开配置界面、编辑显示模式、设置默认刷新率、管理渲染偏好以及如何在 IVSHMEM 共享内存不足时正确扩容。读完本文你将能够独立完成 IDD 的显示模式与性能偏好调优并能依据底层机制定位模式被过滤分辨率被拒绝等问题。打开配置窗口从系统托盘进入 IDD 设置IDD 驱动安装后Windows 通知区域会出现Looking Glass (IDD)图标。右键点击该图标并选择Open configuration即可打开配置窗口窗口类名为LookingGlassIddConfig见 CConfigWindow.cpp。托盘图标及其悬停提示同时承担状态指示灯的角色通过图标外观可以直观判断驱动当前使用的是GPU 硬件加速还是软件处理software processing。当 IDD 因缺少合适的渲染适配器而回退到软件模式时图标会显示相应提示默认还会弹出无 GPU警告通知对应 CNotifyWindow.cpp 的通知逻辑。配置窗口在启动时会从注册表加载全部设置CConfigWindow.cpp显示模式列表Modes默认刷新率DefaultRefresh无 GPU 警告开关NoGPUWarning独占监视器开关ExclusiveMonitor强制全帧直接拷贝ForceFullDirectCopy强制间接拷贝ForceIndirectCopy这些设置全部存储在注册表键HKLM\SOFTWARE\LookingGlass\IDD下见 CSettings.h其中模式列表以REG_MULTI_SZ多字符串保存布尔偏好以REG_DWORD保存DefaultRefresh同时兼容REG_DWORD整数值 Hz与REG_SZ文本刷新率如119.970两种类型见 CSettings.cpp。显示模式列表Display modes模式列表控制 Windows 为 Looking Glass 虚拟显示器可用的分辨率与刷新率集合。列表项以宽x高刷新率的格式显示例如1920x108060.000。编辑、新增、删除与恢复默认操作方法源码对应编辑已有模式选中列表中的模式修改下方的 Width / Height / Refresh 输入框点击UpdateCConfigWindow.cpp新增模式选中列表首项add new在下方输入框中填写宽、高、刷新率点击Update同上m_modes-emplace_back()追加新模式删除模式选中模式后点击DeleteCConfigWindow.cpp恢复默认点击Load default用标准模式表重建整个列表CConfigWindow.cpp标记首选勾选选中模式的prefer复选框CConfigWindow.cpp标准模式表定义在 DefaultDisplayModes.h共 38 个分辨率覆盖从 640×480 到 7680×43208K的常见规格默认首选模式为数组下标 19即 1920×1080DefaultPreferredDisplayMode 19。点击Load default时源码会直接调用m_settings.getDefaultModes()取回这套内置标准表CConfigWindow.cpp。参数取值范围输入框与底层解析逻辑共同施加以下约束刷新率最多可包含三位小数如输入119.970而非四舍五入成120合法范围23.900 Hz ~ 1000.000 Hz。刷新率在内部以百分之一微赫兹100µHz整数表示缩放系数为LG_REFRESH_RATE_SCALE 10000见 RefreshRate.h即119.970在内部存储为1199700。宽度640 ~ 16384 像素。高度480 ~ 16384 像素。这些边界由 ParseModeString 中的 sanity check 强制执行宽度小于 640、高度小于 480 或任一方超过 16384 的模式会被直接判定为非法并拒绝解析。窗口代码同样会在Update时调用LGParseRefreshRate校验刷新率文本解析失败则本次修改不生效CConfigWindow.cpp。保存与生效时机模式列表的编辑不会立即生效。完成全部修改后点击Save reload driver将整个模式列表写入注册表Modes值REG_MULTI_SZ将默认刷新率写入注册表DefaultRefresh通过命名管道向 helper 服务发送设置变更通知sendSettingChange触发驱动重新加载CConfigWindow.cpp。驱动重载会移除并重新创建虚拟监视器因此显示器可能短暂闪烁。若想放弃尚未保存的模式与默认刷新率修改点击Revert即可从注册表重新读回已保存的配置CConfigWindow.cpp。默认刷新率Default refreshDefault refresh是一个独立于模式列表的设置有两大用途动态分辨率请求客户端请求 IDD 创建动态分辨率时新模式使用该刷新率重建标准模式表点击Load default时38 个标准分辨率统一使用该刷新率填充。修改默认刷新率不会改写模式列表中已经保存的刷新率。但需要注意的是在重载驱动后已存在的动态分辨率ExtraMode见下文会保留原有分辨率、同时自动采用新的默认刷新率——这个行为由 CDisplayConfiguration::ReloadSettings 实现它检测到ExtraMode的刷新率与当前默认刷新率不一致时会主动更新注册表中的ExtraMode记录。客户端动态分辨率请求默认刷新率与客户端分辨率的联动机制如下客户端配置项win:setGuestRes注册表/配置文件中的布尔开关config.c在客户端窗口尺寸变化时自动发起动态分辨率请求前提是当前传输通道支持LG_TRANSPORT_FEATURE_WINDOW_SIZE特性core.c。默认在来宾端服务器支持该特性时启用。手动触发在客户端按住Escescape键的同时按下键即可按客户端当前窗口尺寸请求一次分辨率变更。该快捷键注册于 keybind.c其实现向客户端内部消息队列投递LG_MSG_WINDOWSIZE消息消息携带当前窗口的宽高若传输不支持该特性客户端会弹出guest doesnt support this feature提示。客户端配置中win:autoResize-a与win:setGuestRes互斥二者同时启用会触发警告config.c。在 IDD 侧来自客户端的KVMFR_MESSAGE_WINDOWSIZE消息会被 CLGMPTransport 解析并路由到OnSetResolution回调。随后 CDisplayConfiguration::SetResolution 会执行如下流程用请求的宽高 当前默认刷新率构造一个临时模式调用caps.CanUseMode检查该模式能否装入共享内存若可以将模式写入注册表ExtraMode值REG_SZ格式为宽x高刷新率*后缀标记首选见 SetExtraMode并重建模式列表。渲染偏好Preferences偏好区包含四个复选框。与模式列表不同偏好复选框在点击的瞬间即被保存REG_DWORD无需等待Save reloadCConfigWindow.cpp。Make LG the only monitor独占监视器默认启用。启用后IDD helper 会在必要时强制让 Looking Glass 显示器成为 Windows 唯一的活动监视器拓扑恢复由 helper 自动完成。如果你刻意要在来宾内同时使用其他显示器应关闭此选项。需要特别注意的是关闭选项只是停止未来对拓扑的强制并不会自动恢复 Windows 此前已禁用的显示器——那些被禁用的显示器需要你手动重新启用。Disable no GPU warning禁用无 GPU 警告用于抑制 IDD 回退到软件处理时弹出的通知。它不会启用 GPU 加速也不会改变当前活动的渲染适配器纯粹是静默警告。软件处理下驱动会检查CSettings::ShouldLogStatistics()之类的开关来控制日志输出CFrameScheduler.cpp。Force full direct frame copies强制全帧直接拷贝用于规避部分 GPU 驱动在向共享传输堆transport heap写入部分损坏的 D3D12 拷贝时的故障。启用后GPU 对每个直接帧都做全帧拷贝而 readback/间接传输路径仍继续使用部分损伤partial damage拷贝。代价是 GPU 与共享内存带宽显著上升因此除非实际遇到画面损坏否则保持禁用。该设置由 CHardwareFrameProcessor 在构造时读取并记录日志。修改该选项会触发驱动重载。Force indirect copy强制间接拷贝关闭对共享传输堆的 D3D12 直接访问改为每一帧都经过一个 CPU 映射的 readback 资源完成拷贝。仅用于规避GPU 驱动破坏直接传输写入的兼容性问题它额外引入一次 CPU 拷贝吞吐量显著下降。该设置优先于直接拷贝偏好——在 CD3D12Device::Init 中m_indirectCopy的判定为!directMemory || s_directHeapFailed || forceIndirectCopy只要强制间接拷贝为真无论直接堆是否可用都走间接路径。修改该选项同样会请求驱动重载。软件处理Software processing当 Windows 中没有合适的渲染适配器可用时IDD 可以退化为软件处理模式。软件模式能够提供显示输出但存在三项明确限制速度更慢无法提供可预测的高刷新率节奏cadence仅支持 SDR不支持 HDR 信号链路。判断当前处于哪种模式、以及驱动选中了哪块渲染适配器最可靠的方法是查看 IDD 日志。日志中会明确记录所选适配器与软件处理是否激活此外如前文所述托盘图标外观也会反映 GPU 加速与软件处理的状态。无法装入共享内存的模式Modes that do not fit in shared memory这是配置中最容易踩坑、也最能体现 IDD 底层设计的一节。启动时的模式过滤IDD 驱动在启动时以及重载设置时会对模式列表做两层过滤CDisplayConfiguration::LoadModes合法性过滤宽高或刷新率为 0 的非法条目直接丢弃容量过滤调用caps.CanUseMode()检查该模式能否装入配置的 IVSHMEM 共享内存区域装不下的模式被丢弃并记录Filtering unsupported ... mode日志。如果所有模式都被过滤掉newModes为空驱动会记录No configured display modes are supported并拒绝启动虚拟监视器。此外若原本的首选模式被过滤代码会把第一个保留下来的模式提升为首选保证列表中始终存在合法偏好CDisplayConfiguration.cpp。动态分辨率被拒绝当客户端发起的动态分辨率请求过大、超出共享内存容量时CanUseMode 返回失败SetResolution判定为TOO_LARGE并拒绝该请求CDisplayConfiguration.cpp。helper 会通过托盘通知报告所需的最小 IVSHMEM 大小通知文案为The requested resolution宽x高requires at leastNMiB of configured frame capacity.对应实现见 CNotifyWindow::handleResolutionRejected。容量计算的底层原理每帧所需的共享内存由 CalculateFrameSize 计算行距pitch 分辨率宽度 × 每像素字节数FRAME_BYTES_PER_PIXEL并向上对齐到D3D12_TEXTURE_DATA_PITCH_ALIGNMENT帧大小 pitch × 高度再计入 D3D12 资源放置对齐D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT与帧缓冲池数量m_bufferCount得到总需求requiredSize若requiredSize 容量RecommendedSizeMiB 会将其换算为大于所需的最小 2 的幂 MiB 数向上取整到 1、2、4、8、16 MiB……作为提示值。这正解释了文档所述helper 报告的是最小 2 的幂 IVSHMEM 大小。扩容操作与注意事项当出现模式被过滤或分辨率请求被拒绝时正确做法是在 VM 配置libvirt / QEMU 参数中增大 IVSHMEM 区域大小重启虚拟机IDD 在启动时读取新的容量CIVSHMEM::Open通过IOCTL_IVSHMEM_REQUEST_SIZE获取实际大小并记录IVSHMEM opened, size: N MiB见 CIVSHMEM.cpp。扩容后通常无需再次执行 helper 重载因为驱动是在启动时读取容量。但注意CIVSHMEM::GetUsableSize()会从总容量中扣除 KVMFR 恢复区域KVMFR_R_REGION_SIZE帧数据实际可用的空间小于 IVSHMEM 总大小见 CIVSHMEM.h规划容量时需留出这部分余量。最后强调一点容易误解的事实分配超出实际需求的共享内存并不能提升性能——它只是多预留了宿主 RAM。共享内存只决定最多能承载多大的帧与帧率、延迟等性能指标无关。关键配置项速查配置项注册表值HKLM\SOFTWARE\LookingGlass\IDD类型默认值生效方式显示模式列表ModesREG_MULTI_SZ内置 38 个标准模式Save reload driver动态分辨率模式ExtraModeREG_SZWxHRR*为首选无客户端请求时即时生效默认刷新率DefaultRefreshREG_DWORD/REG_SZ60 HzSave reload driver独占监视器ExclusiveMonitorREG_DWORD1启用点击即保存禁用无 GPU 警告NoGPUWarningREG_DWORD0显示警告点击即保存强制全帧直接拷贝ForceFullDirectCopyREG_DWORD0禁用点击即保存并重载驱动强制间接拷贝ForceIndirectCopyREG_DWORD0禁用点击即保存并重载驱动参考实现与进一步阅读配置窗口交互CConfigWindow.cpp、CConfigWindow.h注册表设置读写CSettings.cpp、CSettings.h标准模式表与默认首选模式DefaultDisplayModes.h模式过滤与动态分辨率CDisplayConfiguration.cpp共享内存容量计算CLGMPFrameCaps.cppIVSHMEM 内存映射CIVSHMEM.cpp客户端动态分辨率win:setGuestRes与 Esc快捷键core.c、keybind.c、config.c刷新率解析与格式化RefreshRate.h、RefreshRate.cpp赞分享音视频图形学【免费下载链接】LookingGlassAn extremely low latency KVMFR (KVM FrameRelay) implementation for guests with VGA PCI Passthrough.项目地址https://gitcode.com/gh_mirrors/lo/LookingGlass点击查看免费下载相关推荐Looking Glass 共享内存IVSHMEM配置指南从标准共享内存到 KVMFR 内核模块Looking Glass 共享内存IVSHMEM配置指南从标准共享内存到 KVMFR 内核模块 Looking Glass 是一款面向 VGA PCI音视频图形学Looking Glass 完整安装指南VM 共享内存、Windows IDD 与 Linux 客户端部署Looking Glass 完整安装指南VM 共享内存、Windows IDD 与 Linux 客户端部署 本文是 Looking Glass 项目的官方安装音视频图形学Looking Glass IDD 安装、升级与配置完全指南Windows 客户机虚拟显示器实战Looking Glass IDD 安装、升级与配置完全指南Windows 客户机虚拟显示器实战 本文以 Looking Glass 官方文档 install音视频图形学上一篇Claude Code 中的 Opus 4.5 迁移指南从 Sonnet 4.x / Opus 4.1 平滑升级模型字符串与提示词下一篇StarRocks hll_empty 函数详解为 HLL 列生成空值以补齐导入/插入默认值创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考