Skip to content

Commit 92a2784

Browse files
committed
minor
1 parent c860cc3 commit 92a2784

File tree

4 files changed

+61
-13
lines changed

4 files changed

+61
-13
lines changed

Source/astcenc_rate_distortion.cpp

+44-4
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ static constexpr uint32_t ASTCENC_BYTES_PER_BLOCK = 16;
3838

3939
template<typename T> T sqr(T v) { return v * v; }
4040

41-
extern "C" void progress_emitter(float value);
42-
4341
extern "C" void rdo_progress_emitter(
4442
float value
4543
) {
@@ -52,7 +50,27 @@ extern "C" void rdo_progress_emitter(
5250
}
5351
previous_value = value;
5452

55-
progress_emitter(value);
53+
const unsigned int bar_size = 25;
54+
unsigned int parts = static_cast<int>(value / 4.0f);
55+
56+
char buffer[bar_size + 3];
57+
buffer[0] = '[';
58+
59+
for (unsigned int i = 0; i < parts; i++)
60+
{
61+
buffer[i + 1] = '=';
62+
}
63+
64+
for (unsigned int i = parts; i < bar_size; i++)
65+
{
66+
buffer[i + 1] = ' ';
67+
}
68+
69+
buffer[bar_size + 1] = ']';
70+
buffer[bar_size + 2] = '\0';
71+
72+
printf(" Progress: %s %03.1f%%\r", buffer, static_cast<double>(value));
73+
fflush(stdout);
5674
}
5775

5876
static uint32_t init_rdo_context(
@@ -323,6 +341,27 @@ struct local_rdo_context
323341
uint32_t base_offset;
324342
};
325343

