From 04860bb41adaa602e6d51f5167ab5c801ecc25d1 Mon Sep 17 00:00:00 2001 From: BlueCube3310 <53150244+BlueCube3310@users.noreply.github.com> Date: Mon, 18 Aug 2025 11:47:57 +0200 Subject: [PATCH] Betsy: Generate BC1 tables once during compression --- modules/betsy/betsy_bc1.h | 1541 ++++++++---------------- modules/betsy/image_compress_betsy.cpp | 12 +- 2 files changed, 527 insertions(+), 1026 deletions(-) diff --git a/modules/betsy/betsy_bc1.h b/modules/betsy/betsy_bc1.h index 2c62f60b9e7..a883726a565 100644 --- a/modules/betsy/betsy_bc1.h +++ b/modules/betsy/betsy_bc1.h @@ -30,1029 +30,520 @@ #pragma once -constexpr const float dxt1_encoding_table[1024] = { - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 1, - 0, - 1, - 0, - 1, - 0, - 1, - 1, - 1, - 1, - 2, - 0, - 2, - 0, - 0, - 4, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 0, - 3, - 0, - 3, - 0, - 3, - 1, - 1, - 5, - 3, - 2, - 3, - 2, - 4, - 0, - 4, - 0, - 4, - 1, - 4, - 1, - 4, - 2, - 4, - 2, - 4, - 2, - 3, - 5, - 5, - 1, - 5, - 1, - 5, - 2, - 4, - 4, - 5, - 3, - 5, - 3, - 5, - 3, - 6, - 2, - 6, - 2, - 6, - 2, - 6, - 3, - 5, - 5, - 6, - 4, - 6, - 4, - 4, - 8, - 7, - 3, - 7, - 3, - 7, - 3, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 5, - 5, - 9, - 7, - 6, - 7, - 6, - 8, - 4, - 8, - 4, - 8, - 5, - 8, - 5, - 8, - 6, - 8, - 6, - 8, - 6, - 7, - 9, - 9, - 5, - 9, - 5, - 9, - 6, - 8, - 8, - 9, - 7, - 9, - 7, - 9, - 7, - 10, - 6, - 10, - 6, - 10, - 6, - 10, - 7, - 9, - 9, - 10, - 8, - 10, - 8, - 8, - 12, - 11, - 7, - 11, - 7, - 11, - 7, - 11, - 8, - 11, - 8, - 11, - 8, - 11, - 9, - 9, - 13, - 11, - 10, - 11, - 10, - 12, - 8, - 12, - 8, - 12, - 9, - 12, - 9, - 12, - 10, - 12, - 10, - 12, - 10, - 11, - 13, - 13, - 9, - 13, - 9, - 13, - 10, - 12, - 12, - 13, - 11, - 13, - 11, - 13, - 11, - 14, - 10, - 14, - 10, - 14, - 10, - 14, - 11, - 13, - 13, - 14, - 12, - 14, - 12, - 12, - 16, - 15, - 11, - 15, - 11, - 15, - 11, - 15, - 12, - 15, - 12, - 15, - 12, - 15, - 13, - 13, - 17, - 15, - 14, - 15, - 14, - 16, - 12, - 16, - 12, - 16, - 13, - 16, - 13, - 16, - 14, - 16, - 14, - 16, - 14, - 15, - 17, - 17, - 13, - 17, - 13, - 17, - 14, - 16, - 16, - 17, - 15, - 17, - 15, - 17, - 15, - 18, - 14, - 18, - 14, - 18, - 14, - 18, - 15, - 17, - 17, - 18, - 16, - 18, - 16, - 16, - 20, - 19, - 15, - 19, - 15, - 19, - 15, - 19, - 16, - 19, - 16, - 19, - 16, - 19, - 17, - 17, - 21, - 19, - 18, - 19, - 18, - 20, - 16, - 20, - 16, - 20, - 17, - 20, - 17, - 20, - 18, - 20, - 18, - 20, - 18, - 19, - 21, - 21, - 17, - 21, - 17, - 21, - 18, - 20, - 20, - 21, - 19, - 21, - 19, - 21, - 19, - 22, - 18, - 22, - 18, - 22, - 18, - 22, - 19, - 21, - 21, - 22, - 20, - 22, - 20, - 20, - 24, - 23, - 19, - 23, - 19, - 23, - 19, - 23, - 20, - 23, - 20, - 23, - 20, - 23, - 21, - 21, - 25, - 23, - 22, - 23, - 22, - 24, - 20, - 24, - 20, - 24, - 21, - 24, - 21, - 24, - 22, - 24, - 22, - 24, - 22, - 23, - 25, - 25, - 21, - 25, - 21, - 25, - 22, - 24, - 24, - 25, - 23, - 25, - 23, - 25, - 23, - 26, - 22, - 26, - 22, - 26, - 22, - 26, - 23, - 25, - 25, - 26, - 24, - 26, - 24, - 24, - 28, - 27, - 23, - 27, - 23, - 27, - 23, - 27, - 24, - 27, - 24, - 27, - 24, - 27, - 25, - 25, - 29, - 27, - 26, - 27, - 26, - 28, - 24, - 28, - 24, - 28, - 25, - 28, - 25, - 28, - 26, - 28, - 26, - 28, - 26, - 27, - 29, - 29, - 25, - 29, - 25, - 29, - 26, - 28, - 28, - 29, - 27, - 29, - 27, - 29, - 27, - 30, - 26, - 30, - 26, - 30, - 26, - 30, - 27, - 29, - 29, - 30, - 28, - 30, - 28, - 30, - 28, - 31, - 27, - 31, - 27, - 31, - 27, - 31, - 28, - 31, - 28, - 31, - 28, - 31, - 29, - 31, - 29, - 31, - 30, - 31, - 30, - 31, - 30, - 31, - 31, - 31, - 31, - 0, - 0, - 0, - 1, - 1, - 0, - 1, - 0, - 1, - 1, - 2, - 0, - 2, - 1, - 3, - 0, - 3, - 0, - 3, - 1, - 4, - 0, - 4, - 0, - 4, - 1, - 5, - 0, - 5, - 1, - 6, - 0, - 6, - 0, - 6, - 1, - 7, - 0, - 7, - 0, - 7, - 1, - 8, - 0, - 8, - 1, - 8, - 1, - 8, - 2, - 9, - 1, - 9, - 2, - 9, - 2, - 9, - 3, - 10, - 2, - 10, - 3, - 10, - 3, - 10, - 4, - 11, - 3, - 11, - 4, - 11, - 4, - 11, - 5, - 12, - 4, - 12, - 5, - 12, - 5, - 12, - 6, - 13, - 5, - 13, - 6, - 8, - 16, - 13, - 7, - 14, - 6, - 14, - 7, - 9, - 17, - 14, - 8, - 15, - 7, - 15, - 8, - 11, - 16, - 15, - 9, - 15, - 10, - 16, - 8, - 16, - 9, - 16, - 10, - 15, - 13, - 17, - 9, - 17, - 10, - 17, - 11, - 15, - 16, - 18, - 10, - 18, - 11, - 18, - 12, - 16, - 16, - 19, - 11, - 19, - 12, - 19, - 13, - 17, - 17, - 20, - 12, - 20, - 13, - 20, - 14, - 19, - 16, - 21, - 13, - 21, - 14, - 21, - 15, - 20, - 17, - 22, - 14, - 22, - 15, - 25, - 10, - 22, - 16, - 23, - 15, - 23, - 16, - 26, - 11, - 23, - 17, - 24, - 16, - 24, - 17, - 27, - 12, - 24, - 18, - 25, - 17, - 25, - 18, - 28, - 13, - 25, - 19, - 26, - 18, - 26, - 19, - 29, - 14, - 26, - 20, - 27, - 19, - 27, - 20, - 30, - 15, - 27, - 21, - 28, - 20, - 28, - 21, - 28, - 21, - 28, - 22, - 29, - 21, - 29, - 22, - 24, - 32, - 29, - 23, - 30, - 22, - 30, - 23, - 25, - 33, - 30, - 24, - 31, - 23, - 31, - 24, - 27, - 32, - 31, - 25, - 31, - 26, - 32, - 24, - 32, - 25, - 32, - 26, - 31, - 29, - 33, - 25, - 33, - 26, - 33, - 27, - 31, - 32, - 34, - 26, - 34, - 27, - 34, - 28, - 32, - 32, - 35, - 27, - 35, - 28, - 35, - 29, - 33, - 33, - 36, - 28, - 36, - 29, - 36, - 30, - 35, - 32, - 37, - 29, - 37, - 30, - 37, - 31, - 36, - 33, - 38, - 30, - 38, - 31, - 41, - 26, - 38, - 32, - 39, - 31, - 39, - 32, - 42, - 27, - 39, - 33, - 40, - 32, - 40, - 33, - 43, - 28, - 40, - 34, - 41, - 33, - 41, - 34, - 44, - 29, - 41, - 35, - 42, - 34, - 42, - 35, - 45, - 30, - 42, - 36, - 43, - 35, - 43, - 36, - 46, - 31, - 43, - 37, - 44, - 36, - 44, - 37, - 44, - 37, - 44, - 38, - 45, - 37, - 45, - 38, - 40, - 48, - 45, - 39, - 46, - 38, - 46, - 39, - 41, - 49, - 46, - 40, - 47, - 39, - 47, - 40, - 43, - 48, - 47, - 41, - 47, - 42, - 48, - 40, - 48, - 41, - 48, - 42, - 47, - 45, - 49, - 41, - 49, - 42, - 49, - 43, - 47, - 48, - 50, - 42, - 50, - 43, - 50, - 44, - 48, - 48, - 51, - 43, - 51, - 44, - 51, - 45, - 49, - 49, - 52, - 44, - 52, - 45, - 52, - 46, - 51, - 48, - 53, - 45, - 53, - 46, - 53, - 47, - 52, - 49, - 54, - 46, - 54, - 47, - 57, - 42, - 54, - 48, - 55, - 47, - 55, - 48, - 58, - 43, - 55, - 49, - 56, - 48, - 56, - 49, - 59, - 44, - 56, - 50, - 57, - 49, - 57, - 50, - 60, - 45, - 57, - 51, - 58, - 50, - 58, - 51, - 61, - 46, - 58, - 52, - 59, - 51, - 59, - 52, - 62, - 47, - 59, - 53, - 60, - 52, - 60, - 53, - 60, - 53, - 60, - 54, - 61, - 53, - 61, - 54, - 61, - 54, - 61, - 55, - 62, - 54, - 62, - 55, - 62, - 55, - 62, - 56, - 63, - 55, - 63, - 56, - 63, - 56, - 63, - 57, - 63, - 58, - 63, - 59, - 63, - 59, - 63, - 60, - 63, - 61, - 63, - 62, - 63, - 62, - 63, - 63, +static unsigned char stb__OMatch5[256][2] = { + { 0, 0 }, + { 0, 0 }, + { 0, 1 }, + { 0, 1 }, + { 1, 0 }, + { 1, 0 }, + { 1, 0 }, + { 1, 1 }, + { 1, 1 }, + { 2, 0 }, + { 2, 0 }, + { 0, 4 }, + { 2, 1 }, + { 2, 1 }, + { 2, 1 }, + { 3, 0 }, + { 3, 0 }, + { 3, 0 }, + { 3, 1 }, + { 1, 5 }, + { 3, 2 }, + { 3, 2 }, + { 4, 0 }, + { 4, 0 }, + { 4, 1 }, + { 4, 1 }, + { 4, 2 }, + { 4, 2 }, + { 4, 2 }, + { 3, 5 }, + { 5, 1 }, + { 5, 1 }, + { 5, 2 }, + { 4, 4 }, + { 5, 3 }, + { 5, 3 }, + { 5, 3 }, + { 6, 2 }, + { 6, 2 }, + { 6, 2 }, + { 6, 3 }, + { 5, 5 }, + { 6, 4 }, + { 6, 4 }, + { 4, 8 }, + { 7, 3 }, + { 7, 3 }, + { 7, 3 }, + { 7, 4 }, + { 7, 4 }, + { 7, 4 }, + { 7, 5 }, + { 5, 9 }, + { 7, 6 }, + { 7, 6 }, + { 8, 4 }, + { 8, 4 }, + { 8, 5 }, + { 8, 5 }, + { 8, 6 }, + { 8, 6 }, + { 8, 6 }, + { 7, 9 }, + { 9, 5 }, + { 9, 5 }, + { 9, 6 }, + { 8, 8 }, + { 9, 7 }, + { 9, 7 }, + { 9, 7 }, + { 10, 6 }, + { 10, 6 }, + { 10, 6 }, + { 10, 7 }, + { 9, 9 }, + { 10, 8 }, + { 10, 8 }, + { 8, 12 }, + { 11, 7 }, + { 11, 7 }, + { 11, 7 }, + { 11, 8 }, + { 11, 8 }, + { 11, 8 }, + { 11, 9 }, + { 9, 13 }, + { 11, 10 }, + { 11, 10 }, + { 12, 8 }, + { 12, 8 }, + { 12, 9 }, + { 12, 9 }, + { 12, 10 }, + { 12, 10 }, + { 12, 10 }, + { 11, 13 }, + { 13, 9 }, + { 13, 9 }, + { 13, 10 }, + { 12, 12 }, + { 13, 11 }, + { 13, 11 }, + { 13, 11 }, + { 14, 10 }, + { 14, 10 }, + { 14, 10 }, + { 14, 11 }, + { 13, 13 }, + { 14, 12 }, + { 14, 12 }, + { 12, 16 }, + { 15, 11 }, + { 15, 11 }, + { 15, 11 }, + { 15, 12 }, + { 15, 12 }, + { 15, 12 }, + { 15, 13 }, + { 13, 17 }, + { 15, 14 }, + { 15, 14 }, + { 16, 12 }, + { 16, 12 }, + { 16, 13 }, + { 16, 13 }, + { 16, 14 }, + { 16, 14 }, + { 16, 14 }, + { 15, 17 }, + { 17, 13 }, + { 17, 13 }, + { 17, 14 }, + { 16, 16 }, + { 17, 15 }, + { 17, 15 }, + { 17, 15 }, + { 18, 14 }, + { 18, 14 }, + { 18, 14 }, + { 18, 15 }, + { 17, 17 }, + { 18, 16 }, + { 18, 16 }, + { 16, 20 }, + { 19, 15 }, + { 19, 15 }, + { 19, 15 }, + { 19, 16 }, + { 19, 16 }, + { 19, 16 }, + { 19, 17 }, + { 17, 21 }, + { 19, 18 }, + { 19, 18 }, + { 20, 16 }, + { 20, 16 }, + { 20, 17 }, + { 20, 17 }, + { 20, 18 }, + { 20, 18 }, + { 20, 18 }, + { 19, 21 }, + { 21, 17 }, + { 21, 17 }, + { 21, 18 }, + { 20, 20 }, + { 21, 19 }, + { 21, 19 }, + { 21, 19 }, + { 22, 18 }, + { 22, 18 }, + { 22, 18 }, + { 22, 19 }, + { 21, 21 }, + { 22, 20 }, + { 22, 20 }, + { 20, 24 }, + { 23, 19 }, + { 23, 19 }, + { 23, 19 }, + { 23, 20 }, + { 23, 20 }, + { 23, 20 }, + { 23, 21 }, + { 21, 25 }, + { 23, 22 }, + { 23, 22 }, + { 24, 20 }, + { 24, 20 }, + { 24, 21 }, + { 24, 21 }, + { 24, 22 }, + { 24, 22 }, + { 24, 22 }, + { 23, 25 }, + { 25, 21 }, + { 25, 21 }, + { 25, 22 }, + { 24, 24 }, + { 25, 23 }, + { 25, 23 }, + { 25, 23 }, + { 26, 22 }, + { 26, 22 }, + { 26, 22 }, + { 26, 23 }, + { 25, 25 }, + { 26, 24 }, + { 26, 24 }, + { 24, 28 }, + { 27, 23 }, + { 27, 23 }, + { 27, 23 }, + { 27, 24 }, + { 27, 24 }, + { 27, 24 }, + { 27, 25 }, + { 25, 29 }, + { 27, 26 }, + { 27, 26 }, + { 28, 24 }, + { 28, 24 }, + { 28, 25 }, + { 28, 25 }, + { 28, 26 }, + { 28, 26 }, + { 28, 26 }, + { 27, 29 }, + { 29, 25 }, + { 29, 25 }, + { 29, 26 }, + { 28, 28 }, + { 29, 27 }, + { 29, 27 }, + { 29, 27 }, + { 30, 26 }, + { 30, 26 }, + { 30, 26 }, + { 30, 27 }, + { 29, 29 }, + { 30, 28 }, + { 30, 28 }, + { 30, 28 }, + { 31, 27 }, + { 31, 27 }, + { 31, 27 }, + { 31, 28 }, + { 31, 28 }, + { 31, 28 }, + { 31, 29 }, + { 31, 29 }, + { 31, 30 }, + { 31, 30 }, + { 31, 30 }, + { 31, 31 }, + { 31, 31 }, +}; + +static unsigned char stb__OMatch6[256][2] = { + { 0, 0 }, + { 0, 1 }, + { 1, 0 }, + { 1, 0 }, + { 1, 1 }, + { 2, 0 }, + { 2, 1 }, + { 3, 0 }, + { 3, 0 }, + { 3, 1 }, + { 4, 0 }, + { 4, 0 }, + { 4, 1 }, + { 5, 0 }, + { 5, 1 }, + { 6, 0 }, + { 6, 0 }, + { 6, 1 }, + { 7, 0 }, + { 7, 0 }, + { 7, 1 }, + { 8, 0 }, + { 8, 1 }, + { 8, 1 }, + { 8, 2 }, + { 9, 1 }, + { 9, 2 }, + { 9, 2 }, + { 9, 3 }, + { 10, 2 }, + { 10, 3 }, + { 10, 3 }, + { 10, 4 }, + { 11, 3 }, + { 11, 4 }, + { 11, 4 }, + { 11, 5 }, + { 12, 4 }, + { 12, 5 }, + { 12, 5 }, + { 12, 6 }, + { 13, 5 }, + { 13, 6 }, + { 8, 16 }, + { 13, 7 }, + { 14, 6 }, + { 14, 7 }, + { 9, 17 }, + { 14, 8 }, + { 15, 7 }, + { 15, 8 }, + { 11, 16 }, + { 15, 9 }, + { 15, 10 }, + { 16, 8 }, + { 16, 9 }, + { 16, 10 }, + { 15, 13 }, + { 17, 9 }, + { 17, 10 }, + { 17, 11 }, + { 15, 16 }, + { 18, 10 }, + { 18, 11 }, + { 18, 12 }, + { 16, 16 }, + { 19, 11 }, + { 19, 12 }, + { 19, 13 }, + { 17, 17 }, + { 20, 12 }, + { 20, 13 }, + { 20, 14 }, + { 19, 16 }, + { 21, 13 }, + { 21, 14 }, + { 21, 15 }, + { 20, 17 }, + { 22, 14 }, + { 22, 15 }, + { 25, 10 }, + { 22, 16 }, + { 23, 15 }, + { 23, 16 }, + { 26, 11 }, + { 23, 17 }, + { 24, 16 }, + { 24, 17 }, + { 27, 12 }, + { 24, 18 }, + { 25, 17 }, + { 25, 18 }, + { 28, 13 }, + { 25, 19 }, + { 26, 18 }, + { 26, 19 }, + { 29, 14 }, + { 26, 20 }, + { 27, 19 }, + { 27, 20 }, + { 30, 15 }, + { 27, 21 }, + { 28, 20 }, + { 28, 21 }, + { 28, 21 }, + { 28, 22 }, + { 29, 21 }, + { 29, 22 }, + { 24, 32 }, + { 29, 23 }, + { 30, 22 }, + { 30, 23 }, + { 25, 33 }, + { 30, 24 }, + { 31, 23 }, + { 31, 24 }, + { 27, 32 }, + { 31, 25 }, + { 31, 26 }, + { 32, 24 }, + { 32, 25 }, + { 32, 26 }, + { 31, 29 }, + { 33, 25 }, + { 33, 26 }, + { 33, 27 }, + { 31, 32 }, + { 34, 26 }, + { 34, 27 }, + { 34, 28 }, + { 32, 32 }, + { 35, 27 }, + { 35, 28 }, + { 35, 29 }, + { 33, 33 }, + { 36, 28 }, + { 36, 29 }, + { 36, 30 }, + { 35, 32 }, + { 37, 29 }, + { 37, 30 }, + { 37, 31 }, + { 36, 33 }, + { 38, 30 }, + { 38, 31 }, + { 41, 26 }, + { 38, 32 }, + { 39, 31 }, + { 39, 32 }, + { 42, 27 }, + { 39, 33 }, + { 40, 32 }, + { 40, 33 }, + { 43, 28 }, + { 40, 34 }, + { 41, 33 }, + { 41, 34 }, + { 44, 29 }, + { 41, 35 }, + { 42, 34 }, + { 42, 35 }, + { 45, 30 }, + { 42, 36 }, + { 43, 35 }, + { 43, 36 }, + { 46, 31 }, + { 43, 37 }, + { 44, 36 }, + { 44, 37 }, + { 44, 37 }, + { 44, 38 }, + { 45, 37 }, + { 45, 38 }, + { 40, 48 }, + { 45, 39 }, + { 46, 38 }, + { 46, 39 }, + { 41, 49 }, + { 46, 40 }, + { 47, 39 }, + { 47, 40 }, + { 43, 48 }, + { 47, 41 }, + { 47, 42 }, + { 48, 40 }, + { 48, 41 }, + { 48, 42 }, + { 47, 45 }, + { 49, 41 }, + { 49, 42 }, + { 49, 43 }, + { 47, 48 }, + { 50, 42 }, + { 50, 43 }, + { 50, 44 }, + { 48, 48 }, + { 51, 43 }, + { 51, 44 }, + { 51, 45 }, + { 49, 49 }, + { 52, 44 }, + { 52, 45 }, + { 52, 46 }, + { 51, 48 }, + { 53, 45 }, + { 53, 46 }, + { 53, 47 }, + { 52, 49 }, + { 54, 46 }, + { 54, 47 }, + { 57, 42 }, + { 54, 48 }, + { 55, 47 }, + { 55, 48 }, + { 58, 43 }, + { 55, 49 }, + { 56, 48 }, + { 56, 49 }, + { 59, 44 }, + { 56, 50 }, + { 57, 49 }, + { 57, 50 }, + { 60, 45 }, + { 57, 51 }, + { 58, 50 }, + { 58, 51 }, + { 61, 46 }, + { 58, 52 }, + { 59, 51 }, + { 59, 52 }, + { 62, 47 }, + { 59, 53 }, + { 60, 52 }, + { 60, 53 }, + { 60, 53 }, + { 60, 54 }, + { 61, 53 }, + { 61, 54 }, + { 61, 54 }, + { 61, 55 }, + { 62, 54 }, + { 62, 55 }, + { 62, 55 }, + { 62, 56 }, + { 63, 55 }, + { 63, 56 }, + { 63, 56 }, + { 63, 57 }, + { 63, 58 }, + { 63, 59 }, + { 63, 59 }, + { 63, 60 }, + { 63, 61 }, + { 63, 62 }, + { 63, 62 }, + { 63, 63 }, }; diff --git a/modules/betsy/image_compress_betsy.cpp b/modules/betsy/image_compress_betsy.cpp index 062ff1e7645..5dac4fe1997 100644 --- a/modules/betsy/image_compress_betsy.cpp +++ b/modules/betsy/image_compress_betsy.cpp @@ -471,7 +471,17 @@ Error BetsyCompressor::_compress(BetsyFormat p_format, Image *r_img) { // Encoding table setup. if ((dest_format == Image::FORMAT_DXT1 || dest_format == Image::FORMAT_DXT5) && dxt1_encoding_table_buffer.is_null()) { - dxt1_encoding_table_buffer = compress_rd->storage_buffer_create(1024 * 4, Span(dxt1_encoding_table).reinterpret()); + LocalVector dxt1_encoding_table; + dxt1_encoding_table.resize(256 * 4); + + for (int i = 0; i < 256; i++) { + dxt1_encoding_table[i * 2 + 0] = static_cast(stb__OMatch5[i][0]); + dxt1_encoding_table[i * 2 + 1] = static_cast(stb__OMatch5[i][1]); + dxt1_encoding_table[512 + (i * 2 + 0)] = static_cast(stb__OMatch6[i][0]); + dxt1_encoding_table[512 + (i * 2 + 1)] = static_cast(stb__OMatch6[i][1]); + } + + dxt1_encoding_table_buffer = compress_rd->storage_buffer_create(dxt1_encoding_table.size() * sizeof(float), Span(dxt1_encoding_table).reinterpret()); } const int mip_count = r_img->get_mipmap_count() + 1;