作者holymars ()
看板GameDesign
标题Re: [请益] Shader 是抽象层?
时间Thu Mar 5 12:53:42 2015
※ 引述《lovesnake (LoyalDog)》之铭言:
: 标题: [请益] Shader 是抽象层?
: 时间: Wed Mar 4 23:35:35 2015
:
: 看了一堆文章头昏脑胀决定直接问了!
:
: 看Nvidia的CUDA架构……
: 每颗SP都是一样的东西,哪来分什麽shader
: 但之前的Unified Shader又强调硬体上将
: Shader整合
: 然後看着Graphics Pipeline……
:
: 那些究竟是抽象的东西,还是硬体上真的这样做呢?
看年代
基本上GPU硬体的发展过程,就是一个特化结构朝向通用结构发展的过程
最早最早的显示卡(当时叫3D加速卡)
就是把整套rasterize-based graphics pipeline
用硬体整个实作出来
今天我们把这种完全固定功能,只能由API作一些参数改动的称为fixed-pipeline
但是fixed-pipeline的功能太受限,无法应付日新月异的演算法
就把fixed-pipeline中特别需要灵活性的两个stage->Vertex Pixel拆出来
在里面加入类似於CPU的设计,有一组相对简单的指令集,可以作有限编程
进入programmable pipeline的年代,开始有vertex shader和pixel shader
而这些指令集需要一种程式语言来描述,这就是所谓的shader language
早期的vertex shader和pixel shader是两种不同的硬体
发展到後期发现同样的运算单元在两个地方都出现是很不经济的
开始有硬体商思考要让vertex shader和pixel shader共用硬体
最早是ATI用在游戏主机上,这就是stream processer的开始
从这个年代硬体就朝向General-purpose GPU (GPGPU)的方向发展
所以也有了CUDA之类的东西出现
简单的说 fixed -> programmable -> general purpose这是一个历史进程
但是回到硬体层设计说,有些东西是没办法programmable的
越灵活的运算单位,所需要的电晶体就越高
一颗CPU核心和一颗SP核心,die size可能差个几十倍
因为CPU里面有很深的pipeline(不是graphics pipeline的那个pipiline)
有branch-prediction,有很大块的register和cache
相对的来说就是编程灵活度和异核协调性是完全不同的
总而言之GPU设计就是一个在灵活和效率中间找寻新的平衡点的过程
: 呃…
: 换个问法…… 像是resterizer,他是硬体直接做还是透过GPU General 的 IS拼出来的呢
: ?
目前的resterizer都是硬体实作
类似的情况还有texel unit / blending unit
这些都是作成fixed比作成programmable有更小的die size
灵活度某种程度上是必要牺牲
当然随着年代推进,programmable blending也越来越重要
所以下一代的硬体也都有这功能了
: 我的抽象层是指这个……
:
: 其他像是VS FS GS TS 等等,是有专门的硬体实作他们个别的功能。 还是也是都相同的
: 硬体,透过不同的IS去拼出来的呢?
programmable pipeline的年代,VS / PS是不同硬体
GPGPU的年代 VS / PS=FS / GS=TS是同一个硬体
:
: 谢谢
:
: 话说计组人脑也很好理解啊XDD
: ※ 编辑: lovesnake (140.121.221.204), 03/05/2015 00:38:12
: 推 cowbaying: 这个问题首先要看driver写到哪边 03/05 08:39
: → cowbaying: 记得是04还是05年开始 显卡硬体改为stream processor 03/05 08:41
: → cowbaying: 这个部份要细看一下CHIP的diagram 03/05 08:46
: 推 cowbaying: 记得没错 除了绘图卡有硬体着色器外 一般的卡都是由 03/05 08:47
: 推 cowbaying: 驱动程是转译成SP能辨识的资料 03/05 08:48
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.250.32.97
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1425531225.A.23D.html
1F:推 chchwy: 推 说得很清楚 03/05 12:59
2F:推 lovesnake: 超清楚的T_T 谢谢!! 另外请问 TS = GS 是指? 03/05 13:11
3F:→ holymars: Tessellation shader和geometry shader是同一个东西 03/05 13:19
4F:→ holymars: pixel shader和fragment shader指的也是同一个东西 03/05 13:20
5F:推 cjcat2266: TS和GS是不同东西吧 03/05 13:31
6F:→ holymars: 要讲古的话最早的GS概念 = TCS+TCS+GS 包山包海都作.. 03/05 13:33
7F:→ holymars: 那时有人叫这东西GS也有人叫TS,後来再细分stage是另外 03/05 13:33
8F:→ holymars: 的事了 03/05 13:33
9F:→ holymars: 会有这麽多名词差异指来指去,都是openGL和D3D害的=3= 03/05 13:35
10F:推 lovesnake: 原来如此,受教! 03/05 13:36
11F:→ holymars: FS<->PS TCS<->HS TES<->DS...为什麽大家都爱自创名词 03/05 13:37
12F:推 a27417332: 3GS虽然可以小幅细分曲面,但速度比不上Tessellation吧 03/05 13:57
13F:→ a27417332: 为啥前面冒出一个3 QQ 03/05 14:09
14F:→ dreamnook: 自创名词显得很潮呀 把事情弄的越复杂越好骗人XD 03/05 14:15
15F:推 doomleika: 推 03/07 15:36
16F:推 tigernaxo: 推,看到这篇之前被搞的头昏脑胀 04/10 08:50