1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:17:36 +00:00

LibSoftGPU: Update coverage mask bits during rasterization

We were not updating `coverage_bits` causing us to perform just a
little bit more work than strictly necessary.
This commit is contained in:
Jelle Raaijmakers 2022-05-08 01:58:57 +02:00 committed by Linus Groh
parent 54a24fe45a
commit 7906ada015

View file

@ -40,7 +40,6 @@ using AK::SIMD::i32x4;
using AK::SIMD::load4_masked; using AK::SIMD::load4_masked;
using AK::SIMD::maskbits; using AK::SIMD::maskbits;
using AK::SIMD::maskcount; using AK::SIMD::maskcount;
using AK::SIMD::none;
using AK::SIMD::store4_masked; using AK::SIMD::store4_masked;
using AK::SIMD::to_f32x4; using AK::SIMD::to_f32x4;
using AK::SIMD::to_u32x4; using AK::SIMD::to_u32x4;
@ -329,15 +328,13 @@ void Device::rasterize_triangle(Triangle const& triangle)
&& quad.screen_coordinates.x() <= render_bounds_right && quad.screen_coordinates.x() <= render_bounds_right
&& quad.screen_coordinates.y() >= render_bounds_top && quad.screen_coordinates.y() >= render_bounds_top
&& quad.screen_coordinates.y() <= render_bounds_bottom; && quad.screen_coordinates.y() <= render_bounds_bottom;
auto coverage_bits = maskbits(quad.mask);
if (none(quad.mask)) if (coverage_bits == 0)
continue; continue;
INCREASE_STATISTICS_COUNTER(g_num_quads, 1); INCREASE_STATISTICS_COUNTER(g_num_quads, 1);
INCREASE_STATISTICS_COUNTER(g_num_pixels, maskcount(quad.mask)); INCREASE_STATISTICS_COUNTER(g_num_pixels, maskcount(quad.mask));
int coverage_bits = maskbits(quad.mask);
// Stencil testing // Stencil testing
GPU::StencilType* stencil_ptrs[4]; GPU::StencilType* stencil_ptrs[4];
i32x4 stencil_value; i32x4 stencil_value;
@ -391,7 +388,8 @@ void Device::rasterize_triangle(Triangle const& triangle)
// Update coverage mask + early quad rejection // Update coverage mask + early quad rejection
quad.mask &= stencil_test_passed; quad.mask &= stencil_test_passed;
if (none(quad.mask)) coverage_bits = maskbits(quad.mask);
if (coverage_bits == 0)
continue; continue;
} }
@ -489,7 +487,8 @@ void Device::rasterize_triangle(Triangle const& triangle)
// Update coverage mask + early quad rejection // Update coverage mask + early quad rejection
quad.mask &= depth_test_passed; quad.mask &= depth_test_passed;
if (none(quad.mask)) coverage_bits = maskbits(quad.mask);
if (coverage_bits == 0)
continue; continue;
} }