• 热门专题

Directx11教程(15) D3D11管线(4)

作者:迈克老狼2012  发布日期:2012-03-24 09:27:36
Tag标签:Directx11  D3D11管线  
  • 本章我们首先了解一下D3D11中的逻辑管线,认识一下管线中每个stage的含义。

    D3D11逻辑管线如下图所示:

     
     

    首先,我们来学习一下每个stage的名字含义,在后面章节学习它们的细节功能:

    IA:input assembler,输入装配阶段,主要是读顶点和索引数据。

    VS: vertex shader, 顶点着色阶段,在shader中逐个处理顶点,输出处理后的顶点。

    HS: hull shader,这是D3D11中增加的阶段,主要是tessllation使用,输入patch体元(其实就是带控制点的体元),产生控制点,被domain shader阶段使用,也可以在HS阶段,增加一些额外的顶点数据。

    TS: Tessellation stage,细分三角形或者线段,产生顶点和连通性。

    DS: Domain shader, 从HS得到控制点,从TS得到顶点,产生最终的细分顶点。

    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把packet中state数据通过数据总线送到shader或其它相关block,这些状态数据一般都是设置相应block的相应寄存器值。

          drawcall命令为被送到IA  block(顶点装配block),IA会从video memory中取相应的顶点索引缓冲,并把它们放到index查询缓冲中。当index查询缓冲中顶点达到一个调度单位比如AMD的一个wave(64),NV的一个warp(32),VS调度会启动一个VS wave或者VS warp,并把它传入shader中启动执行。

         现在的shader几乎都用的是统一架构shader block,即VS,PS,GS…等的执行都在一个block中。

    Shader启动执行后,会从video memroy中取得顶点实例数据和shader code,然后一条指令一条指令开始执行我们的VS code,执行后的结果通常会放到一个FIFO中。

     


     

    本章我们了解IA阶段GPU做的工作,下章我们将详细了解VS shader中到底做了些什么。

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规