[d3d8] Fix up swizzle for all opcodes requiring a replicate swizzle #4653
+18
−16
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #4113.
https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/d3d9types/ne-d3d9types-_d3dshader_instruction_opcode_type
The information in the docs isn't clear or complete, but it is at least clear that RSQ isn't the only opcode which requires the explicit use of a replicate swizzle for its inputs.
If the swizzle on inputs is somehow
.xyzw
/ D3DVS_NOSWIZZLE (although that is technically illegal in the context of the affected opcodes) it appears native d3d8 does indeed impose a replicate swizzle, as @AlpyneDreams has already determined when looking at Indiana Jones And The Emperor's Tomb, and also based on empirical evidence it appears.w
is the one that makes things look as expected, and in this case also fixes the missing fog in NFS Hot Pursuit 2.Needs testing to ensure nothing regresses otherwise, but once that is done, I'll undraft.