summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2018-08-22 00:25:46 -0400
committerGravatar bunnei2018-08-23 11:08:47 -0400
commit2a472ff54dae73d125a4b620036eccac20b918a7 (patch)
tree2d9d9d488511a915d32eadad52c231b5ba2ca11a /src
parentgl_state: Update to handle stencil front/back face separately. (diff)
downloadyuzu-2a472ff54dae73d125a4b620036eccac20b918a7.tar.gz
yuzu-2a472ff54dae73d125a4b620036eccac20b918a7.tar.xz
yuzu-2a472ff54dae73d125a4b620036eccac20b918a7.zip
maxwell_3d: Update to include additional stencil registers.
Diffstat (limited to '')
-rw-r--r--src/video_core/engines/maxwell_3d.h70
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);
944ASSERT_REG_POSITION(vertex_buffer, 0x35D); 959ASSERT_REG_POSITION(vertex_buffer, 0x35D);
945ASSERT_REG_POSITION(clear_color[0], 0x360); 960ASSERT_REG_POSITION(clear_color[0], 0x360);
946ASSERT_REG_POSITION(clear_depth, 0x364); 961ASSERT_REG_POSITION(clear_depth, 0x364);
962ASSERT_REG_POSITION(clear_stencil, 0x368);
963ASSERT_REG_POSITION(stencil_back_func_ref, 0x3D5);
964ASSERT_REG_POSITION(stencil_back_mask, 0x3D6);
965ASSERT_REG_POSITION(stencil_back_func_mask, 0x3D7);
947ASSERT_REG_POSITION(zeta, 0x3F8); 966ASSERT_REG_POSITION(zeta, 0x3F8);
948ASSERT_REG_POSITION(vertex_attrib_format[0], 0x458); 967ASSERT_REG_POSITION(vertex_attrib_format[0], 0x458);
949ASSERT_REG_POSITION(rt_control, 0x487); 968ASSERT_REG_POSITION(rt_control, 0x487);
@@ -955,13 +974,24 @@ ASSERT_REG_POSITION(depth_write_enabled, 0x4BA);
955ASSERT_REG_POSITION(d3d_cull_mode, 0x4C2); 974ASSERT_REG_POSITION(d3d_cull_mode, 0x4C2);
956ASSERT_REG_POSITION(depth_test_func, 0x4C3); 975ASSERT_REG_POSITION(depth_test_func, 0x4C3);
957ASSERT_REG_POSITION(blend, 0x4CF); 976ASSERT_REG_POSITION(blend, 0x4CF);
958ASSERT_REG_POSITION(stencil, 0x4E0); 977ASSERT_REG_POSITION(stencil_enable, 0x4E0);
978ASSERT_REG_POSITION(stencil_front_op_fail, 0x4E1);
979ASSERT_REG_POSITION(stencil_front_op_zfail, 0x4E2);
980ASSERT_REG_POSITION(stencil_front_op_zpass, 0x4E3);
981ASSERT_REG_POSITION(stencil_front_func_func, 0x4E4);
982ASSERT_REG_POSITION(stencil_front_func_ref, 0x4E5);
983ASSERT_REG_POSITION(stencil_front_func_mask, 0x4E6);
984ASSERT_REG_POSITION(stencil_front_mask, 0x4E7);
959ASSERT_REG_POSITION(screen_y_control, 0x4EB); 985ASSERT_REG_POSITION(screen_y_control, 0x4EB);
960ASSERT_REG_POSITION(vb_element_base, 0x50D); 986ASSERT_REG_POSITION(vb_element_base, 0x50D);
961ASSERT_REG_POSITION(zeta_enable, 0x54E); 987ASSERT_REG_POSITION(zeta_enable, 0x54E);
962ASSERT_REG_POSITION(tsc, 0x557); 988ASSERT_REG_POSITION(tsc, 0x557);
963ASSERT_REG_POSITION(tic, 0x55D); 989ASSERT_REG_POSITION(tic, 0x55D);
964ASSERT_REG_POSITION(stencil_two_side, 0x565); 990ASSERT_REG_POSITION(stencil_two_side_enable, 0x565);
991ASSERT_REG_POSITION(stencil_back_op_fail, 0x566);
992ASSERT_REG_POSITION(stencil_back_op_zfail, 0x567);
993ASSERT_REG_POSITION(stencil_back_op_zpass, 0x568);
994ASSERT_REG_POSITION(stencil_back_func_func, 0x569);
965ASSERT_REG_POSITION(point_coord_replace, 0x581); 995ASSERT_REG_POSITION(point_coord_replace, 0x581);
966ASSERT_REG_POSITION(code_address, 0x582); 996ASSERT_REG_POSITION(code_address, 0x582);
967ASSERT_REG_POSITION(draw, 0x585); 997ASSERT_REG_POSITION(draw, 0x585);