| 1499 | } |
| 1500 | |
| 1501 | static void decodeBlockDxt45A(uint8_t _dst[16*4], const uint8_t _src[8]) |
| 1502 | { |
| 1503 | if (!BX_ENABLED(BIMG_DECODE_BC3 || BIMG_DECODE_BC4 || BIMG_DECODE_BC5) ) |
| 1504 | { |
| 1505 | return; |
| 1506 | } |
| 1507 | |
| 1508 | uint8_t alpha[8]; |
| 1509 | alpha[0] = _src[0]; |
| 1510 | alpha[1] = _src[1]; |
| 1511 | |
| 1512 | if (alpha[0] > alpha[1]) |
| 1513 | { |
| 1514 | alpha[2] = (6*alpha[0] + 1*alpha[1]) / 7; |
| 1515 | alpha[3] = (5*alpha[0] + 2*alpha[1]) / 7; |
| 1516 | alpha[4] = (4*alpha[0] + 3*alpha[1]) / 7; |
| 1517 | alpha[5] = (3*alpha[0] + 4*alpha[1]) / 7; |
| 1518 | alpha[6] = (2*alpha[0] + 5*alpha[1]) / 7; |
| 1519 | alpha[7] = (1*alpha[0] + 6*alpha[1]) / 7; |
| 1520 | } |
| 1521 | else |
| 1522 | { |
| 1523 | alpha[2] = (4*alpha[0] + 1*alpha[1]) / 5; |
| 1524 | alpha[3] = (3*alpha[0] + 2*alpha[1]) / 5; |
| 1525 | alpha[4] = (2*alpha[0] + 3*alpha[1]) / 5; |
| 1526 | alpha[5] = (1*alpha[0] + 4*alpha[1]) / 5; |
| 1527 | alpha[6] = 0; |
| 1528 | alpha[7] = 255; |
| 1529 | } |
| 1530 | |
| 1531 | uint32_t idx0 = _src[2]; |
| 1532 | uint32_t idx1 = _src[5]; |
| 1533 | idx0 |= uint32_t(_src[3])<<8; |
| 1534 | idx1 |= uint32_t(_src[6])<<8; |
| 1535 | idx0 |= uint32_t(_src[4])<<16; |
| 1536 | idx1 |= uint32_t(_src[7])<<16; |
| 1537 | for (uint32_t ii = 0; ii < 8*4; ii += 4) |
| 1538 | { |
| 1539 | _dst[ii] = alpha[idx0&7]; |
| 1540 | _dst[ii+32] = alpha[idx1&7]; |
| 1541 | idx0 >>= 3; |
| 1542 | idx1 >>= 3; |
| 1543 | } |
| 1544 | } |
| 1545 | |
| 1546 | // BC6H, BC7 |
| 1547 | // |
no outgoing calls
no test coverage detected