是否可以直接访问视频卡? (没有API)

时间:2012-08-07 15:28:33

标签: windows api rendering low-level

我现在有点使用OpenGL的经验,我开始使用它,因为据说这是调用视频卡功能的唯一方法。 (除了DirectX - 我比OpenGL更喜欢)

对于编程(例如在C / C ++中),OS提供了许多API,例如用于打印的功能。但是这些也可以通过汇编语言编码绕过 - 并调用更低级别的API(获得速度)或直接CPU调用。

所以我开始想知道为什么在视频卡上无法实现这一点。为什么需要像OpenGL或DirectX这样的API?正在进行的过程是:

API-call >
 OS calls video card (with complex opcodes, I think) >
  video card responses (in complex binary format) >
   OS decodes this format and responses to user (in expected API format)

我认为这会降低渲染过程的速度。

所以我的问题是:
是否有可能绕过任何图形API(在Windows下)并直接调用视频卡?

谢谢,
丹尼斯

1 个答案:

答案 0 :(得分:2)

使用汇编或绕过api不会自动使某些内容更快,通常更慢,因为您不知道编写库的人知道什么。

绝对可能是的,那些库只是处理器指令,可以查看和查看寄存器和ram,你可以轻松地查看和查看寄存器和ram。第一个问题是你可以获得这些信息,当然,你可以查看linux驱动程序或其他开源资源。其次,今天的大部分繁重工作都是通过逻辑或图形处理器在图形芯片中完成的,因此如果存在瓶颈,主机只是介于两者之间而不一定是瓶颈。是的,您可以根据您的视频卡/芯片等对gpus进行编程。

您需要确定瓶颈的确切位置,是否真的存在,可能是总线是您的问题,可能是操作系统是您的问题,还是编译器,或硬盘或系统内存,处理器和建筑本身,缓存等。同时,除非你尝试,否则你将如何学习如何找到这些东西。

我建议完全摆脱窗户,没有操作系统,去裸机。获取linux和其他开源资源以及从供应商那里获得的任何东西,并更接近金属。您还需要有关pci / pcie总线和桥接器,dma控制器以及路径中所有内容的大量信息。如果您不想那么低,那么使用linux或bsd或其他一些命令行环境,众所周知如何接管视频系统,并在保留操作系统和开发环境的同时接管视频系统(vi / emacs,gcc)。

如果这太过于先进,那么我建议,尝试简单的gpu例程,以了解视频卡如何在某种程度上起作用,并一次一步地处理这个学习练习。