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

Function decodeBlockBc7

3rdparty/bimg/src/image.cpp:2359–2549  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2357 };
2358
2359 static void decodeBlockBc7(uint8_t _dst[16*4], const uint8_t _src[16])
2360 {
2361 if (!BX_ENABLED(BIMG_DECODE_BC7) )
2362 {
2363 return;
2364 }
2365
2366 BitReader bit(_src);
2367
2368 uint8_t mode = 0;
2369 for (; mode < 8 && 0 == bit.read(1); ++mode)
2370 {
2371 }
2372
2373 if (mode == 8)
2374 {
2375 bx::memSet(_dst, 0, 16*4);
2376 return;
2377 }
2378
2379 const Bc7ModeInfo& mi = s_bp7ModeInfo[mode];
2380 const uint8_t modePBits = 0 != mi.endpointPBits
2381 ? mi.endpointPBits
2382 : mi.sharedPBits
2383 ;
2384
2385 const uint8_t partitionSetIdx = uint8_t(bit.read(mi.partitionBits) );
2386 const uint8_t rotationMode = uint8_t(bit.read(mi.rotationBits) );
2387 const uint8_t indexSelectionMode = uint8_t(bit.read(mi.indexSelectionBits) );
2388
2389 uint8_t epR[6];
2390 uint8_t epG[6];
2391 uint8_t epB[6];
2392 uint8_t epA[6];
2393
2394 for (uint8_t ii = 0; ii < mi.numSubsets; ++ii)
2395 {
2396 epR[ii*2+0] = uint8_t(bit.read(mi.colorBits) << modePBits);
2397 epR[ii*2+1] = uint8_t(bit.read(mi.colorBits) << modePBits);
2398 }
2399
2400 for (uint8_t ii = 0; ii < mi.numSubsets; ++ii)
2401 {
2402 epG[ii*2+0] = uint8_t(bit.read(mi.colorBits) << modePBits);
2403 epG[ii*2+1] = uint8_t(bit.read(mi.colorBits) << modePBits);
2404 }
2405
2406 for (uint8_t ii = 0; ii < mi.numSubsets; ++ii)
2407 {
2408 epB[ii*2+0] = uint8_t(bit.read(mi.colorBits) << modePBits);
2409 epB[ii*2+1] = uint8_t(bit.read(mi.colorBits) << modePBits);
2410 }
2411
2412 if (mi.alphaBits)
2413 {
2414 for (uint8_t ii = 0; ii < mi.numSubsets; ++ii)
2415 {
2416 epA[ii*2+0] = uint8_t(bit.read(mi.alphaBits) << modePBits);

Callers 1

imageDecodeToBgra8Function · 0.85

Calls 5

memSetFunction · 0.85
bitRangeConvertFunction · 0.85
swapFunction · 0.50
readMethod · 0.45
peekMethod · 0.45

Tested by

no test coverage detected