diff --git a/src/core/HLE/D3D8/XbVertexShader.cpp b/src/core/HLE/D3D8/XbVertexShader.cpp index b96d79194..ac50c8ecb 100644 --- a/src/core/HLE/D3D8/XbVertexShader.cpp +++ b/src/core/HLE/D3D8/XbVertexShader.cpp @@ -1519,9 +1519,11 @@ static boolean VshConvertShader(VSH_XBOX_SHADER *pShader, // The PC shader assembler doesn't like masks on scalar registers VshSetOutputMask(&pIntermediate->Output, TRUE, TRUE, TRUE, TRUE); - // Fix when mad to a scaler input does not use a replicate swizzle - // Test case: Panzer Dragoon Orta - if (pIntermediate->InstructionType == IMD_MAC && pIntermediate->MAC == MAC_MAD) { + // Fix when mad or mov to a scaler input does not use a replicate swizzle + // MAD Test case: Panzer Dragoon Orta + // MOV Test case: DOA3 + if ((pIntermediate->InstructionType == IMD_MAC && pIntermediate->MAC == MAC_MAD) || + (pIntermediate->InstructionType == IMD_MAC && pIntermediate->MAC == MAC_MOV)) { // Clear all but the first swizzle for each parameter // TODO: Is this sufficient? Perhaps we need to be smart about which swizzle to select for (int param = 0; param < 3; param++) {