图形驱动程序" hello world"例?

时间:2015-01-07 03:44:53

标签: c opengl assembly graphics

创建在显示器上渲染像素的GPU驱动程序需要执行哪些步骤?基本上只是最简单的'#hello world"创建GPU驱动程序的示例,例如将屏幕变为红色或仅显示单个像素。你从哪里开始?

我想直接破解GPU,没有任何C或OpenGL抽象或其他任何东西。我使用的是Mac OSX,我认为我有Intel HD i7显卡,所以these docs似乎很合适:

Mesa3D项目表示有许多开源图形驱动程序,维基百科说英特尔会生成这些文档,以便您可以根据需要编写开源驱动程序,但不能解释如何。

我也遇到了Michael Abrash's Graphics Programming Black Book,这解释了很多。

然而,这有点太多了。并且似乎没有关于如何开始攻击GPU驱动程序," hello world"项目

例如:

  • 要学习装配,你可以brew install nasm,编写一些装配,编译并运行它来打印" hello world"。
  • 要学习Arduino,您可以通过USB线将Arduino板插入计算机,安装软件,并将一些C代码直接上传到电路板并运行,以显示闪烁的LED灯。

你如何为显卡做同样的事情?

你好世界的例子并不一定要工作(虽然如果它真的那么会很酷!);即使仅仅概述一下更高层次/实际意义上的内容也会有所帮助。如果在Mac上,甚至在Linux上都无法实现,那就不错了。但即使这样,问题仍然存在,你从哪里开始编写图形驱动程序?

1 个答案:

答案 0 :(得分:12)

  • 第1步:了解您要定位的特定GPU(架构,注册和流详细信息)。我很害怕 GPU这些细节可能是专有的,你可能无法得到它。 (但正如你所提到的,在你的情况下规格可用)
  • 第2步:在驱动程序中添加一些能够从驱动程序查询寄存器/详细信息的调用。
  • 第3步:在驱动程序中添加一些调用以修改寄存器。 (改变模式等)
  • 第4步:您可以检查如何使用恒定颜色在GPU上绘制三角形/四边形。尝试实现屏幕清晰(功能 类似于 glClear )通过绘制一个大的四边形或2个三角形或1 尺寸三角形的三角形或发送一些清晰 命令。 (GPU支持哪种方法)如果你是 绘制三角形或四边形,使用NDC(标准化设备坐标) 系统,并喜欢在Raw窗口系统或NWS(Null 窗口系统)。窗口系统负责显示 合成或一些后期处理后的输出帧缓冲。通过 Raw或NWS,我的意思是直接将帧缓冲显示在屏幕上。
  • 第5步(大部分内容都是可选的):实现一些复杂的绘图。这可能涉及支持其他绘图模式,如像素, 线,三角形条,三角形扇等,纹理支撑, 照明,转换,与其他窗口系统的互动。 对于此步骤,您需要学习装配。但请注意,这是 不是x86或arm(CPU)组件,而是GPU组件 专门处理SIMD
  • 第6步:实施模板功能。在你的程序中准备一个hello world的模板。用颜色清除屏幕1.应用 模板并再次用颜色2清除屏幕。现在你有问候 世界用颜色2写成,颜色1作为背景。

要做到这一点的动机是:你想要做到这一点。这将很酷。

这样做的动机是:GPU规范可能不可用,GPU组装的学习曲线,图形的复杂性。

我的建议:如果您可以使用GPU规范(以及汇编),我会建议实现任何可用API集的实现子集(打开vg并打开GLES 1.1)。要详细了解这些API集,请访问khronos网站。