@@ -56,6 +56,8 @@ struct astcenc_preset_config
56
56
float tune_3partition_early_out_limit_factor;
57
57
float tune_2plane_early_out_limit_correlation;
58
58
float tune_search_mode0_enable;
59
+ float rdo_quality;
60
+ unsigned int rdo_dict_size;
59
61
};
60
62
61
63
/* *
@@ -64,22 +66,22 @@ struct astcenc_preset_config
64
66
static const std::array<astcenc_preset_config, 6 > preset_configs_high {{
65
67
{
66
68
ASTCENC_PRE_FASTEST,
67
- 2 , 10 , 6 , 4 , 43 , 2 , 2 , 2 , 2 , 2 , 85 .2f , 63 .2f , 3 .5f , 1 .0f , 1 .0f , 0 .85f , 0 .0f
69
+ 2 , 10 , 6 , 4 , 43 , 2 , 2 , 2 , 2 , 2 , 85 .2f , 63 .2f , 3 .5f , 1 .0f , 1 .0f , 0 .85f , 0 .0f , 4 . 0f , 256
68
70
}, {
69
71
ASTCENC_PRE_FAST,
70
- 3 , 18 , 10 , 8 , 55 , 3 , 3 , 2 , 2 , 2 , 85 .2f , 63 .2f , 3 .5f , 1 .0f , 1 .0f , 0 .90f , 0 .0f
72
+ 3 , 18 , 10 , 8 , 55 , 3 , 3 , 2 , 2 , 2 , 85 .2f , 63 .2f , 3 .5f , 1 .0f , 1 .0f , 0 .90f , 0 .0f , 2 . 0f , 1024
71
73
}, {
72
74
ASTCENC_PRE_MEDIUM,
73
- 4 , 34 , 28 , 16 , 77 , 3 , 3 , 2 , 2 , 2 , 95 .0f , 70 .0f , 2 .5f , 1 .1f , 1 .05f , 0 .95f , 0 .0f
75
+ 4 , 34 , 28 , 16 , 77 , 3 , 3 , 2 , 2 , 2 , 95 .0f , 70 .0f , 2 .5f , 1 .1f , 1 .05f , 0 .95f , 0 .0f , 1 . 0f , 4096
74
76
}, {
75
77
ASTCENC_PRE_THOROUGH,
76
- 4 , 82 , 60 , 30 , 94 , 4 , 4 , 3 , 2 , 2 , 105 .0f , 77 .0f , 10 .0f , 1 .35f , 1 .15f , 0 .97f , 0 .0f
78
+ 4 , 82 , 60 , 30 , 94 , 4 , 4 , 3 , 2 , 2 , 105 .0f , 77 .0f , 10 .0f , 1 .35f , 1 .15f , 0 .97f , 0 .0f , 0 . 5f , 4096
77
79
}, {
78
80
ASTCENC_PRE_VERYTHOROUGH,
79
- 4 , 256 , 128 , 64 , 98 , 4 , 6 , 8 , 6 , 4 , 200 .0f , 200 .0f , 10 .0f , 1 .6f , 1 .4f , 0 .98f , 0 .0f
81
+ 4 , 256 , 128 , 64 , 98 , 4 , 6 , 8 , 6 , 4 , 200 .0f , 200 .0f , 10 .0f , 1 .6f , 1 .4f , 0 .98f , 0 .0f , 0 . 4f , 4096
80
82
}, {
81
83
ASTCENC_PRE_EXHAUSTIVE,
82
- 4 , 512 , 512 , 512 , 100 , 4 , 8 , 8 , 8 , 8 , 200 .0f , 200 .0f , 10 .0f , 2 .0f , 2 .0f , 0 .99f , 0 .0f
84
+ 4 , 512 , 512 , 512 , 100 , 4 , 8 , 8 , 8 , 8 , 200 .0f , 200 .0f , 10 .0f , 2 .0f , 2 .0f , 0 .99f , 0 .0f , 0 . 2f , 4096
83
85
}
84
86
}};
85
87
@@ -89,22 +91,22 @@ static const std::array<astcenc_preset_config, 6> preset_configs_high {{
89
91
static const std::array<astcenc_preset_config, 6 > preset_configs_mid {{
90
92
{
91
93
ASTCENC_PRE_FASTEST,
92
- 2 , 10 , 6 , 4 , 43 , 2 , 2 , 2 , 2 , 2 , 85 .2f , 63 .2f , 3 .5f , 1 .0f , 1 .0f , 0 .80f , 1 .0f
94
+ 2 , 10 , 6 , 4 , 43 , 2 , 2 , 2 , 2 , 2 , 85 .2f , 63 .2f , 3 .5f , 1 .0f , 1 .0f , 0 .80f , 1 .0f , 4 . 0f , 256
93
95
}, {
94
96
ASTCENC_PRE_FAST,
95
- 3 , 18 , 12 , 10 , 55 , 3 , 3 , 2 , 2 , 2 , 85 .2f , 63 .2f , 3 .5f , 1 .0f , 1 .0f , 0 .85f , 1 .0f
97
+ 3 , 18 , 12 , 10 , 55 , 3 , 3 , 2 , 2 , 2 , 85 .2f , 63 .2f , 3 .5f , 1 .0f , 1 .0f , 0 .85f , 1 .0f , 2 . 0f , 1024
96
98
}, {
97
99
ASTCENC_PRE_MEDIUM,
98
- 3 , 34 , 28 , 16 , 77 , 3 , 3 , 2 , 2 , 2 , 95 .0f , 70 .0f , 3 .0f , 1 .1f , 1 .05f , 0 .90f , 1 .0f
100
+ 3 , 34 , 28 , 16 , 77 , 3 , 3 , 2 , 2 , 2 , 95 .0f , 70 .0f , 3 .0f , 1 .1f , 1 .05f , 0 .90f , 1 .0f , 1 . 0f , 4096
99
101
}, {
100
102
ASTCENC_PRE_THOROUGH,
101
- 4 , 82 , 60 , 30 , 94 , 4 , 4 , 3 , 2 , 2 , 105 .0f , 77 .0f , 10 .0f , 1 .4f , 1 .2f , 0 .95f , 0 .0f
103
+ 4 , 82 , 60 , 30 , 94 , 4 , 4 , 3 , 2 , 2 , 105 .0f , 77 .0f , 10 .0f , 1 .4f , 1 .2f , 0 .95f , 0 .0f , 0 . 5f , 4096
102
104
}, {
103
105
ASTCENC_PRE_VERYTHOROUGH,
104
- 4 , 256 , 128 , 64 , 98 , 4 , 6 , 8 , 6 , 3 , 200 .0f , 200 .0f , 10 .0f , 1 .6f , 1 .4f , 0 .98f , 0 .0f
106
+ 4 , 256 , 128 , 64 , 98 , 4 , 6 , 8 , 6 , 3 , 200 .0f , 200 .0f , 10 .0f , 1 .6f , 1 .4f , 0 .98f , 0 .0f , 0 . 4f , 4096
105
107
}, {
106
108
ASTCENC_PRE_EXHAUSTIVE,
107
- 4 , 256 , 256 , 256 , 100 , 4 , 8 , 8 , 8 , 8 , 200 .0f , 200 .0f , 10 .0f , 2 .0f , 2 .0f , 0 .99f , 0 .0f
109
+ 4 , 256 , 256 , 256 , 100 , 4 , 8 , 8 , 8 , 8 , 200 .0f , 200 .0f , 10 .0f , 2 .0f , 2 .0f , 0 .99f , 0 .0f , 0 . 2f , 4096
108
110
}
109
111
}};
110
112
@@ -114,22 +116,22 @@ static const std::array<astcenc_preset_config, 6> preset_configs_mid {{
114
116
static const std::array<astcenc_preset_config, 6 > preset_configs_low {{
115
117
{
116
118
ASTCENC_PRE_FASTEST,
117
- 2 , 10 , 6 , 4 , 40 , 2 , 2 , 2 , 2 , 2 , 85 .0f , 63 .0f , 3 .5f , 1 .0f , 1 .0f , 0 .80f , 1 .0f
119
+ 2 , 10 , 6 , 4 , 40 , 2 , 2 , 2 , 2 , 2 , 85 .0f , 63 .0f , 3 .5f , 1 .0f , 1 .0f , 0 .80f , 1 .0f , 4 . 0f , 256
118
120
}, {
119
121
ASTCENC_PRE_FAST,
120
- 2 , 18 , 12 , 10 , 55 , 3 , 3 , 2 , 2 , 2 , 85 .0f , 63 .0f , 3 .5f , 1 .0f , 1 .0f , 0 .85f , 1 .0f
122
+ 2 , 18 , 12 , 10 , 55 , 3 , 3 , 2 , 2 , 2 , 85 .0f , 63 .0f , 3 .5f , 1 .0f , 1 .0f , 0 .85f , 1 .0f , 2 . 0f , 1024
121
123
}, {
122
124
ASTCENC_PRE_MEDIUM,
123
- 3 , 34 , 28 , 16 , 77 , 3 , 3 , 2 , 2 , 2 , 95 .0f , 70 .0f , 3 .5f , 1 .1f , 1 .05f , 0 .90f , 1 .0f
125
+ 3 , 34 , 28 , 16 , 77 , 3 , 3 , 2 , 2 , 2 , 95 .0f , 70 .0f , 3 .5f , 1 .1f , 1 .05f , 0 .90f , 1 .0f , 1 . 0f , 4096
124
126
}, {
125
127
ASTCENC_PRE_THOROUGH,
126
- 4 , 82 , 60 , 30 , 93 , 4 , 4 , 3 , 2 , 2 , 105 .0f , 77 .0f , 10 .0f , 1 .3f , 1 .2f , 0 .97f , 1 .0f
128
+ 4 , 82 , 60 , 30 , 93 , 4 , 4 , 3 , 2 , 2 , 105 .0f , 77 .0f , 10 .0f , 1 .3f , 1 .2f , 0 .97f , 1 .0f , 0 . 5f , 4096
127
129
}, {
128
130
ASTCENC_PRE_VERYTHOROUGH,
129
- 4 , 256 , 128 , 64 , 98 , 4 , 6 , 8 , 5 , 2 , 200 .0f , 200 .0f , 10 .0f , 1 .6f , 1 .4f , 0 .98f , 1 .0f
131
+ 4 , 256 , 128 , 64 , 98 , 4 , 6 , 8 , 5 , 2 , 200 .0f , 200 .0f , 10 .0f , 1 .6f , 1 .4f , 0 .98f , 1 .0f , 0 . 4f , 4096
130
132
}, {
131
133
ASTCENC_PRE_EXHAUSTIVE,
132
- 4 , 256 , 256 , 256 , 100 , 4 , 8 , 8 , 8 , 8 , 200 .0f , 200 .0f , 10 .0f , 2 .0f , 2 .0f , 0 .99f , 1 .0f
134
+ 4 , 256 , 256 , 256 , 100 , 4 , 8 , 8 , 8 , 8 , 200 .0f , 200 .0f , 10 .0f , 2 .0f , 2 .0f , 0 .99f , 1 .0f , 0 . 2f , 4096
133
135
}
134
136
}};
135
137
@@ -533,6 +535,8 @@ astcenc_error astcenc_config_init(
533
535
config.tune_3partition_early_out_limit_factor = (*preset_configs)[start].tune_3partition_early_out_limit_factor ;
534
536
config.tune_2plane_early_out_limit_correlation = (*preset_configs)[start].tune_2plane_early_out_limit_correlation ;
535
537
config.tune_search_mode0_enable = (*preset_configs)[start].tune_search_mode0_enable ;
538
+ config.rdo_quality = (*preset_configs)[start].rdo_quality ;
539
+ config.rdo_dict_size = (*preset_configs)[start].rdo_dict_size ;
536
540
}
537
541
// Start and end node are not the same - so interpolate between them
538
542
else
@@ -572,11 +576,16 @@ astcenc_error astcenc_config_init(
572
576
config.tune_3partition_early_out_limit_factor = LERP (tune_3partition_early_out_limit_factor);
573
577
config.tune_2plane_early_out_limit_correlation = LERP (tune_2plane_early_out_limit_correlation);
574
578
config.tune_search_mode0_enable = LERP (tune_search_mode0_enable);
579
+ config.rdo_quality = LERP (rdo_quality);
580
+ config.rdo_dict_size = LERP (rdo_dict_size);
575
581
#undef LERP
576
582
#undef LERPI
577
583
#undef LERPUI
578
584
}
579
585
586
+ config.rdo_max_smooth_block_error_scale = 10 .0f ;
587
+ config.rdo_max_smooth_block_std_dev = 18 .0f ;
588
+
580
589
// Set heuristics to the defaults for each color profile
581
590
config.cw_r_weight = 1 .0f ;
582
591
config.cw_g_weight = 1 .0f ;
@@ -655,12 +664,6 @@ astcenc_error astcenc_config_init(
655
664
}
656
665
config.flags = flags;
657
666
658
- // These are the reasonable defaults that leverages performance & compression rate
659
- config.rdo_quality = 1 .0f ;
660
- config.rdo_dict_size = 4096 ;
661
- config.rdo_max_smooth_block_error_scale = 10 .0f ;
662
- config.rdo_max_smooth_block_std_dev = 18 .0f ;
663
-
664
667
return ASTCENC_SUCCESS;
665
668
}
666
669
0 commit comments