近日在研究unity可程式設計渲染管線原始碼時,在core庫的[email protected]\corerp\shaderlibrary\common.hlsl(446)發現了這樣乙個小技巧,看一下下面這兩個例子:
struct vertexinput
;struct vertexoutput
;half pow4(half x)
vertexoutput vertex(vertexinput i)
上述shader源**在編譯後實際只有2次乘法,編譯器自動執行了優化:
0: mul r0.x, v0.x, v0.x
1: mul o0.xyzw, r0.***x, r0.***x
2: ret
struct vertexinput
;struct vertexoutput
;half pow4(half x)
vertexoutput vertex(vertexinput i)
如果pow4中的3連乘不加括號,編譯器不會執行優化,編譯後會執行3次乘法。
0: mul r0.x, v0.x, v0.x
1: mul r0.x, r0.x, v0.x
2: mul o0.xyzw, r0.***x, v0.***x
3: ret
說明在編碼時給編譯器提供一些「暗示」,可以幫助編譯器執行自動優化,既保持了良好的可讀性,也達到了效能最優的目的。沒有必要按照傳統的方式進行手動優化,那樣**的可讀性會略差一些:
// 沒有必要寫成這樣,因為結果完全一樣,但可讀性略差些。
half pow4(half x)
Malisc進行Shader優化
以下是採用malisc和mgd分析系統gpu計算效能瓶頸的記錄 1.採用mgd抓取fragments的細節如下 可以看出shader 33 占用大量的cycles,在t880上需要10條a指令,2.45個cycles分析其shader 有 void main 其中shader為了實現左右分頻的功能採...
shader效能優化總結
總結一下最近看到的shader效能優化策略 首先介紹下乙個shader優化工具 glsl optimizer 通過之前文章的學習,我們應該已經了解到 gpu 是流式處理器,其中的頂點著色單元會每頂點執行一次,而片元著色單元會每片元執行一次。可以想象,每繪製一幀畫面,頂點著色器與片元著色器的 少則執行...
shader之 優化一(變數型別)
首先了解一下shader中需要用到的變數型別 1.float 32位單精度的資料型別,是3個型別中最慢的,同時對應的座標型別為float2,float3,float4.2.half 16位浮點型別,速度比float快得多,範圍是 6萬,6萬 能精確到十進位制的小數點後3.3位,相似得座標型別為hal...