我已經制作了一個用於張貼圖像的功能。如何將_m128i轉換爲帶有SSE的無符號整數?
// =(
#define ARGB_COLOR(a, r, g, b) (((a) << 24) | ((r) << 16) | ((g) << 8) | (b))
inline UINT PosterizeColor(const UINT &color, const float &nColors)
{
__m128 clr = _mm_cvtepi32_ps( _mm_cvtepu8_epi32((__m128i&)color) );
clr = _mm_mul_ps(clr, _mm_set_ps1(nColors/255.0f) );
clr = _mm_round_ps(clr, _MM_FROUND_TO_NEAREST_INT);
clr = _mm_mul_ps(clr, _mm_set_ps1(255.0f/nColors) );
__m128i iClr = _mm_cvttps_epi32(clr);
return ARGB_COLOR(iClr.m128i_u8[12],
iClr.m128i_u8[8],
iClr.m128i_u8[4],
iClr.m128i_u8[0]);
}
在第一線
,我解開顏色分爲4個浮點,但我不能找到合適的方式做相反。
我搜索通過上證所文檔,找不到的_mm_cvtepu8_epi32
反向確實存在一個?
_mm_extract_epi32()幫助了一點,但你所說的「非常次優」是什麼意思? – bitwise
一般來說,當您存儲一些數據,然後立即嘗試以不同的字號訪問它時,將會有一個巨大的懲罰。從我所看到的,MSVC提取'xmm'寄存器組件的方法就是:存儲到內存中,並單獨訪問這些單詞。但我想這個特例並不是最壞的情況。 – Mysticial
好的,無論如何,對於2048x2048它運行在22ms,我認爲現在已經足夠了。謝謝=) – bitwise