Shader自動優化特性收錄

2021-08-31 18:59:54 字數 895 閱讀 8596

近日在研究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...