Merge pull request #3644 from ReinUsesLisp/msaa
video_core: Add MSAA registers in 3D engine and TIC
This commit is contained in:
		| @@ -312,6 +312,35 @@ public: | |||||||
|             } |             } | ||||||
|         }; |         }; | ||||||
|  |  | ||||||
|  |         struct MsaaSampleLocation { | ||||||
|  |             union { | ||||||
|  |                 BitField<0, 4, u32> x0; | ||||||
|  |                 BitField<4, 4, u32> y0; | ||||||
|  |                 BitField<8, 4, u32> x1; | ||||||
|  |                 BitField<12, 4, u32> y1; | ||||||
|  |                 BitField<16, 4, u32> x2; | ||||||
|  |                 BitField<20, 4, u32> y2; | ||||||
|  |                 BitField<24, 4, u32> x3; | ||||||
|  |                 BitField<28, 4, u32> y3; | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             constexpr std::pair<u32, u32> Location(int index) const { | ||||||
|  |                 switch (index) { | ||||||
|  |                 case 0: | ||||||
|  |                     return {x0, y0}; | ||||||
|  |                 case 1: | ||||||
|  |                     return {x1, y1}; | ||||||
|  |                 case 2: | ||||||
|  |                     return {x2, y2}; | ||||||
|  |                 case 3: | ||||||
|  |                     return {x3, y3}; | ||||||
|  |                 default: | ||||||
|  |                     UNREACHABLE(); | ||||||
|  |                     return {0, 0}; | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }; | ||||||
|  |  | ||||||
|         enum class DepthMode : u32 { |         enum class DepthMode : u32 { | ||||||
|             MinusOneToOne = 0, |             MinusOneToOne = 0, | ||||||
|             ZeroToOne = 1, |             ZeroToOne = 1, | ||||||
| @@ -793,7 +822,13 @@ public: | |||||||
|  |  | ||||||
|                 u32 rt_separate_frag_data; |                 u32 rt_separate_frag_data; | ||||||
|  |  | ||||||
|                 INSERT_UNION_PADDING_WORDS(0xC); |                 INSERT_UNION_PADDING_WORDS(0x1); | ||||||
|  |  | ||||||
|  |                 u32 multisample_raster_enable; | ||||||
|  |                 u32 multisample_raster_samples; | ||||||
|  |                 std::array<u32, 4> multisample_sample_mask; | ||||||
|  |  | ||||||
|  |                 INSERT_UNION_PADDING_WORDS(0x5); | ||||||
|  |  | ||||||
|                 struct { |                 struct { | ||||||
|                     u32 address_high; |                     u32 address_high; | ||||||
| @@ -830,7 +865,16 @@ public: | |||||||
|  |  | ||||||
|                 std::array<VertexAttribute, NumVertexAttributes> vertex_attrib_format; |                 std::array<VertexAttribute, NumVertexAttributes> vertex_attrib_format; | ||||||
|  |  | ||||||
|                 INSERT_UNION_PADDING_WORDS(0xF); |                 std::array<MsaaSampleLocation, 4> multisample_sample_locations; | ||||||
|  |  | ||||||
|  |                 INSERT_UNION_PADDING_WORDS(0x2); | ||||||
|  |  | ||||||
|  |                 union { | ||||||
|  |                     BitField<0, 1, u32> enable; | ||||||
|  |                     BitField<4, 3, u32> target; | ||||||
|  |                 } multisample_coverage_to_color; | ||||||
|  |  | ||||||
|  |                 INSERT_UNION_PADDING_WORDS(0x8); | ||||||
|  |  | ||||||
|                 struct { |                 struct { | ||||||
|                     union { |                     union { | ||||||
| @@ -943,7 +987,7 @@ public: | |||||||
|  |  | ||||||
|                 CounterReset counter_reset; |                 CounterReset counter_reset; | ||||||
|  |  | ||||||
|                 INSERT_UNION_PADDING_WORDS(0x1); |                 u32 multisample_enable; | ||||||
|  |  | ||||||
|                 u32 zeta_enable; |                 u32 zeta_enable; | ||||||
|  |  | ||||||
| @@ -1007,7 +1051,11 @@ public: | |||||||
|  |  | ||||||
|                 float polygon_offset_units; |                 float polygon_offset_units; | ||||||
|  |  | ||||||
|                 INSERT_UNION_PADDING_WORDS(0x11); |                 INSERT_UNION_PADDING_WORDS(0x4); | ||||||
|  |  | ||||||
|  |                 Tegra::Texture::MsaaMode multisample_mode; | ||||||
|  |  | ||||||
|  |                 INSERT_UNION_PADDING_WORDS(0xC); | ||||||
|  |  | ||||||
|                 union { |                 union { | ||||||
|                     BitField<2, 1, u32> coord_origin; |                     BitField<2, 1, u32> coord_origin; | ||||||
| @@ -1507,12 +1555,17 @@ ASSERT_REG_POSITION(stencil_back_func_ref, 0x3D5); | |||||||
| ASSERT_REG_POSITION(stencil_back_mask, 0x3D6); | ASSERT_REG_POSITION(stencil_back_mask, 0x3D6); | ||||||
| ASSERT_REG_POSITION(stencil_back_func_mask, 0x3D7); | ASSERT_REG_POSITION(stencil_back_func_mask, 0x3D7); | ||||||
| ASSERT_REG_POSITION(color_mask_common, 0x3E4); | ASSERT_REG_POSITION(color_mask_common, 0x3E4); | ||||||
| ASSERT_REG_POSITION(rt_separate_frag_data, 0x3EB); |  | ||||||
| ASSERT_REG_POSITION(depth_bounds, 0x3E7); | ASSERT_REG_POSITION(depth_bounds, 0x3E7); | ||||||
|  | ASSERT_REG_POSITION(rt_separate_frag_data, 0x3EB); | ||||||
|  | ASSERT_REG_POSITION(multisample_raster_enable, 0x3ED); | ||||||
|  | ASSERT_REG_POSITION(multisample_raster_samples, 0x3EE); | ||||||
|  | ASSERT_REG_POSITION(multisample_sample_mask, 0x3EF); | ||||||
| ASSERT_REG_POSITION(zeta, 0x3F8); | ASSERT_REG_POSITION(zeta, 0x3F8); | ||||||
| ASSERT_REG_POSITION(clear_flags, 0x43E); | ASSERT_REG_POSITION(clear_flags, 0x43E); | ||||||
| ASSERT_REG_POSITION(fill_rectangle, 0x44F); | ASSERT_REG_POSITION(fill_rectangle, 0x44F); | ||||||
| ASSERT_REG_POSITION(vertex_attrib_format, 0x458); | ASSERT_REG_POSITION(vertex_attrib_format, 0x458); | ||||||
|  | ASSERT_REG_POSITION(multisample_sample_locations, 0x478); | ||||||
|  | ASSERT_REG_POSITION(multisample_coverage_to_color, 0x47E); | ||||||
| ASSERT_REG_POSITION(rt_control, 0x487); | ASSERT_REG_POSITION(rt_control, 0x487); | ||||||
| ASSERT_REG_POSITION(zeta_width, 0x48a); | ASSERT_REG_POSITION(zeta_width, 0x48a); | ||||||
| ASSERT_REG_POSITION(zeta_height, 0x48b); | ASSERT_REG_POSITION(zeta_height, 0x48b); | ||||||
| @@ -1545,11 +1598,12 @@ ASSERT_REG_POSITION(samplecnt_enable, 0x545); | |||||||
| ASSERT_REG_POSITION(point_size, 0x546); | ASSERT_REG_POSITION(point_size, 0x546); | ||||||
| ASSERT_REG_POSITION(point_sprite_enable, 0x548); | ASSERT_REG_POSITION(point_sprite_enable, 0x548); | ||||||
| ASSERT_REG_POSITION(counter_reset, 0x54C); | ASSERT_REG_POSITION(counter_reset, 0x54C); | ||||||
|  | ASSERT_REG_POSITION(multisample_enable, 0x54D); | ||||||
| ASSERT_REG_POSITION(zeta_enable, 0x54E); | ASSERT_REG_POSITION(zeta_enable, 0x54E); | ||||||
| ASSERT_REG_POSITION(multisample_control, 0x54F); | ASSERT_REG_POSITION(multisample_control, 0x54F); | ||||||
| ASSERT_REG_POSITION(condition, 0x554); | ASSERT_REG_POSITION(condition, 0x554); | ||||||
| ASSERT_REG_POSITION(tsc, 0x557); | ASSERT_REG_POSITION(tsc, 0x557); | ||||||
| ASSERT_REG_POSITION(polygon_offset_factor, 0x55b); | ASSERT_REG_POSITION(polygon_offset_factor, 0x55B); | ||||||
| ASSERT_REG_POSITION(tic, 0x55D); | ASSERT_REG_POSITION(tic, 0x55D); | ||||||
| ASSERT_REG_POSITION(stencil_two_side_enable, 0x565); | ASSERT_REG_POSITION(stencil_two_side_enable, 0x565); | ||||||
| ASSERT_REG_POSITION(stencil_back_op_fail, 0x566); | ASSERT_REG_POSITION(stencil_back_op_fail, 0x566); | ||||||
| @@ -1558,6 +1612,7 @@ ASSERT_REG_POSITION(stencil_back_op_zpass, 0x568); | |||||||
| ASSERT_REG_POSITION(stencil_back_func_func, 0x569); | ASSERT_REG_POSITION(stencil_back_func_func, 0x569); | ||||||
| ASSERT_REG_POSITION(framebuffer_srgb, 0x56E); | ASSERT_REG_POSITION(framebuffer_srgb, 0x56E); | ||||||
| ASSERT_REG_POSITION(polygon_offset_units, 0x56F); | ASSERT_REG_POSITION(polygon_offset_units, 0x56F); | ||||||
|  | ASSERT_REG_POSITION(multisample_mode, 0x574); | ||||||
| ASSERT_REG_POSITION(point_coord_replace, 0x581); | ASSERT_REG_POSITION(point_coord_replace, 0x581); | ||||||
| ASSERT_REG_POSITION(code_address, 0x582); | ASSERT_REG_POSITION(code_address, 0x582); | ||||||
| ASSERT_REG_POSITION(draw, 0x585); | ASSERT_REG_POSITION(draw, 0x585); | ||||||
|   | |||||||
| @@ -131,6 +131,20 @@ enum class SwizzleSource : u32 { | |||||||
|     OneFloat = 7, |     OneFloat = 7, | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | enum class MsaaMode : u32 { | ||||||
|  |     Msaa1x1 = 0, | ||||||
|  |     Msaa2x1 = 1, | ||||||
|  |     Msaa2x2 = 2, | ||||||
|  |     Msaa4x2 = 3, | ||||||
|  |     Msaa4x2_D3D = 4, | ||||||
|  |     Msaa2x1_D3D = 5, | ||||||
|  |     Msaa4x4 = 6, | ||||||
|  |     Msaa2x2_VC4 = 8, | ||||||
|  |     Msaa2x2_VC12 = 9, | ||||||
|  |     Msaa4x2_VC8 = 10, | ||||||
|  |     Msaa4x2_VC24 = 11, | ||||||
|  | }; | ||||||
|  |  | ||||||
| union TextureHandle { | union TextureHandle { | ||||||
|     TextureHandle(u32 raw) : raw{raw} {} |     TextureHandle(u32 raw) : raw{raw} {} | ||||||
|  |  | ||||||
| @@ -197,6 +211,7 @@ struct TICEntry { | |||||||
|     union { |     union { | ||||||
|         BitField<0, 4, u32> res_min_mip_level; |         BitField<0, 4, u32> res_min_mip_level; | ||||||
|         BitField<4, 4, u32> res_max_mip_level; |         BitField<4, 4, u32> res_max_mip_level; | ||||||
|  |         BitField<8, 4, MsaaMode> msaa_mode; | ||||||
|         BitField<12, 12, u32> min_lod_clamp; |         BitField<12, 12, u32> min_lod_clamp; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user