mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	video_core/shader: Document sanitized MUL operation
This commit is contained in:
		
							parent
							
								
									443bb3d522
								
							
						
					
					
						commit
						e10b11a5d0
					
				
					 1 changed files with 8 additions and 0 deletions
				
			
		|  | @ -295,14 +295,22 @@ void JitShader::Compile_DestEnable(Instruction instr, Xmm src) { | |||
| } | ||||
| 
 | ||||
| void JitShader::Compile_SanitizedMul(Xmm src1, Xmm src2, Xmm scratch) { | ||||
|     // 0 * inf and inf * 0 in the PICA should return 0 instead of NaN. This can be implemented by
 | ||||
|     // checking for NaNs before and after the multiplication.  If the multiplication result is NaN
 | ||||
|     // where neither source was, this NaN was generated by a 0 * inf multiplication, and so the
 | ||||
|     // result should be transformed to 0 to match PICA fp rules.
 | ||||
| 
 | ||||
|     // Set scratch to mask of (src1 != NaN and src2 != NaN)
 | ||||
|     movaps(scratch, src1); | ||||
|     cmpordps(scratch, src2); | ||||
| 
 | ||||
|     mulps(src1, src2); | ||||
| 
 | ||||
|     // Set src2 to mask of (result == NaN)
 | ||||
|     movaps(src2, src1); | ||||
|     cmpunordps(src2, src2); | ||||
| 
 | ||||
|     // Clear components where scratch != src2 (i.e. if result is NaN where neither source was NaN)
 | ||||
|     xorps(scratch, src2); | ||||
|     andps(src1, scratch); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue