From 5c7d9d08e2e0b507d2dbc43b10d78e459697ca61 Mon Sep 17 00:00:00 2001 From: Gregory Hainaut Date: Fri, 19 May 2017 10:41:49 +0200 Subject: [PATCH] gsdx: defer init of GSUtil global object Close #1935 --- plugins/GSdx/GS.cpp | 1 + plugins/GSdx/GSUtil.cpp | 8 +++++++- plugins/GSdx/GSUtil.h | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/plugins/GSdx/GS.cpp b/plugins/GSdx/GS.cpp index 2e5e763396bd9..cb4d5e8e614b5 100644 --- a/plugins/GSdx/GS.cpp +++ b/plugins/GSdx/GS.cpp @@ -128,6 +128,7 @@ EXPORT_C_(int) GSinit() // const type qualifier from all the affected variables. theApp.Init(); + GSUtil::Init(); GSBlock::InitVectors(); GSClut::InitVectors(); #ifdef ENABLE_OPENCL diff --git a/plugins/GSdx/GSUtil.cpp b/plugins/GSdx/GSUtil.cpp index df2fddd43fa16..23f919f44cac8 100644 --- a/plugins/GSdx/GSUtil.cpp +++ b/plugins/GSdx/GSUtil.cpp @@ -102,7 +102,8 @@ static class GSUtilMaps uint32 CompatibleBitsField[64][2]; uint32 SharedBitsField[64][2]; - GSUtilMaps() + // Defer init to avoid AVX2 illegal instructions + void Init() { PrimClassField[GS_POINTLIST] = GS_POINT_CLASS; PrimClassField[GS_LINELIST] = GS_LINE_CLASS; @@ -163,6 +164,11 @@ static class GSUtilMaps } s_maps; +void GSUtil::Init() +{ + s_maps.Init(); +} + GS_PRIM_CLASS GSUtil::GetPrimClass(uint32 prim) { return (GS_PRIM_CLASS)s_maps.PrimClassField[prim]; diff --git a/plugins/GSdx/GSUtil.h b/plugins/GSdx/GSUtil.h index 867e901a78af0..035d62bc3a186 100644 --- a/plugins/GSdx/GSUtil.h +++ b/plugins/GSdx/GSUtil.h @@ -37,6 +37,8 @@ struct OCLDeviceDesc class GSUtil { public: + static void Init(); + static const char* GetLibName(); static GS_PRIM_CLASS GetPrimClass(uint32 prim);