summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-01-22 04:14:29 -0300
committerGravatar ReinUsesLisp2019-01-22 04:14:29 -0300
commit9a82dec74a1f2059a18a52cf5c6b61b31617a6be (patch)
tree0ad83c6ebeb8bf17065fa5dee99ae40f0ac68df4 /src
parentMerge pull request #2035 from lioncash/fwd-decl (diff)
downloadyuzu-9a82dec74a1f2059a18a52cf5c6b61b31617a6be.tar.gz
yuzu-9a82dec74a1f2059a18a52cf5c6b61b31617a6be.tar.xz
yuzu-9a82dec74a1f2059a18a52cf5c6b61b31617a6be.zip
maxwell_3d: Set rt_separate_frag_data to 1 by default
Commercial games assume that this value is 1 but they never set it. On the other hand nouveau manually sets this register. On ConfigureFramebuffers we were asserting for what we are actually implementing (according to envytools).
Diffstat (limited to 'src')
-rw-r--r--src/video_core/engines/maxwell_3d.cpp5
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp5
2 files changed, 6 insertions, 4 deletions
diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp
index d64a5080b..a388b3944 100644
--- a/src/video_core/engines/maxwell_3d.cpp
+++ b/src/video_core/engines/maxwell_3d.cpp
@@ -37,6 +37,7 @@ void Maxwell3D::InitializeRegisterDefaults() {
37 regs.viewports[viewport].depth_range_near = 0.0f; 37 regs.viewports[viewport].depth_range_near = 0.0f;
38 regs.viewports[viewport].depth_range_far = 1.0f; 38 regs.viewports[viewport].depth_range_far = 1.0f;
39 } 39 }
40
40 // Doom and Bomberman seems to use the uninitialized registers and just enable blend 41 // Doom and Bomberman seems to use the uninitialized registers and just enable blend
41 // so initialize blend registers with sane values 42 // so initialize blend registers with sane values
42 regs.blend.equation_rgb = Regs::Blend::Equation::Add; 43 regs.blend.equation_rgb = Regs::Blend::Equation::Add;
@@ -66,6 +67,7 @@ void Maxwell3D::InitializeRegisterDefaults() {
66 regs.stencil_back_func_func = Regs::ComparisonOp::Always; 67 regs.stencil_back_func_func = Regs::ComparisonOp::Always;
67 regs.stencil_back_func_mask = 0xFFFFFFFF; 68 regs.stencil_back_func_mask = 0xFFFFFFFF;
68 regs.stencil_back_mask = 0xFFFFFFFF; 69 regs.stencil_back_mask = 0xFFFFFFFF;
70
69 // TODO(Rodrigo): Most games do not set a point size. I think this is a case of a 71 // TODO(Rodrigo): Most games do not set a point size. I think this is a case of a
70 // register carrying a default value. Assume it's OpenGL's default (1). 72 // register carrying a default value. Assume it's OpenGL's default (1).
71 regs.point_size = 1.0f; 73 regs.point_size = 1.0f;
@@ -78,6 +80,9 @@ void Maxwell3D::InitializeRegisterDefaults() {
78 regs.color_mask[color_mask].B.Assign(1); 80 regs.color_mask[color_mask].B.Assign(1);
79 regs.color_mask[color_mask].A.Assign(1); 81 regs.color_mask[color_mask].A.Assign(1);
80 } 82 }
83
84 // Commercial games seem to assume this value is enabled and nouveau sets this value manually.
85 regs.rt_separate_frag_data = 1;
81} 86}
82 87
83void Maxwell3D::CallMacroMethod(u32 method, std::vector<u32> parameters) { 88void Maxwell3D::CallMacroMethod(u32 method, std::vector<u32> parameters) {
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 2bf086902..d8e9df5db 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -509,10 +509,7 @@ void RasterizerOpenGL::ConfigureFramebuffers(OpenGLState& current_state, bool us
509 depth_surface = res_cache.GetDepthBufferSurface(preserve_contents); 509 depth_surface = res_cache.GetDepthBufferSurface(preserve_contents);
510 } 510 }
511 511
512 // TODO(bunnei): Figure out how the below register works. According to envytools, this should be 512 UNIMPLEMENTED_IF(regs.rt_separate_frag_data == 0);
513 // used to enable multiple render targets. However, it is left unset on all games that I have
514 // tested.
515 UNIMPLEMENTED_IF(regs.rt_separate_frag_data != 0);
516 513
517 // Bind the framebuffer surfaces 514 // Bind the framebuffer surfaces
518 current_state.framebuffer_srgb.enabled = regs.framebuffer_srgb != 0; 515 current_state.framebuffer_srgb.enabled = regs.framebuffer_srgb != 0;