天天看點

關于UNITY_BRANCH、UNITY_UNROLL的小知識

UNITY_BRANCH這個宏在下列平台中被定義為[branch]:

D3D11、GLCore、GLES3、Metal、PSSL、Switch、Vulkan、XBoxOne

意為如果if表達式為false,不執行if中的語句。詳見MSDN。

而在GLES2和不可識别的平台上被定義為空,則不論表達式的結果是什麼,都會執行所有分支的語句。可能是在這類平台上不支援[branch]特性的關系,這一點有待确認。

UNITY_UNROLL這個宏在下列平台中被定義為[unroll]:

D3D11、GLCore、GLES3、Metal、PSSL、Switch、Vulkan、XBoxOne

意為基于循環次數展開循環。詳見MSDN。

而在GLES2和不可識别的平台上被定義為空,根據文檔的說明,這種情況下首先嘗試不展開循環,如果嘗試失敗,才使用展開循環的版本。可能是這類平台自身指令數的限制,展開循環容易導緻指令數過多,這一點有待确認。

繼續閱讀