344+
static bool is_transparent(int v) { return (v & 0xFF) != 0xFF; }
345+
346+
static bool has_any_transparency(
347+
astcenc_profile decode_mode,
348+
const symbolic_compressed_block& scb
349+
) {
350+
if (scb.block_type != SYM_BTYPE_NONCONST) return is_transparent(scb.constant_color[3]);
351+
352+
vint4 ep0;
353+
vint4 ep1;
354+
bool rgb_lns;
355+
bool a_lns;
356+
357+
for (int i = 0; i < scb.partition_count; i++)
358+
{
359+
unpack_color_endpoints(decode_mode, scb.color_formats[i], scb.color_values[i], rgb_lns, a_lns, ep0, ep1);
360+
if (is_transparent(ep0.lane<3>()) || is_transparent(ep1.lane<3>())) return true;
361+
}
362+
return false;
363+
}
364+
326365
static float compute_block_difference(
327366
void* user_data,
328367
const uint8_t* pcb,
@@ -339,6 +378,7 @@ static float compute_block_difference(
339378
if (scb.block_type == SYM_BTYPE_ERROR) return -ERROR_CALC_DEFAULT;
340379
bool is_dual_plane = scb.block_type == SYM_BTYPE_NONCONST && ctx.bsd->get_block_mode(scb.block_mode).is_dual_plane;
341380
if (is_dual_plane && scb.partition_count != 1) return -ERROR_CALC_DEFAULT;
381+
if (ctx.config.cw_a_weight < 0.01f && has_any_transparency(ctx.config.profile, scb)) return -ERROR_CALC_DEFAULT;
342382

343383
const astcenc_rdo_context& rdo_ctx = *ctx.rdo_context;
344384
uint32_t block_idx = local_block_idx + local_ctx.base_offset;
@@ -422,7 +462,7 @@ void rate_distortion_optimize(
422462
ert::reduce_entropy(buffer + base * ASTCENC_BYTES_PER_BLOCK, count,
423463
ASTCENC_BYTES_PER_BLOCK, ASTCENC_BYTES_PER_BLOCK,
424464
ctx.rdo_context->m_ert_params, total_modified,
425-
compute_block_difference, &local_ctx);
465+
&compute_block_difference, &local_ctx);
426466

427467
ctxo.manage_rdo.complete_task_assignment(count);
428468
}

Source/astcenccli_toplevel.cpp

+11-3
Original file line numberDiff line numberDiff line change
@@ -1209,7 +1209,7 @@ static int edit_astcenc_config(
12091209
argidx += 2;
12101210
if (argidx > argc)
12111211
{
1212-
print_error("ERROR: -rdo-dict-size switch with no argument\n");
1212+
print_error("ERROR: -rdo-lookback switch with no argument\n");
12131213
return 1;
12141214
}
12151215

@@ -1655,7 +1655,8 @@ static void print_diagnostic_image(
16551655
static void print_diagnostic_images(
16561656
astcenc_context* context,
16571657
const astc_compressed_image& image,
1658-
const std::string& output_file
1658+
const std::string& output_file,
1659+
astcenc_operation operation
16591660
) {
16601661
if (image.dim_z != 1)
16611662
{
@@ -1672,6 +1673,13 @@ static void print_diagnostic_images(
16721673

16731674
auto diag_image = alloc_image(8, image.dim_x, image.dim_y, image.dim_z);
16741675

1676+
// ---- ---- ---- ---- Compressed Output ---- ---- ---- ----
1677+
if ((operation & ASTCENC_STAGE_ST_COMP) == 0)
1678+
{
1679+
std::string fname = stem + "_diag.astc";
1680+
store_cimage(image, fname.c_str());
1681+
}
1682+
16751683
// ---- ---- ---- ---- Partitioning ---- ---- ---- ----
16761684
auto partition_func = [](astcenc_block_info& info, size_t texel_x, size_t texel_y) {
16771685
const vint4 colors[] {
@@ -2421,7 +2429,7 @@ int astcenc_main(
24212429
// Store diagnostic images
24222430
if (cli_config.diagnostic_images && !is_null)
24232431
{
2424-
print_diagnostic_images(codec_context, image_comp, output_filename);
2432+
print_diagnostic_images(codec_context, image_comp, output_filename, operation);
24252433
}
24262434

24272435
free_image(image_uncomp_in);

Source/ert.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ namespace ert
144144
bool reduce_entropy(uint8_t* pBlock_bytes, uint32_t num_blocks,
145145
uint32_t total_block_stride_in_bytes, uint32_t block_size_to_optimize_in_bytes,
146146
const reduce_entropy_params& params, uint32_t& total_modified,
147-
diff_block_func_type pDiff_block_func, void* pDiff_block_func_user_data,
147+
diff_block_func_type* pDiff_block_func, void* pDiff_block_func_user_data,
148148
const float* pBlock_mse_scales)
149149
{
150150
assert(total_block_stride_in_bytes && block_size_to_optimize_in_bytes);
@@ -176,7 +176,7 @@ namespace ert
176176
uint8_t* pOrig_block = &pBlock_bytes[block_index * total_block_stride_in_bytes];
177177

178178
float max_std_dev = 0.0f;
179-
float cur_mse = pDiff_block_func(pDiff_block_func_user_data, pOrig_block, block_index, &max_std_dev);
179+
float cur_mse = (*pDiff_block_func)(pDiff_block_func_user_data, pOrig_block, block_index, &max_std_dev);
180180
if (cur_mse < 0.0f)
181181
return false;
182182

@@ -284,7 +284,7 @@ namespace ert
284284
memcpy(trial_block, pOrig_block, block_size_to_optimize_in_bytes);
285285
memcpy(trial_block + dst_ofs, pPrev_blk + src_ofs, len);
286286

287-
float trial_mse = pDiff_block_func(pDiff_block_func_user_data, trial_block, block_index, nullptr);
287+
float trial_mse = (*pDiff_block_func)(pDiff_block_func_user_data, trial_block, block_index, nullptr);
288288
if (trial_mse < 0.0f)
289289
continue;
290290

@@ -367,7 +367,7 @@ namespace ert
367367
memcpy(trial_block, pOrig_block, block_size_to_optimize_in_bytes);
368368
memcpy(trial_block + ofs, pPrev_blk + ofs, len);
369369

370-
float trial_mse = pDiff_block_func(pDiff_block_func_user_data, trial_block, block_index, nullptr);
370+
float trial_mse = (*pDiff_block_func)(pDiff_block_func_user_data, trial_block, block_index, nullptr);
371371
if (trial_mse < 0.0f)
372372
continue;
373373

@@ -436,7 +436,7 @@ namespace ert
436436
memcpy(trial_block, orig_best_block, block_size_to_optimize_in_bytes);
437437
memcpy(trial_block + ofs, pPrev_blk + ofs, len);
438438

439-
float trial_mse = pDiff_block_func(pDiff_block_func_user_data, trial_block, block_index, nullptr);
439+
float trial_mse = (*pDiff_block_func)(pDiff_block_func_user_data, trial_block, block_index, nullptr);
440440
if (trial_mse < 0.0f)
441441
continue;
442442

Source/ert.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ namespace ert
9393
bool reduce_entropy(uint8_t* pBlock_bytes, uint32_t num_blocks,
9494
uint32_t total_block_stride_in_bytes, uint32_t block_size_to_optimize_in_bytes,
9595
const reduce_entropy_params& params, uint32_t& total_modified,
96-
diff_block_func_type pDiff_block_func, void* pDiff_block_func_user_data,
96+
diff_block_func_type* pDiff_block_func, void* pDiff_block_func_user_data,
9797
const float* pBlock_mse_scales = nullptr);
9898

9999
} // namespace ert

0 commit comments

Comments
 (0)