diff options
| author | 2018-08-22 00:25:46 -0400 | |
|---|---|---|
| committer | 2018-08-23 11:08:47 -0400 | |
| commit | 2a472ff54dae73d125a4b620036eccac20b918a7 (patch) | |
| tree | 2d9d9d488511a915d32eadad52c231b5ba2ca11a | |
| parent | gl_state: Update to handle stencil front/back face separately. (diff) | |
| download | yuzu-2a472ff54dae73d125a4b620036eccac20b918a7.tar.gz yuzu-2a472ff54dae73d125a4b620036eccac20b918a7.tar.xz yuzu-2a472ff54dae73d125a4b620036eccac20b918a7.zip | |
maxwell_3d: Update to include additional stencil registers.
| -rw-r--r-- | src/video_core/engines/maxwell_3d.h | 70 |
1 files changed, 50 insertions, 20 deletions
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index d03bc1c0c..92bfda053 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h | |||
| @@ -330,6 +330,17 @@ public: | |||
| 330 | Set = 0x150F, | 330 | Set = 0x150F, |
| 331 | }; | 331 | }; |
| 332 | 332 | ||
| 333 | enum class StencilOp : u32 { | ||
| 334 | Keep = 1, | ||
| 335 | Zero = 2, | ||
| 336 | Replace = 3, | ||
| 337 | Incr = 4, | ||
| 338 | Decr = 5, | ||
| 339 | Invert = 6, | ||
| 340 | IncrWrap = 7, | ||
| 341 | DecrWrap = 8, | ||
| 342 | }; | ||
| 343 | |||
| 333 | struct Cull { | 344 | struct Cull { |
| 334 | enum class FrontFace : u32 { | 345 | enum class FrontFace : u32 { |
| 335 | ClockWise = 0x0900, | 346 | ClockWise = 0x0900, |
| @@ -508,8 +519,16 @@ public: | |||
| 508 | 519 | ||
| 509 | float clear_color[4]; | 520 | float clear_color[4]; |
| 510 | float clear_depth; | 521 | float clear_depth; |
| 522 | INSERT_PADDING_WORDS(0x3); | ||
| 523 | s32 clear_stencil; | ||
| 524 | |||
| 525 | INSERT_PADDING_WORDS(0x6C); | ||
| 526 | |||
| 527 | s32 stencil_back_func_ref; | ||
| 528 | u32 stencil_back_mask; | ||
| 529 | u32 stencil_back_func_mask; | ||
| 511 | 530 | ||
| 512 | INSERT_PADDING_WORDS(0x93); | 531 | INSERT_PADDING_WORDS(0x20); |
| 513 | 532 | ||
| 514 | struct { | 533 | struct { |
| 515 | u32 address_high; | 534 | u32 address_high; |
| @@ -573,16 +592,14 @@ public: | |||
| 573 | u32 enable[NumRenderTargets]; | 592 | u32 enable[NumRenderTargets]; |
| 574 | } blend; | 593 | } blend; |
| 575 | 594 | ||
| 576 | struct { | 595 | u32 stencil_enable; |
| 577 | u32 enable; | 596 | StencilOp stencil_front_op_fail; |
| 578 | u32 front_op_fail; | 597 | StencilOp stencil_front_op_zfail; |
| 579 | u32 front_op_zfail; | 598 | StencilOp stencil_front_op_zpass; |
| 580 | u32 front_op_zpass; | 599 | ComparisonOp stencil_front_func_func; |
| 581 | u32 front_func_func; | 600 | s32 stencil_front_func_ref; |
| 582 | u32 front_func_ref; | 601 | u32 stencil_front_func_mask; |
| 583 | u32 front_func_mask; | 602 | u32 stencil_front_mask; |
| 584 | u32 front_mask; | ||
| 585 | } stencil; | ||
| 586 | 603 | ||
| 587 | INSERT_PADDING_WORDS(0x3); | 604 | INSERT_PADDING_WORDS(0x3); |
| 588 | 605 | ||
| @@ -626,13 +643,11 @@ public: | |||
| 626 | 643 | ||
| 627 | INSERT_PADDING_WORDS(0x5); | 644 | INSERT_PADDING_WORDS(0x5); |
| 628 | 645 | ||
| 629 | struct { | 646 | u32 stencil_two_side_enable; |
| 630 | u32 enable; | 647 | StencilOp stencil_back_op_fail; |
| 631 | u32 back_op_fail; | 648 | StencilOp stencil_back_op_zfail; |
| 632 | u32 back_op_zfail; | 649 | StencilOp stencil_back_op_zpass; |
| 633 | u32 back_op_zpass; | 650 | ComparisonOp stencil_back_func_func; |
| 634 | u32 back_func_func; | ||
| 635 | } stencil_two_side; | ||
| 636 | 651 | ||
| 637 | INSERT_PADDING_WORDS(0x17); | 652 | INSERT_PADDING_WORDS(0x17); |
| 638 | 653 | ||
| @@ -944,6 +959,10 @@ ASSERT_REG_POSITION(viewport, 0x300); | |||
| 944 | ASSERT_REG_POSITION(vertex_buffer, 0x35D); | 959 | ASSERT_REG_POSITION(vertex_buffer, 0x35D); |
| 945 | ASSERT_REG_POSITION(clear_color[0], 0x360); | 960 | ASSERT_REG_POSITION(clear_color[0], 0x360); |
| 946 | ASSERT_REG_POSITION(clear_depth, 0x364); | 961 | ASSERT_REG_POSITION(clear_depth, 0x364); |
| 962 | ASSERT_REG_POSITION(clear_stencil, 0x368); | ||
| 963 | ASSERT_REG_POSITION(stencil_back_func_ref, 0x3D5); | ||
| 964 | ASSERT_REG_POSITION(stencil_back_mask, 0x3D6); | ||
| 965 | ASSERT_REG_POSITION(stencil_back_func_mask, 0x3D7); | ||
| 947 | ASSERT_REG_POSITION(zeta, 0x3F8); | 966 | ASSERT_REG_POSITION(zeta, 0x3F8); |
| 948 | ASSERT_REG_POSITION(vertex_attrib_format[0], 0x458); | 967 | ASSERT_REG_POSITION(vertex_attrib_format[0], 0x458); |
| 949 | ASSERT_REG_POSITION(rt_control, 0x487); | 968 | ASSERT_REG_POSITION(rt_control, 0x487); |
| @@ -955,13 +974,24 @@ ASSERT_REG_POSITION(depth_write_enabled, 0x4BA); | |||
| 955 | ASSERT_REG_POSITION(d3d_cull_mode, 0x4C2); | 974 | ASSERT_REG_POSITION(d3d_cull_mode, 0x4C2); |
| 956 | ASSERT_REG_POSITION(depth_test_func, 0x4C3); | 975 | ASSERT_REG_POSITION(depth_test_func, 0x4C3); |
| 957 | ASSERT_REG_POSITION(blend, 0x4CF); | 976 | ASSERT_REG_POSITION(blend, 0x4CF); |
| 958 | ASSERT_REG_POSITION(stencil, 0x4E0); | 977 | ASSERT_REG_POSITION(stencil_enable, 0x4E0); |
| 978 | ASSERT_REG_POSITION(stencil_front_op_fail, 0x4E1); | ||
| 979 | ASSERT_REG_POSITION(stencil_front_op_zfail, 0x4E2); | ||
| 980 | ASSERT_REG_POSITION(stencil_front_op_zpass, 0x4E3); | ||
| 981 | ASSERT_REG_POSITION(stencil_front_func_func, 0x4E4); | ||
| 982 | ASSERT_REG_POSITION(stencil_front_func_ref, 0x4E5); | ||
| 983 | ASSERT_REG_POSITION(stencil_front_func_mask, 0x4E6); | ||
| 984 | ASSERT_REG_POSITION(stencil_front_mask, 0x4E7); | ||
| 959 | ASSERT_REG_POSITION(screen_y_control, 0x4EB); | 985 | ASSERT_REG_POSITION(screen_y_control, 0x4EB); |
| 960 | ASSERT_REG_POSITION(vb_element_base, 0x50D); | 986 | ASSERT_REG_POSITION(vb_element_base, 0x50D); |
| 961 | ASSERT_REG_POSITION(zeta_enable, 0x54E); | 987 | ASSERT_REG_POSITION(zeta_enable, 0x54E); |
| 962 | ASSERT_REG_POSITION(tsc, 0x557); | 988 | ASSERT_REG_POSITION(tsc, 0x557); |
| 963 | ASSERT_REG_POSITION(tic, 0x55D); | 989 | ASSERT_REG_POSITION(tic, 0x55D); |
| 964 | ASSERT_REG_POSITION(stencil_two_side, 0x565); | 990 | ASSERT_REG_POSITION(stencil_two_side_enable, 0x565); |
| 991 | ASSERT_REG_POSITION(stencil_back_op_fail, 0x566); | ||
| 992 | ASSERT_REG_POSITION(stencil_back_op_zfail, 0x567); | ||
| 993 | ASSERT_REG_POSITION(stencil_back_op_zpass, 0x568); | ||
| 994 | ASSERT_REG_POSITION(stencil_back_func_func, 0x569); | ||
| 965 | ASSERT_REG_POSITION(point_coord_replace, 0x581); | 995 | ASSERT_REG_POSITION(point_coord_replace, 0x581); |
| 966 | ASSERT_REG_POSITION(code_address, 0x582); | 996 | ASSERT_REG_POSITION(code_address, 0x582); |
| 967 | ASSERT_REG_POSITION(draw, 0x585); | 997 | ASSERT_REG_POSITION(draw, 0x585); |