[PATCH 0/1] MR4177: gdiplus: Improve performance of units_to_pixels by not using division
Single float division (divss) is at least four time slower, than multiplication (mulss). More information: https://www.agner.org/optimize/instruction_tables.pdf The units_to_pixels was optimized to use only multiplication (mulss), and avoid using divisions (divss).  -- https://gitlab.winehq.org/wine/wine/-/merge_requests/4177
From: Bartosz Kosiorek <gang65(a)poczta.onet.pl> Single float division (divss) is at least four time slower, than multiplication (mulss). More information: https://www.agner.org/optimize/instruction_tables.pdf The units_to_pixels was optimized to use only multiplication (mulss), and avoid using divisions (divss). --- dlls/gdiplus/gdiplus.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/dlls/gdiplus/gdiplus.c b/dlls/gdiplus/gdiplus.c index a3c85986ffc..3c4ecdeab5f 100644 --- a/dlls/gdiplus/gdiplus.c +++ b/dlls/gdiplus/gdiplus.c @@ -36,7 +36,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus); static const REAL mm_per_inch = 25.4; +static const REAL inch_per_mm = 1.0 / 25.4; static const REAL point_per_inch = 72.0; +static const REAL inch_per_point = 1.0 / 72.0; static Status WINAPI NotificationHook(ULONG_PTR *token) { @@ -333,17 +335,17 @@ REAL units_to_pixels(REAL units, GpUnit unit, REAL dpi, BOOL printer_display) return units; case UnitDisplay: if (printer_display) - return units * dpi / 100.0; + return units * dpi * 0.01f; else return units; case UnitPoint: - return units * dpi / point_per_inch; + return units * dpi * inch_per_point; case UnitInch: return units * dpi; case UnitDocument: - return units * dpi / 300.0; /* Per MSDN */ + return units * dpi * (1.0f / 300.0f); /* Per MSDN */ case UnitMillimeter: - return units * dpi / mm_per_inch; + return units * dpi * inch_per_mm; default: FIXME("Unhandled unit type: %d\n", unit); return 0; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/4177
This merge request was approved by Esme Povirk. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/4177
participants (3)
-
Bartosz Kosiorek -
Bartosz Kosiorek (@gang65) -
Esme Povirk (@madewokherd)