一.SIMD思想概述
SIMD(Single Instruction Multiple Data ),顾名思义,就是单条指令处理多个数据。比如我们处理BYTE类型的乘法,也是需要32位寄存器来做处理.这样显得有些浪费.实际上我们可以把乘数合并,一次32位的乘法得到两个乘法结果.示例代码如下:
R1 = a1*b;
R2 = a2*b;
转换成
T1 = (a1 | (a2 <<16))*b;
R1 = T1&0xffff;
R2 = T1>>16;
在游戏/多媒体等典型的图形处理应用中,我们经常需要对连续密集的数据进行处理.这正是SIMD长处.本文重点讨论利用SIMD思想对16色做alpha混合的处理以及相应的汇编优化.
二.简单应用
16色显示,由于人眼对绿色相对敏感,一般显卡对R5G6B5支持的更好.这时alpha值只需要分32级即可满足要求.即alpha值取[0,32].所以通用的混合逻辑大概如下:
u16bpp alpha16bpp(const u16bpp srcCol, u16bpp desCol, u8bpp alpha)
{
u16bpp b=(GET_BLUE(srcCol)*alpha + GET_BLUE(desCol)*(32-