diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp index 55bdf3dfea..86ecf89a7c 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.cpp +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.cpp @@ -76,7 +76,7 @@ static char text[16384]; char *GenerateLightShader(char* p, int index, const LitChannel& chan, const char* dest, int coloralpha); -const char *GenerateVertexShader(u32 components) +const char *GenerateVertexShader(u32 components, bool D3D) { text[sizeof(text) - 1] = 0x7C; // canary DVSTARTPROFILE(); @@ -436,25 +436,13 @@ const char *GenerateVertexShader(u32 components) WRITE(p, "o.tex3.w = o.pos.w;\n"); } -// if (bpmem.fog.c_proj_fsel.fsel != 0) { -// switch (bpmem.fog.c_proj_fsel.fsel) { -// case 1: // linear -// break; -// case 4: // exp -// break; -// case 5: // exp2 -// break; -// case 6: // backward exp -// break; -// case 7: // backward exp2 -// break; -// } -// -// WRITE(p, "o.fog = o.pos.z/o.pos.w;\n"); -// } - - // scale to gl clip space - WRITE(p, "o.pos.z = (o.pos.z * 2.0f) + o.pos.w;\n"); + // Why are we adding w to z? + if (!D3D) { + // scale to gl clip space + WRITE(p, "o.pos.z = (o.pos.z * 2.0f) + o.pos.w;\n"); + } else { + WRITE(p, "o.pos.z = o.pos.z + o.pos.w;\n"); + } WRITE(p, "return o;\n}\n"); diff --git a/Source/Core/VideoCommon/Src/VertexShaderGen.h b/Source/Core/VideoCommon/Src/VertexShaderGen.h index 6022e34c54..482c6a68a7 100644 --- a/Source/Core/VideoCommon/Src/VertexShaderGen.h +++ b/Source/Core/VideoCommon/Src/VertexShaderGen.h @@ -99,7 +99,7 @@ public: } }; -const char *GenerateVertexShader(u32 components); +const char *GenerateVertexShader(u32 components, bool D3D); void GetVertexShaderId(VERTEXSHADERUID& vid, u32 components); #endif // GCOGL_VERTEXSHADER_H diff --git a/Source/Plugins/Plugin_VideoDX9/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoDX9/Src/VertexShaderCache.cpp index e2d178c16b..42f5bac0dc 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/VertexShaderCache.cpp @@ -86,7 +86,7 @@ void VertexShaderCache::SetShader(u32 components) } bool HLSL = false; - const char *code = GenerateVertexShader(components); + const char *code = GenerateVertexShader(components, true); LPDIRECT3DVERTEXSHADER9 shader = HLSL ? D3D::CompileVertexShader(code, (int)strlen(code), false) : CompileCgShader(code); if (shader) { diff --git a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp index 8ad342127b..2212f2591d 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/VertexShaderCache.cpp @@ -85,7 +85,7 @@ VERTEXSHADER* VertexShaderCache::GetShader(u32 components) } VSCacheEntry& entry = vshaders[uid]; - const char *code = GenerateVertexShader(components); + const char *code = GenerateVertexShader(components, false); #if defined(_DEBUG) || defined(DEBUGFAST) if (g_Config.iLog & CONF_SAVESHADERS && code) {