maxwell_3d: implement MME shadow RAM
This commit is contained in:
		| @@ -531,6 +531,13 @@ public: | ||||
|             Fill = 0x1b02, | ||||
|         }; | ||||
|  | ||||
|         enum class ShadowRamControl : u32 { | ||||
|             Track = 0, | ||||
|             TrackWithFilter = 1, | ||||
|             Passthrough = 2, | ||||
|             Replay = 3, | ||||
|         }; | ||||
|  | ||||
|         struct RenderTargetConfig { | ||||
|             u32 address_high; | ||||
|             u32 address_low; | ||||
| @@ -674,7 +681,9 @@ public: | ||||
|                     u32 bind; | ||||
|                 } macros; | ||||
|  | ||||
|                 INSERT_UNION_PADDING_WORDS(0x17); | ||||
|                 ShadowRamControl shadow_ram_control; | ||||
|  | ||||
|                 INSERT_UNION_PADDING_WORDS(0x16); | ||||
|  | ||||
|                 Upload::Registers upload; | ||||
|                 struct { | ||||
| @@ -1265,6 +1274,9 @@ public: | ||||
|         }; | ||||
|     } regs{}; | ||||
|  | ||||
|     /// Store temporary hw register values, used by some calls to restore state after a operation | ||||
|     Regs shadow_state; | ||||
|  | ||||
|     static_assert(sizeof(Regs) == Regs::NUM_REGS * sizeof(u32), "Maxwell3D Regs has wrong size"); | ||||
|     static_assert(std::is_trivially_copyable_v<Regs>, "Maxwell3D Regs must be trivially copyable"); | ||||
|  | ||||
| @@ -1458,6 +1470,7 @@ private: | ||||
|                   "Field " #field_name " has invalid position") | ||||
|  | ||||
| ASSERT_REG_POSITION(macros, 0x45); | ||||
| ASSERT_REG_POSITION(shadow_ram_control, 0x49); | ||||
| ASSERT_REG_POSITION(upload, 0x60); | ||||
| ASSERT_REG_POSITION(exec_upload, 0x6C); | ||||
| ASSERT_REG_POSITION(data_upload, 0x6D); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user