Shaders(读书笔记4 --- Real-Time rendering)
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 input和varying 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)的更多相关文章
- Understanding Scroll Views 深入理解 scroll view 读书笔记
Understanding Scroll Views 深入理解 scroll view 读书笔记 It may be hard to believe, but a UIScrollView is ...
- 6 Specialzed layers 特殊层 第一部分 读书笔记
6 Specialzed layers 特殊层 第一部分 读书笔记 Specialization is a feature of every complex organization. 专注是 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
- LOMA280保险原理读书笔记
LOMA是国际金融保险管理学院(Life Office Management Association)的英文简称.国际金融保险管理学院是一个保险和金融服务机构的国际组织,它的创建目的是为了促进信息交流 ...
随机推荐
- zendstuido10 配置spket插件
必备:Zend Studio.Spket Plugin.sdk.jsb3.百度 安装过程中出现了两种错误,导致最后安装spket时报错,一种是提示“The file "F:\study\to ...
- ibm v3700
raid5总容量计算(n-1)*最小盘容量RAID0:N块盘组成,逻辑容量为N块盘容量之和:RAID1:两块盘组成,逻辑容量为一块盘容量:RAID3:N+1块盘组成,逻辑容量为N块盘容量之和:RAID ...
- 安装sql2008的时候选择的是Windows身份验证,现在我想用sql server身份验证,我应该到哪儿设置呢
本文档整理自网络,存粹用作笔记. 安装过程中,SQL Server 数据库引擎可以设置为 Windows 身份验证模式或 SQL Server 和 Windows 身份验证模式. 本文介绍如何在安装后 ...
- PLC数据访问
PLC是很多机床设备上都有的控制中心,和PLC通信是很多做工厂管理系统的必经之路. 一年前有个项目需要和PLC(西门子S200)通信,不仅读取里面的数据,还需要写数据需要控制机床的运行,当时不大了解, ...
- mybatis 使用记录(二) 动态拼接查询条件
2016-12-16 阅读项目代码时,在项目的xml文件中发现如下写法: SELECT student_user_id FROM tbr_student_class WHERE 1=1 <if ...
- 一样的alert代码,样式不同
function windowLoaded(e) { alert('dede3');} window.onload=windowloaded; 的结果如下 而window.addEventlisten ...
- XFire最佳实践
前言:XFire是新一代WebService框架,同时也支持与Spring集成,帮助我们方便快速地在Spring框架中开发WebService应用. 本节主要介绍XFire+Spring集成的2种常用 ...
- 在Win8中用批处理创建Oracle数据库时报“Unable to open file”
这一问题的原因是在运行批处理时使用了“以管理员权限运行”.如果直接双击运行是没有问题的. 如果我就想用管理员权限运行呢? 出这个错误的原因是,以管理员权限运行时的当前目录不是批处理所在的目录了.所以, ...
- mvc中Url.RouteUrl或者Html.RouteLink实现灵活超链接,使href的值随路由名称或配置的改变而改变[bubuko.com]
mvc,超链接除了直接写在a标签的href内还可以使用路由规则来生成,这样在改变了路由规则或者路由名称时不用再去代码中更改href的值,而且还容易遗漏.借助Url.RouteUrl或者Html.Rou ...
- Building good docker images
The docker registry is bursting at the seams. At the time of this writing, a search for "node&q ...