分类 GPU 中的文章

渲染管线之旅|09 像素处理之联合

这篇文章介绍了像素处理的后半部分,即“连接阶段”。 上一阶段的工作是将少量输入流转换成着色器单元的许多独立任务。 现在,我们需要将大量独立的计算折叠到一个(正确排序的)内存操作流中。 就像我在光栅化和Z早期的文章中已经做过的那样,我将首先简要介绍需要在一般级别上完成的工作,然后再介绍如……

阅读全文

渲染管线之旅|08 像素处理之"fork"

在这一部分中,我们来谈谈像素处理的前半部分:dispatch和实际的像素着色。事实上,这部分是大多数图形开发者在谈到PS stage时所关心的内容。有关alpha blend和Late-Z的内容放到下一篇文章中去探讨。后面我们会看到,硬件上PS stage的设计相是对比较复杂的。这也是……

阅读全文

渲染管线之旅|07 深度处理、模板处理

在这一篇中,我们来讨论Z-pipline的前端部分(简称它为early-Z), 以及它是在光栅化中怎么起作用的。和上一篇一样,本篇也不会按实际的管道顺序进行讨论;我将首先描述基础算法,然后再补充管线中的各个阶段(以相反的顺序可以更简单的解释这些内容)。 1.插值 Z通过三角形进行插值,……

阅读全文

渲染管线之旅|06 三角形的生成和建立

欢迎回来。这次我们去看看三角形的光栅化。但在光栅化三角形之前,我们需要执行三角形设置,并且在设置三角形之前,我还要解释一下我们做的准备是为了什么,最后我们来聊聊三角形硬件光栅化算法。 1.如何画一个三角形 首先,给很熟悉这部分并自己写过软纹理映射的人一点小提示:三角形光栅器一次要处理……

阅读全文

渲染管线之旅|05 图元处理、Clip/Cull, 投影和视图变换

上一篇中我们讨论了关于“纹理和采样”,这一篇我们回到3D管线的前端。在执行完顶点着色之后,就可以实际的渲染东西了,对吗?暂时还不行, 因为在我们实际开始光栅化图元之前,仍然还有很多事要做。所以在本篇里我们不会看到任何光栅化内容——还得等到下次再讲。 1. 图元装载 当我们离开顶点处理流水线……

阅读全文

渲染管线之旅|04 纹理和采样

上一篇讨论了顶点着色器,涵盖了GPU通用着色器处理单元的一些内容。它们都仅仅是向量处理单元, 但是当我们在访问Resource的时候,通常都不是这种向量的形式,所以GPU中还需要另一个专门用来在Pipeline中处理整数的单元:Texture Sampler. 这个单元内部相对比较复杂,复杂(也很有……

阅读全文

渲染管线之旅|03 图形管线概览及GPU中顶点处理

通过前面几篇的内容,我们知道,应用程序中的Draw API调用会经过D3D Runtime, 用户态驱动等等各个层级,最终将命令传到GPU的命令解释器,GPU就会根据命令的内容来进行图形的计算和处理。那么这一篇我们就来看看顶点的处理流程。 1. 开胃菜 在介绍GPU的顶点处理之前,我们先看看3D渲染管线。3……

阅读全文

渲染管线之旅|02 GPU存储架构和命令处理器

上一篇中主要介绍了3D渲染命令到达GPU之前经历过的各个阶段。用下图可以概括上一篇中所讲的内容,当然其中很多细节没有出现在图中。之前我们说KMD将命令送给了硬件,这个简单的“送”的过程实际上并不是那么简单的。我们知道显卡都是通过信号线连在主板上的,所以我们送命令都是需要走这些信号……

阅读全文

渲染管线之旅|01 软件调用栈

简介 通常我们可以很容易的找到我们的个人电脑中显卡驱动软件调用栈的相关内容(attache到进程上,查看进程调用的dll。),但是这些调用关系是如何工作?它们又是为什么要这样做呢?这些问题就不那么容易找到答案了。我会尽量填补空白,而不会对特定的硬件进行具体的描述。我将主要讨论在Wi……

阅读全文

WDDM时序调用流程图

首先从WDDM驱动的框架图中来看看Driver是需要做什么事情的。下图中的带有灰色背景的就是GPU厂商提供的Driver需要实现的内容。 以一个简单的例子来看他们具体是怎么工作的: 1. Rendering Device 的创建 1、APPlication申请创建渲染设备时,display minport driver会接收到Dxgk……

阅读全文