mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Merge pull request #593 from Subv/search_problem
Pica/VertexShader: Fixed LOOP with more than one iteration.
This commit is contained in:
		
						commit
						34f21334ad
					
				
					 1 changed files with 4 additions and 1 deletions
				
			
		|  | @ -90,6 +90,7 @@ struct VertexShaderState { | ||||||
|         u8 repeat_counter;  // How often to repeat until this call stack element is removed
 |         u8 repeat_counter;  // How often to repeat until this call stack element is removed
 | ||||||
|         u8 loop_increment;  // Which value to add to the loop counter after an iteration
 |         u8 loop_increment;  // Which value to add to the loop counter after an iteration
 | ||||||
|                             // TODO: Should this be a signed value? Does it even matter?
 |                             // TODO: Should this be a signed value? Does it even matter?
 | ||||||
|  |         u32 loop_address;   // The address where we'll return to after each loop iteration
 | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     // TODO: Is there a maximal size for this?
 |     // TODO: Is there a maximal size for this?
 | ||||||
|  | @ -115,6 +116,8 @@ static void ProcessShaderCode(VertexShaderState& state) { | ||||||
|                 if (top.repeat_counter-- == 0) { |                 if (top.repeat_counter-- == 0) { | ||||||
|                     state.program_counter = &shader_memory[top.return_address]; |                     state.program_counter = &shader_memory[top.return_address]; | ||||||
|                     state.call_stack.pop(); |                     state.call_stack.pop(); | ||||||
|  |                 } else { | ||||||
|  |                     state.program_counter = &shader_memory[top.loop_address]; | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 // TODO: Is "trying again" accurate to hardware?
 |                 // TODO: Is "trying again" accurate to hardware?
 | ||||||
|  | @ -129,7 +132,7 @@ static void ProcessShaderCode(VertexShaderState& state) { | ||||||
|         static auto call = [](VertexShaderState& state, u32 offset, u32 num_instructions, |         static auto call = [](VertexShaderState& state, u32 offset, u32 num_instructions, | ||||||
|                               u32 return_offset, u8 repeat_count, u8 loop_increment) { |                               u32 return_offset, u8 repeat_count, u8 loop_increment) { | ||||||
|             state.program_counter = &shader_memory[offset] - 1; // -1 to make sure when incrementing the PC we end up at the correct offset
 |             state.program_counter = &shader_memory[offset] - 1; // -1 to make sure when incrementing the PC we end up at the correct offset
 | ||||||
|             state.call_stack.push({ offset + num_instructions, return_offset, repeat_count, loop_increment }); |             state.call_stack.push({ offset + num_instructions, return_offset, repeat_count, loop_increment, offset }); | ||||||
|         }; |         }; | ||||||
|         u32 binary_offset = state.program_counter - shader_memory.data(); |         u32 binary_offset = state.program_counter - shader_memory.data(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue