下面的代碼將一行從8位蒼白格式轉換爲32-RGBA。爲ARM優化掃描線轉換功能
在我嘗試實現它之前,我想知道下面的代碼是否適合用Direct-Math或ARM Neon intrinsics或內聯彙編進行優化。我第一次看文檔並沒有發現任何可以涵蓋查表部分的內容。
void CopyPixels(BYTE *pDst, BYTE *pSrc, int width,
const BYTE mask, Color* pColorTable)
{
if (width)
{
do
{
BYTE b = *pSrc++;
if (b != mask)
{
// Translate to 32-bit RGB value if not masked
const Color* pColor = pColorTable + b;
pDst[0] = pColor->Blue;
pDst[1] = pColor->Green;
pDst[2] = pColor->Red;
pDst[3] = 0xFF;
}
// Skip to next pixel
pDst += 4;
}
while (--width);
}
}
對錶的訪問只是* memory *操作。這取決於表格的格式。使用* NEON *,您只需使用'vld'。如果您需要重新訂購,有很多選擇。例如,[重新安排向量的博客](http://blogs.arm.com/software-enablement/684-coding-for-neon-part-5-rearranging-vectors/)。 –
你知道彩色地圖裏有什麼嗎?機會是你可以想出一個近似值,它可以避免查找操作,並且運行時間更短,但只適用於已知的地圖。 – sh1