3

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

对于编程(例如在 C/C++ 中),操作系统提供了许多 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 下)并直接调用视频卡?

谢谢,
丹尼斯

4

1 回答 1

2

使用程序集或绕过 api 不会自动使某些事情变得更快,通常更慢,因为您不知道编写库的人知道什么。

绝对有可能是的,这些库只是处理器指令,可以戳和窥视寄存器和 ram,你可以很容易地戳和窥视寄存器和 ram。第一个问题是你能得到这些信息吗,当然,你可以看看 linux 驱动程序或其他开源资源。其次,今天的大部分繁重工作都是由逻辑或图形处理器在图形芯片中完成的,因此主机只是一个中间人,如果有瓶颈,不一定是瓶颈。是的,您可以根据您的视频卡/芯片等对 gpus 进行编程。

你需要确定瓶颈到底在哪里,如果真的有,也许总线是你的问题,也许操作系统是你的问题,或者编译器,或者硬盘或系统内存,处理器和架构本身,缓存等。同时,除非您尝试,否则您将如何学习如何找到这些东西。

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

如果这太高级了,那么我建议,涉足简单的 gpu 例程,以至少在某种程度上了解视频卡的工作原理,并一步一步地解决这个学习练习。

于 2012-08-08T01:51:23.683 回答