gsdx: hidden option to better support dual context clut

Option is on by default. Just a safety net in case of regression

Fix clut issue on virtua fighter (SW) and harley davidson (SW/HW).
This commit is contained in:
Gregory Hainaut 2016-10-06 19:08:21 +02:00
parent 9cd4984f7c
commit c66004bbb2
3 changed files with 12 additions and 0 deletions

View File

@ -50,6 +50,7 @@ GSState::GSState()
m_NTSC_Saturation = theApp.GetConfigB("NTSC_Saturation"); m_NTSC_Saturation = theApp.GetConfigB("NTSC_Saturation");
m_userhacks_skipdraw = theApp.GetConfigB("UserHacks") ? theApp.GetConfigI("UserHacks_SkipDraw") : 0; m_userhacks_skipdraw = theApp.GetConfigB("UserHacks") ? theApp.GetConfigI("UserHacks_SkipDraw") : 0;
m_userhacks_auto_flush = theApp.GetConfigB("UserHacks") ? theApp.GetConfigB("UserHacks_AutoFlush") : 0; m_userhacks_auto_flush = theApp.GetConfigB("UserHacks") ? theApp.GetConfigB("UserHacks_AutoFlush") : 0;
m_clut_load_before_draw = theApp.GetConfigB("clut_load_before_draw");
s_n = 0; s_n = 0;
s_dump = theApp.GetConfigB("dump"); s_dump = theApp.GetConfigB("dump");
@ -1512,6 +1513,15 @@ void GSState::FlushPrim()
{ {
GL_REG("FlushPrim ctxt %d", PRIM->CTXT); GL_REG("FlushPrim ctxt %d", PRIM->CTXT);
// Some games (Harley Davidson/Virtua Fighter) do dirty trick with multiple contexts cluts
// In doubt, always reload the clut before a draw.
// Note: perf impact is likely slow enough as WriteTest will likely be false.
if (m_clut_load_before_draw) {
if (m_mem.m_clut.WriteTest(m_context->TEX0, m_env.TEXCLUT)) {
m_mem.m_clut.Write(m_context->TEX0, m_env.TEXCLUT);
}
}
GSVertex buff[2]; GSVertex buff[2];
s_n++; s_n++;

View File

@ -136,6 +136,7 @@ class GSState : public GSAlignedClass<32>
void (*m_irq)(); void (*m_irq)();
bool m_path3hack; bool m_path3hack;
bool m_init_read_fifo_supported; bool m_init_read_fifo_supported;
bool m_clut_load_before_draw;
struct GSTransferBuffer struct GSTransferBuffer
{ {

View File

@ -284,6 +284,7 @@ void GSdxApp::Init()
m_default_configuration["capture_threads"] = "4"; m_default_configuration["capture_threads"] = "4";
m_default_configuration["CaptureHeight"] = "480"; m_default_configuration["CaptureHeight"] = "480";
m_default_configuration["CaptureWidth"] = "640"; m_default_configuration["CaptureWidth"] = "640";
m_default_configuration["clut_load_before_draw"] = "1";
m_default_configuration["crc_hack_level"] = "3"; m_default_configuration["crc_hack_level"] = "3";
m_default_configuration["CrcHacksExclusions"] = ""; m_default_configuration["CrcHacksExclusions"] = "";
m_default_configuration["debug_glsl_shader"] = "0"; m_default_configuration["debug_glsl_shader"] = "0";