MCPcopy Create free account
hub / github.com/crownengine/crown / CheckSolid

Function CheckSolid

3rdparty/bimg/3rdparty/etc2/ProcessRGB.cpp:294–332  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

292}
293
294uint64 CheckSolid( const uint8* src )
295{
296#ifdef __SSE4_1__
297 __m128i d0 = _mm_loadu_si128(((__m128i*)src) + 0);
298 __m128i d1 = _mm_loadu_si128(((__m128i*)src) + 1);
299 __m128i d2 = _mm_loadu_si128(((__m128i*)src) + 2);
300 __m128i d3 = _mm_loadu_si128(((__m128i*)src) + 3);
301
302 __m128i c = _mm_shuffle_epi32(d0, _MM_SHUFFLE(0, 0, 0, 0));
303
304 __m128i c0 = _mm_cmpeq_epi8(d0, c);
305 __m128i c1 = _mm_cmpeq_epi8(d1, c);
306 __m128i c2 = _mm_cmpeq_epi8(d2, c);
307 __m128i c3 = _mm_cmpeq_epi8(d3, c);
308
309 __m128i m0 = _mm_and_si128(c0, c1);
310 __m128i m1 = _mm_and_si128(c2, c3);
311 __m128i m = _mm_and_si128(m0, m1);
312
313 if (!_mm_testc_si128(m, _mm_set1_epi32(-1)))
314 {
315 return 0;
316 }
317#else
318 const uint8* ptr = src + 4;
319 for( int i=1; i<16; i++ )
320 {
321 if( memcmp( src, ptr, 4 ) != 0 )
322 {
323 return 0;
324 }
325 ptr += 4;
326 }
327#endif
328 return 0x02000000 |
329 ( uint( src[0] & 0xF8 ) << 16 ) |
330 ( uint( src[1] & 0xF8 ) << 8 ) |
331 ( uint( src[2] & 0xF8 ) );
332}
333
334void PrepareAverages( v4i a[8], const uint8* src, uint err[4] )
335{

Callers 1

ProcessRGBFunction · 0.85

Calls 1

memcmpFunction · 0.85

Tested by

no test coverage detected