gsdx ogl: HLE channel effect for terminator 3

Unfortunately I think the game uses another similar effects
This commit is contained in:
Gregory Hainaut 2016-05-20 19:45:20 +02:00
parent 247d33a627
commit 1c21ea955c
3 changed files with 28 additions and 2 deletions

View File

@ -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;

View File

@ -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

View File

@ -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"