Directx11教程(15) D3D11管线(4)
本章我们首先了解一下D3D11中的逻辑管线,认识一下管线中每个stage的含义。
参考资料:http://fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part-3/
D3D11逻辑管线如下图所示:

首先,我们来学习一下每个stage的名字含义,在后面章节学习它们的细节功能:
IA:input assembler,输入装配阶段,主要是从内存中读顶点和索引数据。
VS: vertex shader, 顶点着色阶段,在shader中逐个处理顶点,输出处理后的顶点。
HS: hull shader,这是D3D11中增加的阶段,主要是tessllation使用,输入patch(其实就是带控制点的体元),产生控制点,被domain shader阶段使用,也可以在HS阶段,增加一些额外的控制点数据。HS阶段还会产生TS阶段使用细分因子(FACTOR)。
TS: Tessellation stage,细分三角形,quad或者线段,产生顶点和连通性。
DS: Domain shader, 从HS得到控制点,从TS得,顶点uv坐标,产生最终的细分顶点。
GS: geometry shader,输入体元,输出不同的体元。
SO: streamout stage, 把GS之后的顶点数据输出到video memory中。
RS: Rasterize stage, 光栅化阶段,光栅化体元。
PS: pixel shader, 对光栅化后的体元,进行逐像素操作,通常执行纹理光照颜色混合等。
OM: output merge stage,执行一些blending操作,并把像素颜色输出到framebuffer中,最终在屏幕上显示出来。
当然除了上述阶段之外,也可以把整个D3D11管线理解为一个computer shader阶段,来做一些通用计算,后面有机会在详细了解。
在D3D11的逻辑管线中,有些shader阶段是可选的,比如GS,Tessellation等。
我们通常使用的shader阶段组合是:
VS-PS
VS-GS-PS
VS-HS-TS-DS-PS
VS-HS-TS-DS-GS-PS
VS-SO
VS-GS-SO
VS-HS-TS-DS-GO-SO
下面,我们接着上一篇教程,结合逻辑管线和物理管线来了解IA阶段GPU做些什么事情。
上一章中,我们的顶点已经经过了driver层,到达了video memory中,我们的状态设置和draw call命令也通过driver到达了CP的FIFO中,正准备被CP调度到不同的硬件block中去。
现在我们看看IA阶段做些什么工作(我们只是画一个三角形,所以只有VS-PS):
CP把command packet中state数据通过数据总线送到shader或其它相关block,这些状态数据一般都是设置相应block的相关寄存器值。
drawcall命令为被送到IA block(顶点装配block),IA会从video memory中取相应的顶点索引缓冲(可能会经过一个vertex cache)。当index顶点数据达到一个调度单位比如AMD的一个wave(64),NV的一个warp(32),VS调度会启动一个VS wave或者VS warp,并把它传入shader中启动执行。
IA阶段也会把draw中的primitive(体元)信息传到PA,以便把经过VS后的顶点装配成为相应primitive。
现在的shader几乎都用的是统一架构shader block,即VS,PS,GS…等的执行都在一个block中。Shader启动执行后,会从video memroy中取得顶点/实例数据和shader code,然后一条指令一条指令开始执行我们的VS code,执行后的结果会被传送给PA。
下面是一个简单的vs执行的流程图:

本章我们了解IA阶段GPU做的工作,下章我们将详细了解VS shader中到底做了些什么。
Directx11教程(15) D3D11管线(4)的更多相关文章
- Directx11教程(53) D3D11管线(8) GS的调度执行
原文:Directx11教程(53) D3D11管线(8) GS的调度执行 在前面的教程中,我们分析了VS-PS的shader管线组合执行过程,本章我们分析一下VS-GS-PS的管线执行 ...
- Directx11教程(18) D3D11管线(7)
原文:Directx11教程(18) D3D11管线(7) 光栅化阶段(RS)之后,将进入PS/OM阶段. 参考外文资料:http://fgiesen.wordpress.com/2011/07/01 ...
- Directx11教程(17) D3D11管线(6)
原文:Directx11教程(17) D3D11管线(6) VS shader输出clip空间的顶点位置及参数信息(比如颜色)到一个FIFO中,之后PA(primitive assembl ...
- Directx11教程(16) D3D11管线(5)
原文:Directx11教程(16) D3D11管线(5) 本章我们学习VS中具体做些什么事情? 首先再看看我们的VS shader代码: Clolor.vs - PixelInputType Col ...
- Directx11教程(14) D3D11管线(3)
原文:Directx11教程(14) D3D11管线(3) 现在我们开始学习一些CP(command processor)的知识.参考资料: http://fgiesen.wordpres ...
- Directx11教程(13) D3D11管线(1)
原文:Directx11教程(13) D3D11管线(1) 从本篇教程开始,我们暂停代码的学习,先来了解一下D3D11的管线,这些管线不涉及具体的硬件,而是着重于理解能够支持D3D11的管 ...
- Directx11教程(14) D3D11管线(2)
下面我们来了解一些GPU memory的知识,主要参考资料:http://fgiesen.wordpress.com/0211/07/02/a-trip-through-the-graphics-pi ...
- Directx11教程(66) D3D11屏幕文本输出(1)
原文:Directx11教程(66) D3D11屏幕文本输出(1) 在D3D10中,通过ID3DX10Font接口对象,我们可以方便的在屏幕上输出文字信息,一个DrawText函数就能解决所 ...
- Directx11教程(59) tessellation学习(1)
原文:Directx11教程(59) tessellation学习(1) 在D3D11管线中,新增加了3个stage, Hull shader, Tessellator, Domain s ...
随机推荐
- vue.js_01_vue.js的入门
1.什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于 ...
- Node.js学习(Node.js基础)
1.开发环境搭建 v8引擎是作为解析JavaScript程序来运行的 nodejs是一个高性能的,第一个体现在他的JavaScript解析速度很快,v8引擎性能很高,第二个事件驱动和非阻塞 2.全局对 ...
- js笔试-接收get请求参数
请编写一个JavaScript函数,它的用途是接收url中get请求的参数,并返回为对象, 如: var url = “https://i.cnblogs.com/EditPosts.aspx?opt ...
- ongl与Struts标签
一.ONGL OGNL 的全称是“Object-Graph Navigation Language”,即对象图导航语言,它是一种功能强大的开源表达式语言.使用这种表达式语言可以通过某种表达式语法存取 ...
- Python爬虫笔记【一】模拟用户访问之Tesseract-ocr验证码训练(5)
验证码处理之后就需要对处理的验证码进行识别训练,这里用Tesseract-ocr工具进行识别,用jTessBoxeditor进行训练生成模板. 一,对图片进行处理 利用上一篇代码对图片进行降噪处理,得 ...
- KOA 学习(三)
请求(Request) Koa Request 对象是对 node 的 request 进一步抽象和封装,提供了日常 HTTP 服务器开发中一些有用的功能. req.header 请求头对象 requ ...
- 跟我一起做一个vue的小项目(十)
接下来我们对城市列表页面进行优化,除了对数据优化,也会进行节流处理 //src\pages\city\components\Alphabet.vue <template> <ul c ...
- [Array] 561. Array Partition I
Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1 ...
- laravel-admin列表排序在使用了$grid->model()->latest()后$grid其它加上sortable()可排序的列在排序时不起作用
laravel-admin这个基于laravel的后台框架,简单易用,$grid的默认排序是主键升序的排列方式,但在使用了`$grid->model()->latest();`自定义默认排 ...
- mit课程ocw-mathematics
https://ocw.mit.edu/courses/find-by-topic/#cat=mathematics Course # Course Title Level 1.010 Uncerta ...