【问题标题】:Calling NvAPI_GPU_SetEDID on Nvidia card在 Nvidia 卡上调用 NvAPI_GPU_SetEDID
【发布时间】:2016-06-06 13:57:54
【问题描述】:

你如何在 Nvidia GPU 上调用这个方法:

NVAPI_INTERFACE NvAPI_GPU_SetEDID (
    NvPhysicalGpuHandle hPhysicalGpu,
    NvU32   displayOutputId,
    NV_EDID *   pEDID 
)

源:http://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/group__gpu.html#ga6a41b31dd9743120213435d985f8fbcf

我需要执行上述命令来删除我们新 Quadro 显卡上所有 DisplayOutputs 上设置的所有 EDID。根据 API 文档,我尝试搜索 NvPhysicalGpuHandle 并遇到了这个项目/库:

https://github.com/openhardwaremonitor/openhardwaremonitor/blob/master/Hardware/Nvidia/NVAPI.cs

这个没有我需要的方法NvAPI_GPU_SetEDID

我不是硬件程序员,我只需要能够调用这个命令。有任何想法吗?这可以通过pinvoke 或其他方式使用nvapi.dll/nvapi64.dll 来实现吗?

【问题讨论】:

    标签: c# nvidia nvapi


    【解决方案1】:

    这个我个人没有测试,但是你可以试试这个库,看看能不能设置EDID信息没有问题,如果不行,请开issue。

    https://github.com/falahati/NvAPIWrapper


    你应该这样做,

    1. 首先,您需要找到正确的DisplayDeviceGPUOutput 来写入EDID 信息。有多种方法可以做到这一点。
      • 使用NvAPIWrapper.GPU.PhysicalGPU.GetPhysicalGPUs()静态方法获取系统中所有PhysicalGPU的列表,然后根据您的逻辑选择您想要的PhysicalGPU。找到正确的PhysicalGPU 后,使用NvAPIWrapper.GPU.PhysicalGPU.GetDisplayDevices() 方法获取所有连接到该GPU 的DisplayDevices 的列表,并将正确的存储在一个变量中。
      • 您也可以搜索GPUOutputs,而不是搜索已连接的DisplayDevices。和之前一样,您首先需要找到正确的PhysicalGPU,然后您可以使用NvAPIWrapper.GPU.PhysicalGPU.ActiveOutputs 属性获取所有GPUOutputs 的列表,并将正确的GPUOutput 存储在一个变量中。
      • 另一种找到正确DisplayDevice 的方法是查看所有Displays 的列表。为此,您需要使用NvAPIWrapper.Display.Display.GetDisplays() 静态方法。这将返回一个 Displays 数组。然后使用NvAPIWrapper.Display.Display.DisplayDevice属性,可以得到一个Display对应的DisplayDevice
    2. 找到正确的DisplayDeviceGPUOutput后,应使用NvAPIWrapper.GPU.PhysicalGPU.WriteEDIDData()方法。此方法允许您将存储在字节数组中的 EDID 数据写入您之前选择的DisplayDeviceGPUOutput

    注意:确保捕获NVIDIAApiException 并检查NVIDIAApiException.Status 属性以防出现问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多