아래 코드는 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);
}
}
테이블에 대한 액세스는 단지 * 메모리 * 작업입니다. 그것은 테이블 형식에 따라 다릅니다. * NEON *을 사용하면'vld' 만 사용하면됩니다. 주문을 다시해야하는 경우 많은 옵션이 있습니다. 예를 들어, [벡터 재배치 블로그] (http://blogs.arm.com/software-enablement/684-coding-for-neon-part-5-rearranging-vectors/). –
컬러 맵에 무엇이 있는지 알고 있습니까? 예상되는 작업을 피하고 시간을 절약하면서 근사치를 구할 수 있지만 알려진지도에 대해서만 실행할 수 있습니다. – sh1