32位/64兼容 VC inline 汇编极限优化范例之颜色混合: AlphaBlendPixel

来源:互联网 发布:帝国cms整合ck 编辑:程序博客网 时间:2024/04/27 18:54

写给底层搬运工看的 : )

__forceinline void AlphaBlendPixel( ULONG& dst_bgra,ULONG src_bgra ){register ULONG src_Alpha = ULongToBGRA(src_bgra)->Alpha;if( src_Alpha <= 1 )return; // 完全透明的点就不需要处理了if( src_Alpha >= 254 ){ dst_bgra = src_bgra; return; }__m128i src_alpha, dst_alpha, _mZero = _mm_setzero_si128();src_alpha.m128i_u16[0] = src_alpha.m128i_u16[1] = src_alpha.m128i_u16[2] = src_alpha.m128i_u16[3] = (USHORT)src_Alpha;dst_alpha.m128i_u64[0] = 0xFF00FF00FF00FF;dst_bgra = _mm_packus_epi16(_mm_srl_epi16(_mm_add_epi16(_mm_mullo_epi16( _mm_unpacklo_epi8( _mm_cvtsi32_si128( dst_bgra ), _mZero),  _mm_sub_epi16( dst_alpha, src_alpha ) ), _mm_mullo_epi16( _mm_unpacklo_epi8( _mm_cvtsi32_si128( src_bgra ), _mZero), src_alpha )),_mm_cvtsi32_si128( 8 )),_mZero).m128i_u32[0];}

转载请注明出处。多谢.


0 0
原创粉丝点击