summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
authorJelle Raaijmakers <jelle@gmta.nl>2021-12-12 21:38:43 +0100
committerBrian Gianforcaro <b.gianfo@gmail.com>2021-12-20 10:36:53 -0800
commitf201567153bb143c972545e611bdb6c0ef80d3d2 (patch)
treee9eefbd1a2b6ee326c33561f671a88c79a794e8a /Userland/Libraries
parent5a649d0fd5cbb42af31988fd4121adbfabf83696 (diff)
downloadserenity-f201567153bb143c972545e611bdb6c0ef80d3d2.zip
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.
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibGL/SoftwareRasterizer.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/Userland/Libraries/LibGL/SoftwareRasterizer.cpp b/Userland/Libraries/LibGL/SoftwareRasterizer.cpp
index d9c3c5b431..f59b8a4318 100644
--- a/Userland/Libraries/LibGL/SoftwareRasterizer.cpp
+++ b/Userland/Libraries/LibGL/SoftwareRasterizer.cpp
@@ -15,7 +15,7 @@ namespace GL {
using IntVector2 = Gfx::Vector2<int>;
using IntVector3 = Gfx::Vector3<int>;
-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];