RSX : factorize DPH

This commit is contained in:
raven02 2015-05-23 00:17:46 +08:00 committed by vlj
parent 67e8e0a367
commit 79cb025d25
3 changed files with 4 additions and 1 deletions

View File

@ -7,6 +7,7 @@ enum class FUNCTION {
FUNCTION_DP2A, FUNCTION_DP2A,
FUNCTION_DP3, FUNCTION_DP3,
FUNCTION_DP4, FUNCTION_DP4,
FUNCTION_DPH,
FUNCTION_SFL, // Set zero FUNCTION_SFL, // Set zero
FUNCTION_STR, // Set One FUNCTION_STR, // Set One
FUNCTION_FRACT, FUNCTION_FRACT,

View File

@ -654,7 +654,7 @@ std::string VertexProgramDecompiler::Decompile()
case RSX_VEC_OPCODE_ADD: SetDSTVec("($0 + $2)"); break; case RSX_VEC_OPCODE_ADD: SetDSTVec("($0 + $2)"); break;
case RSX_VEC_OPCODE_MAD: SetDSTVec("($0 * $1 + $2)"); break; case RSX_VEC_OPCODE_MAD: SetDSTVec("($0 * $1 + $2)"); break;
case RSX_VEC_OPCODE_DP3: SetDSTVec(getFunction(FUNCTION::FUNCTION_DP3)); break; case RSX_VEC_OPCODE_DP3: SetDSTVec(getFunction(FUNCTION::FUNCTION_DP3)); break;
case RSX_VEC_OPCODE_DPH: SetDSTVec("dot(float4($0.xyz, 1.0), $1).xxxx"); break; case RSX_VEC_OPCODE_DPH: SetDSTVec(getFunction(FUNCTION::FUNCTION_DPH)); break;
case RSX_VEC_OPCODE_DP4: SetDSTVec(getFunction(FUNCTION::FUNCTION_DP4)); break; case RSX_VEC_OPCODE_DP4: SetDSTVec(getFunction(FUNCTION::FUNCTION_DP4)); break;
case RSX_VEC_OPCODE_DST: SetDSTVec("vec4(distance($0, $1))"); break; case RSX_VEC_OPCODE_DST: SetDSTVec("vec4(distance($0, $1))"); break;
case RSX_VEC_OPCODE_MIN: SetDSTVec("min($0, $1)"); break; case RSX_VEC_OPCODE_MIN: SetDSTVec("min($0, $1)"); break;

View File

@ -35,6 +35,8 @@ std::string GLVertexDecompilerThread::getFunction(FUNCTION f)
return "vec4(dot($0.xyz, $1.xyz))"; return "vec4(dot($0.xyz, $1.xyz))";
case FUNCTION::FUNCTION_DP4: case FUNCTION::FUNCTION_DP4:
return "vec4(dot($0, $1))"; return "vec4(dot($0, $1))";
case FUNCTION::FUNCTION_DPH:
return "vec4(dot(vec4($0.xyz, 1.0), $1))";
case FUNCTION::FUNCTION_SFL: case FUNCTION::FUNCTION_SFL:
return "vec4(0., 0., 0., 0.)"; return "vec4(0., 0., 0., 0.)";
case FUNCTION::FUNCTION_STR: case FUNCTION::FUNCTION_STR: