- for (i = 0; i < 4 && w > 0; i++) {
- if (x < 512) {
- wb = w;
- if (x + w > 512)
- wb = 512 - x;
- src = gpu.vram + xt * i + y * 1024 + x;
- dst = egpu.enhancement_buf_ptr +
- (1024*1024 + xt * 2) * i + (y * 1024 + x) * 2;
- scale2x_tiles8(dst, src, wb / 8, h);
+ // find x_buf which is an offset into this enhancement_buf
+ fb_index = egpu.enhancement_buf_by_x16[x / step_x];
+ x_buf = x - egpu.enhancement_buf_start[fb_index];
+
+ while (w > 0) {
+ fb_index = egpu.enhancement_buf_by_x16[x / step_x];
+ for (w1 = 0; w > 0 && x_buf < hres; x_buf += step_x, w1++, w -= step_x)
+ if (fb_index != egpu.enhancement_buf_by_x16[x / step_x + w1])
+ break;
+ // skip further unneeded data, if any
+ for (s = 0; w > 0; s++, w -= step_x)
+ if (fb_index != egpu.enhancement_buf_by_x16[x / step_x + w1 + s])
+ break;
+
+ if (w1 > 0) {
+ src = gpu.vram + y * 1024 + x;
+ dst = select_enhancement_buf_ptr(&egpu, x);
+ dst += (y * 1024 + x) * 2;
+ scale2x_tiles8(dst, src, w1 * step_x / 8, h);