1. vertex,pixel以及geometry shaders共享一个programming model,即common-shader core,在GPU架构中的unified shader可以和这个core很好的契合。

common-shader core是API,支持unified shader是GPU的特性。

2. shaders是用类C的语言如HLSL,Cg,GLSL等编写的,程序被编译为不依赖于机器的assembly language,即intermediate language(IL)中间语言。编译完的shader存储成文本字符串通过driver传给GPU

assembly language(汇编语言)在另外的步骤中(通常在driver中)被转换为真正的机器语言,这就允许不同的硬件的兼容性。这个assembly language可以看作是定义了一个虚拟机,这个虚拟机是一个有着各种寄存器类型和数据源,用一系列指令变成的处理器。

2.1 大部分graphics操作都是在短矢量上完成的,所以处理器有4-way SIMD(single-instruction multiple-data)能力 每个寄存器包含了四个独立值。

32-bit单精度浮点标量和矢量以及32-bit整型数是基本数据类型,其中浮点矢量可以包含像位置(xyzw)、法线、矩阵行、颜色(rgba)或者纹理坐标(uvwq). 聚合数据类型也支持,如结构体、数组和矩阵。还支持swizzling,即任何矢量部分的复制,也就是说,矢量的任何部分都可以被任意重新排序或者复制。同样,masking(仅适用部分矢量元素)也支持

2.2 一个drall call会激活graphics API去画一组primitives,graphics pipeline由此开始执行。

2.3 每个可编程shader stage都有两个输入,uniform inputvarying input

uniform input在一个draw call中一直保持值不变,但是可能会在不同的draw call之间改变值。 texture是一种特殊的uniform input,以前可以看作是用到一个surface的颜色图片,现在可以看作是一个大的数据矩阵

varying input在shader处理的每个vertex或者pixel中都不同。

2.4 虽然shader的输入有很多种,但是shader的输出被严格限制了,这是shader和其他在通用处理器上执行的程序不同的地方

2.5 底层的虚拟机给不同种类的输入和输出提供了特殊寄存器。

uniform input是存储在constant registers/buffers,因为他们的内容是不变的

可用的常量寄存器数量比varying input寄存器数量得多,因为varying inputs和outputs都需要分别存放在每个vertex/pixel,而uniform inputs只需要保持一次并重用在所有的vertices/pixels。

2.6 虚拟机也有通用temporary registers,用于scratch space(暂存空间)。 all types of registers can be array-indexed using integer values in temporary registers.

2.7 GPU上执行最快的操作是标量和向量乘加以及它们的混合操作,如乘加、内积,其他的操作,如倒数,平方根,sine,cosine,幂运算以及对数运算,一般更耗时间,但是还算快的。

纹理操作也是有效率的,但是它的performance可能会被一些因素限制,如耗费在等待某个结果的时间 shading language开放了大部分的普通运算,如加法和乘法,剩下的运算是用intrinsic函数,如atan(),dot(),log()等,还有负责运算如矢量归一化,矩阵转置等。

2.8 flow control

flow control(流程控制)是指用分支指令来改变代码执行流程,如if case等。 shader支持两种类型的flow control: static flow control, dynamic flow control

static flow control是基于uniform input的值,而dynamic flow control是基于varying input的值

Shaders(读书笔记4 --- Real-Time rendering)的更多相关文章

  1. Understanding Scroll Views 深入理解 scroll view 读书笔记

    Understanding Scroll Views 深入理解 scroll view  读书笔记   It may be hard to believe, but a UIScrollView is ...

  2. 6 Specialzed layers 特殊层 第一部分 读书笔记

    6 Specialzed layers 特殊层  第一部分  读书笔记   Specialization is a feature of every complex organization. 专注是 ...

  3. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  4. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  5. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  6. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  7. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  8. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

  9. LOMA280保险原理读书笔记

    LOMA是国际金融保险管理学院(Life Office Management Association)的英文简称.国际金融保险管理学院是一个保险和金融服务机构的国际组织,它的创建目的是为了促进信息交流 ...

随机推荐

  1. [转]MySQL Connector/C++(一)

    http://www.cnblogs.com/dvwei/archive/2013/04/18/3029464.html#undefined#undefined MySQL Connector/C++ ...

  2. zepto.js使用前注意

    API:http://www.css88.com/doc/zeptojs_api/ 一.建议:不要从官网下载,而是从 Github 下载了源代码之后自己 Build 一个版本,这样你可以自行挑选适合的 ...

  3. 【Jersey】基于Jersey构建Restful Web应用

    环境说明 java: 1.6: tomcat: 6.0.48: Jersey:1.18: Jersey介绍 主要用于构建基于Restful的Web程序: 构建基于Maven的Javaweb程序 说明: ...

  4. delphi locate多字段查询

    简单格式: IF MSQ_NewBillQuantity.Locate('FStockID;FMarchID', VarArrayOf([FStockID, FMarchID]), []) = Fal ...

  5. DNS错误 事件4000 4013

    DNS 错误事件4000 4013,无法创建活动目录本身的区域 WINDOWS 2003 DNS服务器无法解析 错误ID 4000 DNS 服务器无法打开 Active Directory.这台 DN ...

  6. mysql 笔记

    mysql配置主从复制的时候,不能将server-id设置成非数字,这样会导致mysqld启动失败. mysql重启的时候,自动会释放锁(这个锁应该是位于内存的) 执行sql脚本:source /ho ...

  7. recyleView使用笔记

    直接上代码: package com.test.recycleview; import android.app.Activity; import android.graphics.Canvas; im ...

  8. [SQL]复制数据库某一个表到另一个数据库中

    SQL:复制数据库某一个表到另一个数据库中 SELECT * INTO 表1 FROM 表2 --复制表2如果只复制结构而不复制内容或只复制某一列只要加WHERE条件就好了 例子:SELECT * I ...

  9. KNN算法——python实现

    二.Python实现 对于机器学习而已,Python需要额外安装三件宝,分别是Numpy,scipy和Matplotlib.前两者用于数值计算,后者用于画图.安装很简单,直接到各自的官网下载回来安装即 ...

  10. 【HOW】在InfoPath中如何为浏览和编辑模式设置不同的视图

    1. 在SharePoint Designer中打开要自定义视图的列表.并点击菜单:列表设置 > 在 InfoPath 中设计表单 > {要自定义表单的内容类型},则会自动打开InfoPa ...