[Maintenance] [th01] Avoid direct usage of VRAM plane pointers where possible

Might not read as nicely for the 8-dot cases, but makes it easier to
get rid of the pointers if necessary.

Part of P0229, funded by Ember2528.
This commit is contained in:
nmlgc 2023-01-29 19:08:03 +01:00
parent 41156c0e76
commit a309e3f549
3 changed files with 23 additions and 22 deletions

View File

@ -41,39 +41,40 @@ void graph_2xscale_byterect_1_to_0_slow(
dots16_t px16_nonzero;
for(row = 0; row < h_1; row++) {
int p0 = row_p0;
int p1 = row_p1;
vram_offset_t p0 = row_p0;
vram_offset_t p1 = row_p1;
for(col16 = 0; col16 < w_1 / 16; col16++) {
int scale_p;
vram_byte_amount_t scale_p;
graph_accesspage_func(1);
VRAM_SNAP_PLANAR(px16, p1, 16);
px16_nonzero = px16.B | px16.R | px16.G | px16.E;
for(scale_p = 0; scale_p < ROW_SIZE * 2; scale_p += ROW_SIZE) {
px16_nonzero = (px16.B | px16.R | px16.G | px16.E);
for(scale_p = 0; scale_p < (ROW_SIZE * 2); scale_p += ROW_SIZE) {
dots32_t dst32;
dots32_t px32_nonzero;
// Parentheses omitted for code generation reasons.
graph_accesspage_func(0);
scale_2x(px32_nonzero, px16_nonzero);
grcg_setcolor_rmw(0);
*(dots32_t*)(VRAM_PLANE_B + p0 + scale_p) = px32_nonzero;
grcg_put(p0 + scale_p, px32_nonzero, 32);
grcg_off();
scale_2x(dst32, px16.B);
*(dots32_t*)(VRAM_PLANE_B + p0 + scale_p) |= dst32;
VRAM_CHUNK(B, p0 + scale_p, 32) |= dst32;
scale_2x(dst32, px16.R);
*(dots32_t*)(VRAM_PLANE_R + p0 + scale_p) |= dst32;
VRAM_CHUNK(R, p0 + scale_p, 32) |= dst32;
scale_2x(dst32, px16.G);
*(dots32_t*)(VRAM_PLANE_G + p0 + scale_p) |= dst32;
VRAM_CHUNK(G, p0 + scale_p, 32) |= dst32;
scale_2x(dst32, px16.E);
*(dots32_t*)(VRAM_PLANE_E + p0 + scale_p) |= dst32;
VRAM_CHUNK(E, p0 + scale_p, 32) |= dst32;
}
p1 += 2;
p0 += 4;
p1 += static_cast<vram_byte_amount_t>(sizeof(dots16_t));
p0 += static_cast<vram_byte_amount_t>(sizeof(dots32_t));
}
row_p0 += ROW_SIZE * 2;
row_p0 += (ROW_SIZE * 2);
row_p1 += ROW_SIZE;
}
}

View File

@ -16,16 +16,16 @@ void graph_hline_unput_masked_8(
for(vram_byte_amount_t x = 0; x < vram_w; x++, p++) {
if(mask[x]) {
graph_accesspage_func(1);
px8.B = mask[x] & VRAM_PLANE_B[p];
px8.R = mask[x] & VRAM_PLANE_R[p];
px8.G = mask[x] & VRAM_PLANE_G[p];
px8.E = mask[x] & VRAM_PLANE_E[p];
px8.B = mask[x] & VRAM_CHUNK(B, p, 8);
px8.R = mask[x] & VRAM_CHUNK(R, p, 8);
px8.G = mask[x] & VRAM_CHUNK(G, p, 8);
px8.E = mask[x] & VRAM_CHUNK(E, p, 8);
graph_accesspage_func(0);
vram_erase(p, mask[x], 8);
VRAM_PLANE_B[p] |= px8.B;
VRAM_PLANE_R[p] |= px8.R;
VRAM_PLANE_G[p] |= px8.G;
VRAM_PLANE_E[p] |= px8.E;
VRAM_CHUNK(B, p, 8) |= px8.B;
VRAM_CHUNK(R, p, 8) |= px8.R;
VRAM_CHUNK(G, p, 8) |= px8.G;
VRAM_CHUNK(E, p, 8) |= px8.E;
}
}
}

View File

@ -54,7 +54,7 @@ void snap_col_4(void)
y = 0;
vram_offset = x;
while(y < RES_Y) {
columns[x][y] = VRAM_PLANE_B[vram_offset];
columns[x][y] = VRAM_CHUNK(B, vram_offset, 8);
y++;
vram_offset += ROW_SIZE;
}