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

光栅化阶段(RS)之后,将进入PS/OM阶段。

参考外文资料:http://fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part-7/

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

      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代码如下:

struct PixelInputType
{
    float4 position : SV_POSITION;
    float4 color : COLOR;
};


float4 ColorPixelShader(PixelInputType input) : SV_TARGET
{
    return input.color;
}

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

posted on   迈克老狼2012  阅读(2839)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程

导航

< 2012年3月 >
26 27 28 29 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
1 2 3 4 5 6 7
点击右上角即可分享
微信分享提示