【问题标题】:GPU with software rendering带软件渲染的 GPU
【发布时间】:2011-01-06 00:32:14
【问题描述】:

据我所知,渲染图像并决定要在显示器上显示的像素值是 GPU 的工作。如果我有一个连接到 GPU 的显示器并且我想尝试使用软件渲染器,

GPU 和软件渲染器之间的工作是如何划分的?我问这个是因为我的显示器仍然连接到 GPU,所以 GPU 必须传输软件渲染器计算的像素值。但这就是 GPU 的全部功能吗?是否有一种特定的方式告诉 GPU“只将这些值传递给监视器”。

我是新手,但我想了解详情。

【问题讨论】:

    标签: rendering gpu


    【解决方案1】:

    我相信你有一些概念混淆了。 GPU(图形处理单元)就像 CPU。如果您正在构建软件渲染器,您仍将与显卡接口以设置分辨率和绘制/位 blit 像素到屏幕。

    这是硬件和软件渲染之间的高级差异。由于存在顶点/像素着色器等,我已经过度简化了。GPU 还可以为程序执行数学运算,只需查看 OpenCL。

    软件

    我想画一个三角形。鉴于它的三个点,我需要找出边缘的斜率以及要在屏幕上填充的 x,y 坐标。这将涉及循环遍历三角形的每个像素并将其绘制到屏幕上。

    硬件

    我想画一个三角形。向 GPU 发送 3 个坐标并告诉它进行绘制。 GPU 计算出要填充的像素等。

    请理解这过于简化了流程。

    【讨论】:

      【解决方案2】:

      GPU 或多或少是一种硬件设备,与 CPU 相比,它可以很好地执行某些类型的矢量数学运算。 GPU 的功能远比 CPU 受限,但它可以快速完成。

      除非您使用 DirectX 或 OpenGL,否则您很可能正在执行软件渲染。如果您使用的是 DirectX 或 OpenGL,那么您可能正在使用硬件渲染(尽管两者都有纯软件实现)。

      硬件和软件渲染最终都输出到称为framebuffer的可寻址内存(它保存要渲染到屏幕的输出位图),唯一的区别是设置该内存的硬件(例如CPU或GPU)。

      framebuffer 中寻址的物理内存通常是 GPU 的一部分(我不确定它是否真的必须在 GPU 上,欢迎输入)。

      【讨论】:

        【解决方案3】:

        在旧的 Windows 和 DirectX 版本中,您可以调用 DirectDraw 表面的 Lock() 方法来获取指向帧缓冲区的临时直接指针,您可以像访问 RAM 中的任何其他位图一样几乎访问它。同样可以通过 VESA 驱动程序/其他 API 在 DOS 中完成,也可以通过 Pocket PC/Windows mobile 上的 GX 驱动程序完成。不确定其他操作系统。

        帧缓冲区是内存中的一个区域,由显示硬件直接流式传输到输出设备。通常它在显卡上,但可以映射到您的应用程序的地址空间并像普通 RAM 一样直接访问。但是,很明显,读/写速度是不同的。读取速度通常非常低,写入速度非常好,但前提是您只存储连续的、对齐的 32/64/128 位字。通常最好在 RAM 的屏幕外缓冲区中渲染所有内容,然后将其内容 memcpy 到帧缓冲区中。一些显卡支持从 RAM 表面到帧缓冲区的独立于硬件 CPU 的 blitting,但它可能有问题和/或速度很慢。

        【讨论】:

          【解决方案4】:

          这取决于您在哪个级别执行此“软件渲染”。除非您正在编写自己的窗口系统,否则操作系统仍将使用 GPU 来帮助它对所有窗口进行 blit。

          如果你想编写一个软件渲染器,实现它的最简单方法是渲染到内存中的位图,然后调用操作系统说“哦,嘿,你能把这个图像绘制到屏幕给我?”。

          【讨论】:

          • “使用 GPU 来帮助它对所有窗口进行 blit”是什么意思?我明白位 blitting 是什么,但我不明白上述内容。
          • 窗口管理器需要处理许多应用程序,它们都在绘制自己的东西,并将其合成为一个图像,然后发送到监视器。让 CPU 将每个窗口逐个像素地绘制到输出缓冲区中会比较慢,但 GPU(凭借其并行硬件)可以非常快速地合成图像。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-24
          • 2018-01-10
          • 1970-01-01
          相关资源
          最近更新 更多