我有一個32位RGBA圖像緩衝區。讓我們假設它是,比如1920x1080 - 典型的從左到右,從上到下的RAW緩衝區。需要使用英特爾內核來驅動32位Alpha通道
這是我想很快做真的是什麼:創建源於這一個代碼緩衝了兩個新的緩衝區...
- 「補」緩衝...... RGB值匹配原始緩衝區。 Alpha值將變爲不透明(0xff)
- 「KEY」Buffer ...每個RGB值都與原始緩衝區的Alpha值匹配。 α值將是不透明的(0xff的)
我(慢)的解決方案是用於將輸入緩衝器中的每個像素,如下所示:
u_int32_t pixel = *srcPtr++; // grab the source 32-bit pixel value
*fillPtr++ = pixel | 0xff; // FILL: keep only the RGB channels (alpha = 0xff)
pixel &= 0xff; // KEY: grab just the alpha value
*keyPtr++ = (pixel<<24) | (pixel<<16) | (pixel<<8) | 0xff; // KEY: xfer alpha to RGB, alpha = 0xff
人們可以假設源緩衝器是16字節對齊。
一些初步測試在1920x1080圖像 - 英特爾至強E5,六核,12MB三級緩存,3.5Ghz,時鐘約爲8ms。
有人可以提供他們的SSE3 instrinics專業知識,讓這一些加速?
科裏..我沒試過從SSE-土地作爲東西我只有它存在的一個粗略的認識。 – zzyzy 2014-08-28 14:12:05