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

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

光栅化阶段(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。

    

     我们的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(合并输出)阶段。

转载于:https://www.cnblogs.com/mikewolf2002/archive/2012/03/25/2416342.html

你可能感兴趣的文章
论Linux系统学习的奇淫异巧
查看>>
从零开始开发微信小程序(二):开发一个简单的小程序
查看>>
如何在国内愉快的安装 Kubernetes v1.6.2
查看>>
Mysql GTID 模式详解
查看>>
es6函数总结
查看>>
Nodejs--readline(逐行读取)
查看>>
QT创建与QT无关的纯C++程序和动态/静态库
查看>>
为网建公司注入专业前端力量
查看>>
Vbox下虚拟机linux系统安装tomcat
查看>>
Mysql 多表合并统计
查看>>
maven引入jar包问题导致项目无法启动,感叹号
查看>>
那些年,阿里巴巴技术男神们写的书!
查看>>
我一个理科生造的AI,怎么就去做历史高考题了呢?
查看>>
Fragment之软件主页面制作
查看>>
properties文件读写自己写的方法
查看>>
Flutter 构建完整应用手册-列表
查看>>
chrome 实用调试技巧
查看>>
http升级https
查看>>
并查集(Union-Find)算法介绍
查看>>
MySQL主从配置
查看>>