From f201567153bb143c972545e611bdb6c0ef80d3d2 Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Sun, 12 Dec 2021 21:38:43 +0100 Subject: [PATCH] LibGL: Use 8x8 block size in `SoftwareRasterizer` This smaller block size allows us to use an `u8` for the pixel mask during triangle rasterization. These changes result in better FPS in 3DFileViewer, which periodically shoots up to 250-300 FPS on my machine. Before, the peaks were somewhere in the range of 160-170 FPS. --- Userland/Libraries/LibGL/SoftwareRasterizer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibGL/SoftwareRasterizer.cpp b/Userland/Libraries/LibGL/SoftwareRasterizer.cpp index d9c3c5b4318..f59b8a43180 100644 --- a/Userland/Libraries/LibGL/SoftwareRasterizer.cpp +++ b/Userland/Libraries/LibGL/SoftwareRasterizer.cpp @@ -15,7 +15,7 @@ namespace GL { using IntVector2 = Gfx::Vector2; using IntVector3 = Gfx::Vector3; -static constexpr int RASTERIZER_BLOCK_SIZE = 16; +static constexpr int RASTERIZER_BLOCK_SIZE = 8; constexpr static int edge_function(const IntVector2& a, const IntVector2& b, const IntVector2& c) { @@ -199,8 +199,8 @@ static void rasterize_triangle(const RasterizerOptions& options, Gfx::Bitmap& re int const by1 = (min(render_bounds.bottom(), max(max(v0.y(), v1.y()), v2.y())) + block_padding) / RASTERIZER_BLOCK_SIZE; // clang-format on - static_assert(RASTERIZER_BLOCK_SIZE < sizeof(int) * 8, "RASTERIZER_BLOCK_SIZE must be smaller than the pixel_mask's width in bits"); - int pixel_mask[RASTERIZER_BLOCK_SIZE]; + u8 pixel_mask[RASTERIZER_BLOCK_SIZE]; + static_assert(RASTERIZER_BLOCK_SIZE <= sizeof(decltype(*pixel_mask)) * 8, "RASTERIZER_BLOCK_SIZE must be smaller than the pixel_mask's width in bits"); FloatVector4 pixel_buffer[RASTERIZER_BLOCK_SIZE][RASTERIZER_BLOCK_SIZE];