コード例 #1
0
template<bool avx, bool aligned> void grayscaledToBGRA(const __m_auto_i* const src, const __m_auto_i* const srcEnd, __m_auto_i* const dest)
{
  static const __m_auto_i alpha = _mmauto_set1_epi32(0xFF000000);
  __m_auto_i* pDest = dest;
  for(const __m_auto_i* pSrc = src; pSrc < srcEnd; pSrc++)
  {
    const __m_auto_i p = _mmauto_loadt_si_all<true>(pSrc);

    __m_auto_i pLo = p;
    __m_auto_i pHi = p;
    _mmauto_unpacklohi_epi8(pLo, pHi);

    __m_auto_i pLo2 = pLo;
    __m_auto_i pHi2 = pLo;
    _mmauto_unpacklohi_epi8(pLo2, pHi2);
    _mmauto_storet_si_all<aligned>(pDest++, _mmauto_or_si_all(pLo2, alpha));
    _mmauto_storet_si_all<aligned>(pDest++, _mmauto_or_si_all(pHi2, alpha));

    pLo2 = pHi;
    pHi2 = pHi;
    _mmauto_unpacklohi_epi8(pLo2, pHi2);
    _mmauto_storet_si_all<aligned>(pDest++, _mmauto_or_si_all(pLo2, alpha));
    _mmauto_storet_si_all<aligned>(pDest++, _mmauto_or_si_all(pHi2, alpha));
  }
}
コード例 #2
0
template<bool avx, bool aligned> void ALWAYSINLINE storeColors(__m_auto_i* dest, const __m_auto_i p)
{
  static const __m_auto_i classNone = _mmauto_set1_epi32(FieldColors::Color::none);
  static const __m_auto_i classWhite = _mmauto_set1_epi32(FieldColors::Color::white);
  static const __m_auto_i classBlack = _mmauto_set1_epi32(FieldColors::Color::black);
  static const __m_auto_i classGreen = _mmauto_set1_epi32(FieldColors::Color::green);
  static const __m_auto_i colorNone = _mmauto_set1_epi32(0xFF7F7F7F);
  static const __m_auto_i colorWhite = _mmauto_set1_epi32(0xFFFFFFFF);
  static const __m_auto_i colorBlack = _mmauto_set1_epi32(0xFF000000);
  static const __m_auto_i colorGreen = _mmauto_set1_epi32(0xFF00FF00);
  _mmauto_storet_si_all<aligned>(dest,
                                 _mmauto_or_si_all(
                                   _mmauto_or_si_all(
                                     _mmauto_or_si_all(
                                       _mmauto_and_si_all(_mmauto_cmpeq_epi32(p, classNone), colorNone),
                                       _mmauto_and_si_all(_mmauto_cmpeq_epi32(p, classWhite), colorWhite)
                                     ),
                                     _mmauto_and_si_all(_mmauto_cmpeq_epi32(p, classBlack), colorBlack)
                                   ),
                                   _mmauto_and_si_all(_mmauto_cmpeq_epi32(p, classGreen), colorGreen)
                                 )
                                );
}
コード例 #3
0
template<bool avx, bool aligned> void rgbToBGRA(const __m_auto_i* const src, const __m_auto_i* const srcEnd, __m_auto_i* const dest)
{
  static const __m_auto_i shuffleMask = _mmauto_setr128_epi8(2, 1, 0, char(0xFF), 6, 5, 4, char(0xFF), 10, 9, 8, char(0xFF), 14, 13, 12, char(0xFF));
  static const __m_auto_i alpha = _mmauto_set1_epi32(0xFF000000);
  __m_auto_i* pDest = dest;
  for(const __m_auto_i* pSrc = src; pSrc < srcEnd; pSrc++)
  {
    _mmauto_storet_si_all<aligned>(pDest++,
                                   _mmauto_or_si_all(
                                     _mmauto_shuffle_epi8(
                                       _mmauto_loadt_si_all<true>(pSrc),
                                       shuffleMask
                                     ),
                                     alpha)
                                  );
  }
}
コード例 #4
0
ファイル: DebugImages.cpp プロジェクト: weilandetian/Yoyo
template<bool avx> void ALWAYSINLINE storeColors(__m_auto_i* dest, const __m_auto_i p)
{
  alignas(avx ? 32 : 16)static __m_auto_i colors[FieldColors::numOfColors] =
  {
    _mmauto_set1_epi32(0xff7f7f7f), //none
    _mmauto_set1_epi32(0xffffffff), //white
    _mmauto_set1_epi32(0xff000000), //black
    _mmauto_set1_epi32(0xff00ff00), //green
    _mmauto_set1_epi32(0xff0000ff), //own team color
    _mmauto_set1_epi32(0xffff0000)  //opponent team color
  };

  __m_auto_i result = _mmauto_setzero_si_all();

  FOREACH_ENUM((FieldColors) Color, i)
    result = _mmauto_or_si_all(result, _mmauto_and_si_all(_mmauto_cmpeq_epi32(p, _mmauto_set1_epi32(i)), colors[i]));

  _mmauto_storet_si_all<true>(dest, result);
}