From d42281ab7f0b424913ce91c92f12c0d012084ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 4 Nov 2021 13:41:28 +0100 Subject: [PATCH] DebugTools: account for underflow in FrameProfilerGL primitive clip ratio. The test added in the previous commit now passes. --- src/Magnum/DebugTools/FrameProfiler.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Magnum/DebugTools/FrameProfiler.cpp b/src/Magnum/DebugTools/FrameProfiler.cpp index 2ac005fe0..b5522560d 100644 --- a/src/Magnum/DebugTools/FrameProfiler.cpp +++ b/src/Magnum/DebugTools/FrameProfiler.cpp @@ -560,6 +560,13 @@ void FrameProfilerGL::setup(const Values values, const UnsignedInt maxFrameCount const auto input = static_cast(state)->clippingInputPrimitivesQueries[previous].result(); if(!input) return UnsignedLong{}; + /* If we have more output primitives than input, it's because + a triangle got split into multiple. To avoid an underflow, + return zero as well. A corresponding test case is in + FrameProfilerGLTest::primitiveClipRatioNegative(). */ + const auto output = static_cast(state)->clippingOutputPrimitivesQueries[previous].result(); + if(input < output) return UnsignedLong{}; + return 100000 - static_cast(state)->clippingOutputPrimitivesQueries[previous].result()*100000/input; }, _state.get()); _state->primitiveClipRatioIndex = index++;