博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Directx11教程(15) D3D11管线(4)
阅读量:5966 次
发布时间:2019-06-19

本文共 1603 字,大约阅读时间需要 5 分钟。

本章我们首先了解一下D3D11中的逻辑管线,认识一下管线中每个stage的含义。

参考资料:

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中到底做了些什么。

转载地址:http://yemax.baihongyu.com/

你可能感兴趣的文章
如何寻找高质量流量日入三百+
查看>>
f_bfree和f_bavail的区别
查看>>
Tegra3 vSMP架构Android运行时CPU热插拔及高低功耗CPU切换
查看>>
风雨飘摇中的HP会分拆Arcsight业务吗?
查看>>
技术者的好奇心和惯性
查看>>
Web前端开发必备:《Jquery实战》第3版 介绍
查看>>
为AD用户启用或禁用OCS 2007 R2帐户
查看>>
JNDI数据源的连接属性
查看>>
.NET重构—单元测试重构
查看>>
linux route命令深入浅出与实战案例精讲
查看>>
Azure Remoteapp 使用指南
查看>>
【翻译】Ext JS最新技巧——2014-8-13
查看>>
Powershell批量修改用户的UPN后缀
查看>>
Exchange Server 2016管理系列课件53.DAG管理之设置滞后数据库副本
查看>>
cocos2d-x学习笔记16:记录存储1:CCUserDefault
查看>>
创业做什么好?先学习精英式创业从平庸到卓越
查看>>
降低网站跳出率的六个方法(亲身使用)
查看>>
Lync Server 2010的部署系列(四) outlook无法加入联机会议
查看>>
CentOS5.8下varnish-2.1.5的安装配置
查看>>
社群分享:涨粉的35个玩法和技巧
查看>>