Accelerated Graphic Cards

来自osdev
跳到导航 跳到搜索

在屏幕上出现一些图形很好,但让视频卡完成肮脏的工作会更好。 但是要当心,事情并不总是像看起来那样容易。 替代 VESA BIOS Extension/Accelerator Functions

带文档的图形卡

3Dfx

对于3dfx卡 (带有Voodoo芯片组的卡) 来说,这是一个好消息。 这些卡可能是唯一具有相对快速的3D支持 (Glide/OpenGL) 和 [http:// darwin-3dfx.sourceforge.net/ open规格] 的卡。 巫毒卡仍然可以从eBay等来源获得。

英特尔集成显卡

英特尔视频芯片组也有开放标准 (请参阅 www.intel.com)。一些有用的链接:

推荐在01.org页面上提到的intel-gpu-tools软件包,因为它可用于转储当前寄存器值以进行检查。

ATI / AMD

AMD started in September 2007 为他们最近的视频卡打开规格。 关于R630或M56芯片的可以从 X.org 下载。 自2014年以来,AMD为所有gpu维护最新的开放编程指南,包括支持的特定电子邮件地址。

在X.org,请参阅 Feature Matrix for Free Radeon Drivers,特别是 Documentation 部分。

另请参阅 开放GPU文档 和Linux发行版的实现,AMD开源驱动程序®Github存储库:

适用于Vulkan的AMD开源驱动程序旨在支持以下AMD gpu:

  • Radeon™ HD 7000 Series
  • Radeon™ HD 8000M Series
  • Radeon™ R5/R7/R9 200/300 Series
  • Radeon™ RX 400/500 Series
  • Radeon™ M200/M300/M400 Series
  • Radeon™ RX Vega Series
  • AMD FirePro™ Workstation Wx000/Wx100/Wx300 Series
  • Radeon™ Pro WX x100 Series
  • Radeon™ Pro 400/500 Series

英伟达 NVIDIA

NVidia不提供官方规范,但在 nouveau 项目中花费了大量的社区努力,尽管这种逆向工程规范不完整,也不保证准确,但它可以作为示例和文档的来源。Marcin ko ś cielnicki一直在他的 [http:// 0x04.net/cgit.cgi/envytools/tree/ envytools] 存储库中写下非官方规范 (链接已死,但是envytools在GitHub上https://github.com/envytools/envytools可用)。 尽管到处都缺少位,但它们无疑是了解这些图形卡内部的有趣资源。 这些文档涵盖了从第一张卡到最新卡的整个NVIDIA硬件范围,并且可能足以编写本机驱动程序。

VMware SVGA-II

不完全是实体图形卡,但是svga-ii设备是一个不错的虚拟机设备,可以进行3D加速。 它在VMware和QEMU上都可用。 根据MIT许可,VMware还提供了文档详细且易于移植的参考驱动程序。 尽管已弃用,但该设备在QEMU下可以正常工作,并且使用起来相对简单,因此为图形加速提供了一个很好的起点。 参考驱动程序可在 [http:// vmware-svga.sourceforge.net/index.old.html sourceforge上的旧vmware-svga页面上找到]。

在哪里可以找到有关nVidia/Matrox/ATI/... 3D图形卡的底层信息?

问得好。除非您找到其他信息,否则几乎没有关于当前3D图形卡内部工作的公开信息 (免费或其他方式)。 只有一小部分与游戏程序员相关,但操作系统开发人员无法使用。

现在,如果您有VIA图形芯片,情况可能会更好,因为他们最近发布了用于2D和3D操作的 开源驱动程序

几乎没有关于2D加速功能的教程或数据表,但至少我们有它们的开源代码。 在其他来源中,Xfree驱动器,附加组件/加速器Haiku (被打开BeOS) 加速器FreeBE/AF。 它们可能会提供足够的信息来进行逆向工程,并找出可用于为您的环境编程/移植的模型。 VGADoc ([1],也在 iap-6.828-website/树/主/读数/硬件/vgadoc Github 上)。

欢迎任何希望花时间进行此类研究的人在此处发布其结果。

= 2D加速能为我做什么?=

  • 硬件鼠标光标,绘制和管理 (例如,您提供坐标,其余的卡负责)
  • Bitblt (用于 “位块传输”) 可用于屏幕到屏幕的内存复制,例如windows移动,滚动等。 你提供来来回回的盒子,剩下的工作就交给图形卡。 有些人可能会将其称为 “rasterop”,或者记住Amiga计算机中的硬件 “blitter”。
  • 贴片。 您输入一个小的NxN数据集 (通常是8x8和32x32之间的位图),前景色和混合样式加上一些坐标,卡片用给定的图案 “绘制” 该区域。 这可以方便地渲染Win95-like背景 (平铺的),甚至快速绘制字体。

3d加速程序如何与3d加速硬件对话?

我假设您对OpenGL等有很强的了解,并且不需要在此处进行介绍。 如果你以nVidia的linux 3D驱动程序为例 (如果你有一个正确配置的nVidia卡,你可以通过一个简单的 “strace” 在linux中的3D程序上看到几乎所有这些),事情就是这样组织的:

  • 两个库libGL.so和libGLcore.so将由任何希望进行加速3D操作的程序加载。 启动时,这些库打开 “/dev/nvidiactl” 和 “/dev/nvidia0”。
  • 内核模块由 “obscure” 文件nv-kernel.o组成,该文件仅包含 “匿名” 符号和 “开源” 部分,主要将nv内核 (实际上几乎是系统透明的) 粘合到linux内核。
  • 库和驱动程序之间的实际 “对话” 无法通过常规方式进行跟踪: /dev/nvidia * 仅允许 “ioctl” 操作和mmap。 在3D程序运行时,您可以在 “/proc/XXXXX/maps” 中观察到的值让我相信驱动程序实际上会直接向库公开硬件资源 (例如纹理空间,顶点空间等)。 但是,可以使用mmiotrace选项编译当前的linux内核,然后可以将其用于记录对mapped空间的所有单独访问。
l /proc/pci
Bus  0, device   0, function  0:
    Host bridge: VIA Technologies, Inc. VT82C693A/694x [Apollo PRO133x] (rev 196).
      Prefetchable 32 bit memory at 0xfc000000 [0xfdffffff].

Bus  1, device   0, function  0:
    VGA compatible controller: nVidia Corporation RIVA TNT2 Model 64 (rev 21).
      IRQ 11.
      Master Capable.  Latency=248.  Min Gnt=5.Max Lat=1.
      Non-prefetchable 32 bit memory at 0xf7000000 [0xf7ffffff].
      Prefetchable 32 bit memory at 0xfa000000 [0xfbffffff].
cat /proc/XXXXX/maps
...
40019000-40029000 rw-s f7810000 03:06 54934      /dev/nvidia0
40029000-4002a000 rw-s 0ba98000 03:06 54934      /dev/nvidia0
...
40a9b000-42a9b000 rw-s fa000000 03:06 54934      /dev/nvidia0
42a9b000-42b79000 rw-p 00000000 00:00 0
42b79000-42c7a000 rw-s fc010000 03:06 54934      /dev/nvidia0
42c7a000-42d7c000 rw-p 00000000 00:00 0
42d7c000-42dfc000 rw-s fc111000 03:06 54934      /dev/nvidia0

外部链接