From d2e51054b4361639d3c9ae9a69437b157f2fbf9f Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Sun, 12 Nov 2023 22:54:53 -0600 Subject: rtl/gfx: pass barycentric coords from fine raster to fragment shading --- rtl/gfx/gfx_frag_funnel.sv | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'rtl/gfx/gfx_frag_funnel.sv') diff --git a/rtl/gfx/gfx_frag_funnel.sv b/rtl/gfx/gfx_frag_funnel.sv index f3458b4..943f582 100644 --- a/rtl/gfx/gfx_frag_funnel.sv +++ b/rtl/gfx/gfx_frag_funnel.sv @@ -6,29 +6,40 @@ module gfx_frag_funnel rst_n, input frag_xy_lanes fragments, + input bary_lanes barys, input paint_lanes in_valid, output logic in_ready, input logic out_ready, output logic out_valid, - output frag_xy frag + output frag_xy frag, + output fixed_tri bary ); logic skid_ready, stall, ready, valid; - frag_xy next_frag, out; + frag_xy next_frag, out_frag; + fixed_tri next_bary, out_bary; + bary_lanes barys_hold; paint_lanes current, next; frag_xy_lanes fragments_hold; assign ready = !(|next); assign in_ready = skid_ready && ready; - gfx_skid_buf #(.WIDTH($bits(frag))) skid + gfx_skid_buf #(.WIDTH($bits(frag))) skid_frag ( - .in(out), + .in(out_frag), .out(frag), .* ); + gfx_skid_buf #(.WIDTH($bits(bary))) skid_bary + ( + .in(out_bary), + .out(bary), + .* + ); + gfx_skid_flow skid_flow ( .in_ready(skid_ready), @@ -38,6 +49,7 @@ module gfx_frag_funnel always_comb begin next = 0; + next_bary = {($bits(next_bary)){1'bx}}; next_frag = {($bits(next_frag)){1'bx}}; for (integer i = 0; i < `GFX_FINE_LANES; ++i) @@ -45,6 +57,7 @@ module gfx_frag_funnel next = current; next[i] = 0; + next_bary = barys_hold[i]; next_frag = fragments_hold[i]; end end @@ -60,10 +73,13 @@ module gfx_frag_funnel always_ff @(posedge clk) if (!stall) begin - if (ready) + if (ready) begin + barys_hold <= barys; fragments_hold <= fragments; + end - out <= next_frag; + out_bary <= next_bary; + out_frag <= next_frag; end endmodule -- cgit v1.2.3