From 319b3dabdf67b1d1ee273ce4dcf79d60705a2ad3 Mon Sep 17 00:00:00 2001
From: Akash <ssj2akash@gmail.com>
Date: Mon, 13 Feb 2017 17:22:51 +0530
Subject: [PATCH] GSdx-Windows: Automatic CRC hack level selection

Default to "Partial" CRC hack level when the GPU's best renderer is determined as the OpenGL hardware renderer.
---
 plugins/GSdx/GS.cpp            |  4 ++++
 plugins/GSdx/GSSettingsDlg.cpp | 13 ++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/plugins/GSdx/GS.cpp b/plugins/GSdx/GS.cpp
index 13d9104688..1dd7492efe 100644
--- a/plugins/GSdx/GS.cpp
+++ b/plugins/GSdx/GS.cpp
@@ -523,7 +523,11 @@ EXPORT_C_(int) GSopen2(void** dsp, uint32 flags)
 		renderer = static_cast<GSRendererType>(theApp.GetConfigI("Renderer"));
 #ifdef _WIN32
 		if (renderer == GSRendererType::Default)
+		{
 			renderer = GSUtil::GetBestRenderer();
+			if (renderer == GSRendererType::OGL_HW)
+				theApp.SetConfig("crc_hack_level", static_cast<int>(CRCHackLevel::Partial));
+		}
 #endif
 	}
 	else if (stored_toggle_state != toggle_state)
diff --git a/plugins/GSdx/GSSettingsDlg.cpp b/plugins/GSdx/GSSettingsDlg.cpp
index 848a25593f..73b2805029 100644
--- a/plugins/GSdx/GSSettingsDlg.cpp
+++ b/plugins/GSdx/GSSettingsDlg.cpp
@@ -360,7 +360,18 @@ void GSSettingsDlg::UpdateRenderers()
 	else
 	{
 		GSRendererType ini_renderer = GSRendererType(theApp.GetConfigI("Renderer"));
-		renderer_setting = (ini_renderer == GSRendererType::Undefined) ? GSUtil::GetBestRenderer() : ini_renderer;
+
+		if (ini_renderer == GSRendererType::Undefined)
+		{
+			renderer_setting = GSUtil::GetBestRenderer();
+
+			if(renderer_setting == GSRendererType::OGL_HW)
+				theApp.SetConfig("crc_hack_level", static_cast<int>(CRCHackLevel::Partial));
+		}
+		else
+		{
+			renderer_setting = ini_renderer;
+		}
 	}
 
 	GSRendererType renderer_sel = GSRendererType::Default;