mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Perform the same checks on TexCopy params that SW does
This commit is contained in:
		
							parent
							
								
									91fad7010b
								
							
						
					
					
						commit
						f893daa4a2
					
				
					 1 changed files with 29 additions and 11 deletions
				
			
		|  | @ -7,6 +7,7 @@ | ||||||
| #include <tuple> | #include <tuple> | ||||||
| #include <utility> | #include <utility> | ||||||
| #include <glad/glad.h> | #include <glad/glad.h> | ||||||
|  | #include "common/alignment.h" | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
| #include "common/math_util.h" | #include "common/math_util.h" | ||||||
|  | @ -1013,25 +1014,42 @@ bool RasterizerOpenGL::AccelerateDisplayTransfer(const GPU::Regs::DisplayTransfe | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool RasterizerOpenGL::AccelerateTextureCopy(const GPU::Regs::DisplayTransferConfig& config) { | bool RasterizerOpenGL::AccelerateTextureCopy(const GPU::Regs::DisplayTransferConfig& config) { | ||||||
|     u32 input_width = config.texture_copy.input_width * 16; |     u32 copy_size = Common::AlignDown(config.texture_copy.size, 16); | ||||||
|  | 
 | ||||||
|  |     if (copy_size == 0) | ||||||
|  |         return false; | ||||||
|  | 
 | ||||||
|     u32 input_gap = config.texture_copy.input_gap * 16; |     u32 input_gap = config.texture_copy.input_gap * 16; | ||||||
|     u32 output_width = config.texture_copy.output_width * 16; |     u32 input_width = config.texture_copy.input_width * 16; | ||||||
|  |     if (input_width == 0) { | ||||||
|  |         if (input_gap == 0) { | ||||||
|  |             input_width = copy_size; | ||||||
|  |         } else { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     u32 output_gap = config.texture_copy.output_gap * 16; |     u32 output_gap = config.texture_copy.output_gap * 16; | ||||||
|  |     u32 output_width = config.texture_copy.output_width * 16; | ||||||
|  |     if (output_width == 0) { | ||||||
|  |         if (output_gap == 0) { | ||||||
|  |             output_width = copy_size; | ||||||
|  |         } else { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     if (config.texture_copy.size == 0) |     if (input_width >= copy_size) { | ||||||
|         return true; |         input_width = copy_size; | ||||||
| 
 |  | ||||||
|     if (input_width >= config.texture_copy.size) { |  | ||||||
|         input_width = config.texture_copy.size; |  | ||||||
|         input_gap = 0; |         input_gap = 0; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (output_width >= config.texture_copy.size) { |     if (output_width >= copy_size) { | ||||||
|         output_width = config.texture_copy.size; |         output_width = copy_size; | ||||||
|         output_gap = 0; |         output_gap = 0; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (input_width != output_width || config.texture_copy.size % input_width != 0) { |     if (input_width != output_width || copy_size % input_width != 0) { | ||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -1039,7 +1057,7 @@ bool RasterizerOpenGL::AccelerateTextureCopy(const GPU::Regs::DisplayTransferCon | ||||||
|     src_params.addr = config.GetPhysicalInputAddress(); |     src_params.addr = config.GetPhysicalInputAddress(); | ||||||
|     src_params.stride = input_width + input_gap; // stride in bytes
 |     src_params.stride = input_width + input_gap; // stride in bytes
 | ||||||
|     src_params.width = input_width;              // width in bytes
 |     src_params.width = input_width;              // width in bytes
 | ||||||
|     src_params.height = config.texture_copy.size / input_width; |     src_params.height = copy_size / input_width; | ||||||
|     src_params.size = ((src_params.height - 1) * src_params.stride) + src_params.width; |     src_params.size = ((src_params.height - 1) * src_params.stride) + src_params.width; | ||||||
|     src_params.end = src_params.addr + src_params.size; |     src_params.end = src_params.addr + src_params.size; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue