Shader 入门笔记(二) CPU和GPU之间的通信

渲染流水线的起点是CPU,即应用阶段。

  1)把数据加载到显存中

  2)设置渲染状态,通俗说这些状态定义了场景中的网格是怎样被渲染的。

  3)调用DrawCall,一个命令,CPU通知GPU。(这个命令仅仅会指向一个需要被渲染的图元列表,并不会包含材质信息,因为在上一阶段已经完成)

CPU流水线  GPU从CPU那里得到渲染命令后,就会进行一系列流水线操作,最终把图元渲染到屏幕上。

   几何阶段:

        顶点着色器/曲面细分着色器/几何着色器

        裁剪(Clipping):将不在视野范围内的顶点裁减掉,这阶段可配置的,但是不可编程。

        屏幕映射:负责把每个图元的坐标转换到屏幕坐标系中。 该阶段不可配置,编程。

     光栅化阶段:

        三角形设置:计算光栅化一个三角形网格锁需要的信息。 不可编程,不可配置。

        三角形遍历:会检查每个像素是否被一个三角形锁覆盖。如果被覆盖,就会生成一个片元(fragment)。而这样一个找到哪些被三角形网格覆盖的过程就是三角形遍历。不可编程,不可配置。

        片元着色器:可编程着色器。在DirectX中,片元着色器被称为像素着色器。

        逐片元操作:最后一步。在DieectX中,称为输出合并阶段。

CG语言    

    根据平台不同,编译成相应的中间语言。 CG语言的跨平台型很大原因取决于跟微软合作。   

DrawCall 优化 ,可以理解为,1000个1k的文件复制和一个1000k的文件复制。显然是一个文件复制的快。

如果DrawCall数量太多,CPU就会把大量时间浪费在提交DrawCall上,造成CPU过载。

        

    

时间: 2024-08-05 20:01:08

Shader 入门笔记(二) CPU和GPU之间的通信的相关文章

CUDA5.5入门1. host和gpu之间的通信

<cuda programming >  Shane Cook   第5章 第一节 cpu和gpu有各自独立的内存空间,两者不可以直接访问. 每个线程的执行代码是一样的,数据不同. Thread---->Warp------>Block------>Grid 入门代码是并行加法:  1.cpu端的数组 2.开辟gpu的buffer : cudaMalloc((void**)&dev_a,arraySize*sizeof(int)); 3.把host数据传入buffer

OpenCL入门:(二:用GPU计算两个数组和)

本文编写一个计算两个数组和的程序,用CPU和GPU分别运算,计算运算时间,并且校验最后的运算结果.文中代码偏多,原理建议阅读下面文章,文中介绍了OpenCL相关名词概念. http://opencl.codeplex.com/wikipage?title=OpenCL%20Tutorials%20-%201  (英文版) http://www.cnblogs.com/leiben/archive/2012/06/05/2536508.html (博友翻译的中文版) 一.创建工程 按照OpenCL

nodeJs入门笔记(二)

js中window通常是全局变量 global 是node.js里的全局变量 node中能访问的对象一般都是 global的 属性 global 对象属性 process 用于描述当前Node 进程状态的对象,提供了一个与操作系统的简单接口. process.argv :命令行参数数组,第一个元素是 node,第二个元素是脚本文件名,从第三个元素开始每个元素是一个运行参数 console.log(process.argv); $ node argv.js 1991 name=byvoid --v

kettle入门笔记(二) 之 kettle报的坑爹错误:Error occured while trying to connect to the database

1 引言 在用kettle开发时常会出现 Error occured while trying to connect to the database 错误,但是仔细观察日志,引起这个错误的原因不尽相同.这个错误看起来很简单,但是有时候越简单的错误越没有耐心改,尤其是忙的时候,不小心填错了某个参数导致这个错误但是自己感觉没问题却跑不成功,这是最烦人的.这时候需要淡定.不妨上网查查,错误也许就可以愉快的解决了.下面给出这错误的更细节错误的不同发生情况. 2 示例 有个很简单的ktr脚本(当前kett

SpringBoot入门笔记(二)、使用fastjson

1.添加fastjson配置 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.15</version> </dependency> 2.重写configureMessageConverters @Override public void configureMessageConve

大型网站系统架构的演进(二)分布式模块之间的通信

上一篇文章中讲到了分布式部署之后,各个模块要通过网络进行通信,那么如何通信,用什么协议呢? 可选的方案有http tcp/ip(socket)等 http短连接通信方案 基于http协议,xml报文传输 客户端具体框架为httpclient,服务端为struts2 客户端和服务端的通信在内网 该方案我们实行过一段时间,发现存在性能问题,首先是短连接,在并发量较大的时候,开启大量的tcp连接,这样连接资源容易耗尽,客户端首先成为瓶颈,tps上不去. 我总结的几点原因: 1.每次通信都重新开启新的t

Unity Shader入门精要读书笔记(一)序章

本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数学基础. 第五章:利用简单的顶点/片元着色器来实现辅助技巧. 第六章:基本光照模型. 第七章:法线纹理.遮罩纹理等基础纹理. 第八章:透明度测试和透明度混合. 第九章:复杂光照实现. 第十章:高级纹理(立方体纹理等). 第十一章:纹理动画.顶点动画. 第十二章:屏幕特效. 第十三章:深度纹理. 第十四章:非真

《逻辑思维简易入门》(第2版) 阅读笔记二

<逻辑思维简易入门>(第2版) 阅读笔记二 本周阅读的是<逻辑思维简易入门>的第三章,也就是说,本书的第一部分就已经读完了. 第三章.信念的优点 信念和负信念是人们在接受一个事物时一种心理态度,延伸来说也就是对事物的认知态度.因为我们在研究 逻辑思维的时候,都有一个前提:“以正常情况以及说话者真诚”,所以有人如果对于一件事物不做回应,我们可以认为这是一种既不相信,也不怀疑的的态度. 信念的优缺点有很多,在书中主要介绍了下面几种: 1.准确性 好的信念实在准确的表达事实,同样真的信念

《Unity Shader入门精要》读书笔记(1)

主要是对第二章的整理 渲染流水线:由一个三维场景出发,生成(渲染)一张二维图像. 渲染流程:应用阶段.几何阶段.光栅化阶段. 应用阶段: 1. 把数据加载到显存中 渲染所需数据从硬盘,到内存,再到显存 2. 设置渲染状态 渲染状态:使用哪个顶点着色器.片元着色器.光源属性.材质等 3. 调用Draw Call 发起方CPU,接收方GPU GPU流水线 以下为几何阶段主要步骤 顶点着色器: CPU输入的每一个顶点都会调用一次顶点着色器 不创建或销毁任何顶点,且顶点之间相互独立 坐标转换:把顶点坐标