From 1c21ea955c54f4b59fbc45c05215849bbc650874 Mon Sep 17 00:00:00 2001 From: Gregory Hainaut Date: Fri, 20 May 2016 19:45:20 +0200 Subject: [PATCH] gsdx ogl: HLE channel effect for terminator 3 Unfortunately I think the game uses another similar effects --- plugins/GSdx/GSRendererOGL.cpp | 10 ++++++++-- plugins/GSdx/res/glsl/tfx_fs.glsl | 10 ++++++++++ plugins/GSdx/res/glsl_source.h | 10 ++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/plugins/GSdx/GSRendererOGL.cpp b/plugins/GSdx/GSRendererOGL.cpp index bc18fbade1..9ba98aed4b 100644 --- a/plugins/GSdx/GSRendererOGL.cpp +++ b/plugins/GSdx/GSRendererOGL.cpp @@ -718,8 +718,14 @@ void GSRendererOGL::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour } else if (m_context->CLAMP.WMS == 3 && ((m_context->CLAMP.MINU & 0x8) == 0)) { // Read either Red or Green. Let's go for Red ;) // Pop - GL_INS("Red channel"); - ps_sel.channel = 1; + if (m_context->FRAME.FBMSK == 0xF0FFFFFF) { + GL_INS("Terminator 3 G4B4 Channel"); + ps_sel.channel = 6; + m_context->FRAME.FBMSK = 0x00FFFFFF; + } else { + GL_INS("Red channel"); + ps_sel.channel = 1; + } } else { GL_INS("channel not supported"); m_channel_shuffle = false; diff --git a/plugins/GSdx/res/glsl/tfx_fs.glsl b/plugins/GSdx/res/glsl/tfx_fs.glsl index 22e4fdb71e..de22f9a129 100644 --- a/plugins/GSdx/res/glsl/tfx_fs.glsl +++ b/plugins/GSdx/res/glsl/tfx_fs.glsl @@ -345,6 +345,14 @@ vec4 fetch_rgb() return c * 255.0f; } +vec4 fetch_g4b4() +{ + vec4 rt = fetch_raw_color() * 255.0f; + uint g4 = (uint(rt.g) >> 4u) & 0x0Fu; + uint b4 = (uint(rt.b) << 4u) & 0xF0u; + return vec4(float(g4 | b4)); +} + ////////////////////////////////////////////////////////////////////// vec4 sample_color(vec2 st) @@ -514,6 +522,8 @@ vec4 ps_color() vec4 T = fetch_blue(); #elif PS_CHANNEL_FETCH == 4 vec4 T = fetch_alpha(); +#elif PS_CHANNEL_FETCH == 6 + vec4 T = fetch_g4b4(); #elif PS_CHANNEL_FETCH == 7 vec4 T = fetch_rgb(); #elif PS_DEPTH_FMT > 0 diff --git a/plugins/GSdx/res/glsl_source.h b/plugins/GSdx/res/glsl_source.h index 7225be1046..339a4aae82 100644 --- a/plugins/GSdx/res/glsl_source.h +++ b/plugins/GSdx/res/glsl_source.h @@ -1189,6 +1189,14 @@ static const char* const tfx_fs_all_glsl = " return c * 255.0f;\n" "}\n" "\n" + "vec4 fetch_g4b4()\n" + "{\n" + " vec4 rt = fetch_raw_color() * 255.0f;\n" + " uint g4 = (uint(rt.g) >> 4u) & 0x0Fu;\n" + " uint b4 = (uint(rt.b) << 4u) & 0xF0u;\n" + " return vec4(float(g4 | b4));\n" + "}\n" + "\n" "//////////////////////////////////////////////////////////////////////\n" "\n" "vec4 sample_color(vec2 st)\n" @@ -1358,6 +1366,8 @@ static const char* const tfx_fs_all_glsl = " vec4 T = fetch_blue();\n" "#elif PS_CHANNEL_FETCH == 4\n" " vec4 T = fetch_alpha();\n" + "#elif PS_CHANNEL_FETCH == 6\n" + " vec4 T = fetch_g4b4();\n" "#elif PS_CHANNEL_FETCH == 7\n" " vec4 T = fetch_rgb();\n" "#elif PS_DEPTH_FMT > 0\n"