mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	GPU: Added surface copy registers to Fermi2D
This commit is contained in:
		
							parent
							
								
									b1109931b9
								
							
						
					
					
						commit
						378c881427
					
				| @ -6,8 +6,10 @@ | |||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
|  | #include "common/bit_field.h" | ||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  | #include "video_core/gpu.h" | ||||||
| #include "video_core/memory_manager.h" | #include "video_core/memory_manager.h" | ||||||
| 
 | 
 | ||||||
| namespace Tegra { | namespace Tegra { | ||||||
| @ -27,9 +29,59 @@ public: | |||||||
|     struct Regs { |     struct Regs { | ||||||
|         static constexpr size_t NUM_REGS = 0x258; |         static constexpr size_t NUM_REGS = 0x258; | ||||||
| 
 | 
 | ||||||
|  |         struct Surface { | ||||||
|  |             RenderTargetFormat format; | ||||||
|  |             BitField<0, 1, u32> linear; | ||||||
|  |             union { | ||||||
|  |                 BitField<0, 4, u32> block_depth; | ||||||
|  |                 BitField<4, 4, u32> block_height; | ||||||
|  |                 BitField<8, 4, u32> block_width; | ||||||
|  |             }; | ||||||
|  |             u32 depth; | ||||||
|  |             u32 layer; | ||||||
|  |             u32 pitch; | ||||||
|  |             u32 width; | ||||||
|  |             u32 height; | ||||||
|  |             u32 address_high; | ||||||
|  |             u32 address_low; | ||||||
|  | 
 | ||||||
|  |             GPUVAddr Address() const { | ||||||
|  |                 return static_cast<GPUVAddr>((static_cast<GPUVAddr>(address_high) << 32) | | ||||||
|  |                                              address_low); | ||||||
|  |             } | ||||||
|  |         }; | ||||||
|  |         static_assert(sizeof(Surface) == 0x28, "Surface has incorrect size"); | ||||||
|  | 
 | ||||||
|  |         enum class Operation : u32 { | ||||||
|  |             SrcCopyAnd = 0, | ||||||
|  |             ROPAnd = 1, | ||||||
|  |             Blend = 2, | ||||||
|  |             SrcCopy = 3, | ||||||
|  |             ROP = 4, | ||||||
|  |             SrcCopyPremult = 5, | ||||||
|  |             BlendPremult = 6, | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|         union { |         union { | ||||||
|             struct { |             struct { | ||||||
|                 INSERT_PADDING_WORDS(0x258); |                 INSERT_PADDING_WORDS(0x80); | ||||||
|  | 
 | ||||||
|  |                 Surface dst; | ||||||
|  | 
 | ||||||
|  |                 INSERT_PADDING_WORDS(2); | ||||||
|  | 
 | ||||||
|  |                 Surface src; | ||||||
|  | 
 | ||||||
|  |                 INSERT_PADDING_WORDS(0x15); | ||||||
|  | 
 | ||||||
|  |                 Operation operation; | ||||||
|  | 
 | ||||||
|  |                 INSERT_PADDING_WORDS(0x9); | ||||||
|  | 
 | ||||||
|  |                 // TODO(Subv): This is only a guess.
 | ||||||
|  |                 u32 trigger; | ||||||
|  | 
 | ||||||
|  |                 INSERT_PADDING_WORDS(0x1A3); | ||||||
|             }; |             }; | ||||||
|             std::array<u32, NUM_REGS> reg_array; |             std::array<u32, NUM_REGS> reg_array; | ||||||
|         }; |         }; | ||||||
| @ -42,6 +94,10 @@ public: | |||||||
|     static_assert(offsetof(Fermi2D::Regs, field_name) == position * 4,                             \ |     static_assert(offsetof(Fermi2D::Regs, field_name) == position * 4,                             \ | ||||||
|                   "Field " #field_name " has invalid position") |                   "Field " #field_name " has invalid position") | ||||||
| 
 | 
 | ||||||
|  | ASSERT_REG_POSITION(dst, 0x80); | ||||||
|  | ASSERT_REG_POSITION(src, 0x8C); | ||||||
|  | ASSERT_REG_POSITION(operation, 0xAB); | ||||||
|  | ASSERT_REG_POSITION(trigger, 0xB5); | ||||||
| #undef ASSERT_REG_POSITION | #undef ASSERT_REG_POSITION | ||||||
| 
 | 
 | ||||||
| } // namespace Engines
 | } // namespace Engines
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Subv
						Subv