summaryrefslogtreecommitdiff
path: root/rtl/gfx/gfx_fine.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2023-11-10 01:00:50 -0600
committerAlejandro Soto <alejandro@34project.org>2023-11-10 01:43:02 -0600
commit39294ed7dbf2331651cd8fcca887e088bdcd2cfc (patch)
tree0f6c3d590b1f1400f6c1f6ca98be1d0e15631312 /rtl/gfx/gfx_fine.sv
parentd5783a6ebde5d38fe72dd19293d9144827c35c56 (diff)
rtl/gfx: use packed arrays in module interfaces
Diffstat (limited to 'rtl/gfx/gfx_fine.sv')
-rw-r--r--rtl/gfx/gfx_fine.sv57
1 files changed, 28 insertions, 29 deletions
diff --git a/rtl/gfx/gfx_fine.sv b/rtl/gfx/gfx_fine.sv
index 21292f2..6238025 100644
--- a/rtl/gfx/gfx_fine.sv
+++ b/rtl/gfx/gfx_fine.sv
@@ -3,46 +3,45 @@
module gfx_fine
#(parameter X=0, Y=0)
(
- input logic clk,
-
- input raster_xy pos,
- input fixed corner_a,
- corner_b,
- corner_c,
- input fixed offsets_a[`GFX_RASTER_OFFSETS],
- offsets_b[`GFX_RASTER_OFFSETS],
- offsets_c[`GFX_RASTER_OFFSETS],
- input logic stall,
-
- output frag_xy fragment,
- output logic paint
+ input logic clk,
+
+ input raster_xy pos,
+ input fixed_tri corners,
+ input raster_offsets_tri offsets,
+ input logic stall,
+
+ output frag_xy fragment,
+ output logic paint
);
localparam INDEX = Y * `GFX_RASTER_SIZE + X;
- fixed edge_a, edge_b, edge_c, offset_a, offset_b, offset_c;
- logic sign_a, sign_b, sign_c;
frag_xy fragment_hold;
-
- assign offset_a = offsets_a[INDEX];
- assign offset_b = offsets_b[INDEX];
- assign offset_c = offsets_c[INDEX];
-
- assign sign_a = edge_a[$bits(edge_a) - 1];
- assign sign_b = edge_b[$bits(edge_b) - 1];
- assign sign_c = edge_c[$bits(edge_c) - 1];
+ fixed_tri edges, per_edge_offsets;
+ logic[2:0] signs;
+ raster_xy_prec prec;
+ logic[`GFX_RASTER_BITS - 1:0] fine_x, fine_y;
+
+ assign prec = pos;
+ assign fine_x = X;
+ assign fine_y = Y;
+
+ always_comb
+ for (integer i = 0; i < 3; ++i) begin
+ signs[i] = edges[i][$bits(edges[0]) - 1];
+ per_edge_offsets[i] = offsets[i][INDEX];
+ end
always_ff @(posedge clk)
if (!stall) begin
- paint <= !sign_a && !sign_b && !sign_c;
+ paint <= signs == 0;
fragment <= fragment_hold;
- fragment_hold.x <= pos.x.frag.num;
- fragment_hold.y <= pos.y.frag.num;
+ fragment_hold.x <= {prec.x.coarse, fine_x};
+ fragment_hold.y <= {prec.y.coarse, fine_y};
- edge_a <= corner_a + offset_a;
- edge_b <= corner_b + offset_b;
- edge_c <= corner_c + offset_c;
+ for (integer i = 0; i < 3; ++i)
+ edges[i] <= corners[i] + per_edge_offsets[i];
end
endmodule