看板 GameDesign 關於我們 聯絡資訊
※ 引述《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://www.ptt.cc/bbs/GameDesign/M.1425531225.A.23D.html
chchwy: 推 說得很清楚 03/05 12:59
lovesnake: 超清楚的T_T 謝謝!! 另外請問 TS = GS 是指? 03/05 13:11
holymars: Tessellation shader和geometry shader是同一個東西 03/05 13:19
holymars: pixel shader和fragment shader指的也是同一個東西 03/05 13:20
cjcat2266: TS和GS是不同東西吧 03/05 13:31
holymars: 要講古的話最早的GS概念 = TCS+TCS+GS 包山包海都作.. 03/05 13:33
holymars: 那時有人叫這東西GS也有人叫TS,後來再細分stage是另外 03/05 13:33
holymars: 的事了 03/05 13:33
holymars: 會有這麼多名詞差異指來指去,都是openGL和D3D害的=3= 03/05 13:35
lovesnake: 原來如此,受教! 03/05 13:36
holymars: FS<->PS TCS<->HS TES<->DS...為什麼大家都愛自創名詞 03/05 13:37
a27417332: 3GS雖然可以小幅細分曲面,但速度比不上Tessellation吧 03/05 13:57
a27417332: 為啥前面冒出一個3 QQ 03/05 14:09
dreamnook: 自創名詞顯得很潮呀 把事情弄的越複雜越好騙人XD 03/05 14:15
doomleika: 推 03/07 15:36
tigernaxo: 推,看到這篇之前被搞的頭昏腦脹 04/10 08:50