• 热门专题

Directx11教程(18) D3D11管线(7)

作者:迈克老狼2012  发布日期:2012-04-10 11:28:39
Tag标签:Directx11  D3D11管线  
  • 光栅化阶段(RS)之后,将进入PS/OM阶段。

    大致的管线流程应该是这样的:

          RS光栅化的fragment达到64或者32(一个wave或者warp)后,PS调度模块会产生一个新的wave或者warp,并把它们传给PS shader阶段,PS shader得到调度信息后,会从video memory中取得PS code,执行shader 代码。注意和vs过程类似,ps过程中,也是每个stream core处理一个fragment。

     

    image

         我们的ps shader非常简单,只是单纯的输出颜色值,但要注意的一点是,在ps shader时候,gpu会自动做一件事情,就是属性差值,比如我们的三角形,我们只输入了三个顶点的颜色,但经过光栅化后,我们有很多fragment,系统会自动根据顶点颜色给各个fragment差值出颜色[经常的做法是双线性插值]。

        PS shader中还可以执行纹理贴图,还有一些depth cull(这时,early z将会失效)或者颜色blend的功能,后面教程我们学到这些时候,可以再回来讨论D3D11管线。

         我们的ps shader代码如下:


    //////////////////////////////////////////////////////////////////////////////// 
    // Filename: color.ps 
    ////////////////////////////////////////////////////////////////////////////////
    
    
    ////////////// 
    // TYPEDEFS // 
    ////////////// 
    struct PixelInputType 
    { 
        float4 position : SV_POSITION; 
        float4 color : COLOR; 
    };
    
    
    //////////////////////////////////////////////////////////////////////////////// 
    // Pixel Shader 
    //////////////////////////////////////////////////////////////////////////////// 
    float4 ColorPixelShader(PixelInputType input) : SV_TARGET 
    { 
        return input.color; 
    }
    
    

        PS的输出会放在一个FIFO的buffer中,该buffer中内容会和depth block进行通信,之后经过深度测试和模版测试的fragment最终被传输到color block,再执行颜色alpha混合或者其它一些功能后,最终被传到video memory中Framebuffer,然后在屏幕上显示出来。这个过程就是D3D11管线中的MO(合并输出)阶段。

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