关于UNITY_BRANCH、UNITY_UNROLL的小知识

本文探讨了UNITY_BRANCH和UNITY_UNROLL宏在不同平台上的定义及作用。UNITY_BRANCH在多个平台如D3D11、GLCore等被定义为[branch],用于条件分支控制;在GLES2和其他未知平台则被定义为空,所有分支语句均会执行。UNITY_UNROLL宏在大多数高性能平台被定义为[unroll],用于循环展开优化,但在GLES2和未知平台仅在必要时进行循环展开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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和不可识别的平台上被定义为空,根据文档的说明,这种情况下首先尝试不展开循环,如果尝试失败,才使用展开循环的版本。可能是这类平台自身指令数的限制,展开循环容易导致指令数过多,这一点有待确认。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值