Directx11教程(14) D3D11管线(3)

简介: 现在我们开始学习一些CP(command processor)的知识。参考资料: http://fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part-3/       CP(command processor)应该是GPU最前端的block,它从位于video memory中的command buffer中取出UMD产生的command packet,比如状态设置,drawIndex等,然后把它们翻译成GPU后端block的具体操作,并把这些操作送到具体的block。

      现在我们开始学习一些CP(command processor)的知识。参考资料:

http://fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part-3/

      CP(command processor)应该是GPU最前端的block,它从位于video memory中的command buffer中取出UMD产生的command packet,比如状态设置,drawIndex等,然后把它们翻译成GPU后端block的具体操作,并把这些操作送到具体的block。

       因为video memory时延长的特点,所以理想状况下,CP中应该有一个大的FIFO来缓存command packet,用来解析和调度command的部分,应该是一个状态机,简单的CP流程图如下:

image

          

       从前面一章教程中我们知道,command packet主要存在ring buffer或者其指向的Indirect buffer中,所以CP中的prefetcher模块会把command packet从内存中取出并放在FIFO中,之后decode模块负责解析command packet,然后调度模块把命令传送到具体的3D block或者CS block执行,3D block或者CS block执行完command后,需要发送执行完毕信号给CP的Sync/Wait模块,最终把这些信息传送到driver。

      下面我参考网上的资料,并按照自己的理解,简单画了一个command processor的示意图:

image

 

相关文章
|
异构计算
Directx11教程(14) D3D11管线(2)
下面我们来了解一些GPU memory的知识,主要参考资料:http://fgiesen.wordpress.com/0211/07/02/a-trip-through-the-graphics-pipeline-2011-part-2      【注:请参考另一篇日志:2012-11-13:http://www.
1126 0
|
图形学
Directx11教程40 纹理映射(10)
本章尝试使用纹理行列式,或者说纹理数组,在ps中,使用2个纹理,最终的像素颜色,是光照颜色*纹理1采样颜色*纹理2采样颜色,主要是想达到如下的效果:    把这两个图像以及光照产生的颜色融合生成以下图像:   为此我们新建一个lighttex2.
1055 0
|
存储 索引
Directx11教程39 纹理映射(9)
在myTutorialD3D11_32中,我们在PlaneModelClass中增加一个纹理TextureClass* m_Texture;读入一个grass的纹理,程序执行后的效果如下: 完整的代码请参考: 工程文件myTutorialD3D11_32 代码下载: http://files.
918 0
|
索引
Directx11教程36 纹理映射(6)
本章主要是整理代码,做以下两件事情: 1、把世界坐标矩阵的计算,放在GraphicsClass的渲染函数中,之前放在D3DClass中,而且只是返回一个单位矩阵,没任何作用。如果要使其起作用,就要对每个model类都单独设置,很麻烦,比如我要画两个颜色立方体,岂不是要建立两个model类,而只是世界坐标矩阵不同。
827 0
|
C++ 索引 调度
Directx11教程(15) D3D11管线(4)
本章我们首先了解一下D3D11中的逻辑管线,认识一下管线中每个stage的含义。 参考资料:http://fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part-3/ D3D11逻辑管线如下图所示: 首先,我们来学习一下每个stage的名字含义,在后面章节学习它们的细节功能: IA:input assembler,输入装配阶段,主要是从内存中读顶点和索引数据。
1131 0
|
测试技术
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 代码。
980 0
|
算法 C++
Directx11教程(17) D3D11管线(6)
VS shader输出clip空间的顶点位置及参数信息(比如颜色)到一个FIFO中,之后PA(primitive assembly)会从该FIFO中取得顶点位置信息,并根据IA传来的primitive信息,把单独的顶点装配成点、线或者三角形。
1072 0
Directx教程(22) 简单的光照模型(1)
在前面的教程中,我们在顶点属性中直接给顶点赋颜色,这样生成的三维物体缺乏真实感,如下图中两个立方体,左边的是通过光照生成物体表面颜色的,右边的则是直接给顶点赋颜色值。      首先,我们学习一下最简单的phong光照模型:       在phong光照模型中,物体表面的颜色由自发射光(emissive)、环境光(ambient)、漫反射光(diffuse)以及镜面高光(specular)四部分组成,每一部分又是通过物体表面的材质属性和光照属性一起来决定。
885 0
Directx教程(23) 简单的光照模型(2)
在工程myTutorialD3D11_16中,我在文件light.vs中定义了一个材质光源属性常量缓冲。 //const buffer最好为4 float的倍数,否则创建const buffer会fail cbuffer LightMaterialBuffer ...
793 0
|
存储
Directx教程(29) 简单的光照模型(8)
现在我们新建一个工程myTutorialD3D_23,在这个工程中,对前面一章的代码进行一些整理: 1、我们在顶点属性中增加材质的的漫反射系数和高光系数,前面我们放在一个光照材质结构中,这样我们能够比较灵活的定义不同顶点的材质属性,当然这也增加了顶点缓冲的大小。
783 0