diff options
Diffstat (limited to 'flowy/src/motion/enc.wgsl')
-rw-r--r-- | flowy/src/motion/enc.wgsl | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/flowy/src/motion/enc.wgsl b/flowy/src/motion/enc.wgsl index 6ba3081..80618b7 100644 --- a/flowy/src/motion/enc.wgsl +++ b/flowy/src/motion/enc.wgsl @@ -24,19 +24,28 @@ var<private> best_tint: vec3<f32> = vec3(0.); @compute @workgroup_size(1)fn main(@builtin(global_invocation_id) global_id: vec3<u32>) { let uv = vec2<i32>(global_id.xy) * params.block_size; - test_offset(uv, vec2(0, 0)); + loop { + test_offset(uv, vec2(0, 0)); + if best_error < params.skip_threshold { break; } + apply_tint(uv); + if best_error < params.skip_threshold { break; } + best_tint = vec3(0.); - do_dist(uv, 32); - do_dist(uv, 16); - do_dist(uv, 10); - do_dist(uv, 8); - do_dist(uv, 6); - do_dist(uv, 3); - do_dist(uv, 4); - do_dist(uv, 2); - do_dist(uv, 1); + do_dist(uv, 32); + do_dist(uv, 16); + do_dist(uv, 10); + do_dist(uv, 8); + if best_error < params.skip_threshold { break; } + do_dist(uv, 6); + do_dist(uv, 3); + do_dist(uv, 4); + do_dist(uv, 2); + do_dist(uv, 1); + if best_error < params.skip_threshold { break; } - apply_tint(uv); + apply_tint(uv); + break; + } offsets[global_id.x + global_id.y * params.offsets_stride] = BlockOffset(best_error, best_offset, best_tint); } |