summaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/engines/maxwell_3d.h10
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp18
2 files changed, 22 insertions, 6 deletions
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h
index 4f137e693..c5dcdeb31 100644
--- a/src/video_core/engines/maxwell_3d.h
+++ b/src/video_core/engines/maxwell_3d.h
@@ -879,7 +879,13 @@ public:
879 879
880 Cull cull; 880 Cull cull;
881 881
882 INSERT_PADDING_WORDS(0x28); 882 u32 pixel_center_integer;
883
884 INSERT_PADDING_WORDS(0x1);
885
886 u32 viewport_transform_enabled;
887
888 INSERT_PADDING_WORDS(0x25);
883 889
884 struct { 890 struct {
885 u32 enable; 891 u32 enable;
@@ -1188,6 +1194,8 @@ ASSERT_REG_POSITION(primitive_restart, 0x591);
1188ASSERT_REG_POSITION(index_array, 0x5F2); 1194ASSERT_REG_POSITION(index_array, 0x5F2);
1189ASSERT_REG_POSITION(instanced_arrays, 0x620); 1195ASSERT_REG_POSITION(instanced_arrays, 0x620);
1190ASSERT_REG_POSITION(cull, 0x646); 1196ASSERT_REG_POSITION(cull, 0x646);
1197ASSERT_REG_POSITION(pixel_center_integer, 0x649);
1198ASSERT_REG_POSITION(viewport_transform_enabled, 0x64B);
1191ASSERT_REG_POSITION(logic_op, 0x671); 1199ASSERT_REG_POSITION(logic_op, 0x671);
1192ASSERT_REG_POSITION(clear_buffers, 0x674); 1200ASSERT_REG_POSITION(clear_buffers, 0x674);
1193ASSERT_REG_POSITION(color_mask, 0x680); 1201ASSERT_REG_POSITION(color_mask, 0x680);
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 630a58e49..fea106ba1 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -970,12 +970,20 @@ u32 RasterizerOpenGL::SetupTextures(Maxwell::ShaderStage stage, Shader& shader,
970void RasterizerOpenGL::SyncViewport(OpenGLState& current_state) { 970void RasterizerOpenGL::SyncViewport(OpenGLState& current_state) {
971 const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; 971 const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs;
972 for (std::size_t i = 0; i < Tegra::Engines::Maxwell3D::Regs::NumViewports; i++) { 972 for (std::size_t i = 0; i < Tegra::Engines::Maxwell3D::Regs::NumViewports; i++) {
973 const MathUtil::Rectangle<s32> viewport_rect{regs.viewport_transform[i].GetRect()};
974 auto& viewport = current_state.viewports[i]; 973 auto& viewport = current_state.viewports[i];
975 viewport.x = viewport_rect.left; 974 const auto& src = regs.viewports[i];
976 viewport.y = viewport_rect.bottom; 975 if (regs.viewport_transform_enabled) {
977 viewport.width = viewport_rect.GetWidth(); 976 const MathUtil::Rectangle<s32> viewport_rect{regs.viewport_transform[i].GetRect()};
978 viewport.height = viewport_rect.GetHeight(); 977 viewport.x = viewport_rect.left;
978 viewport.y = viewport_rect.bottom;
979 viewport.width = viewport_rect.GetWidth();
980 viewport.height = viewport_rect.GetHeight();
981 } else {
982 viewport.x = src.x;
983 viewport.y = src.y;
984 viewport.width = src.width;
985 viewport.height = src.height;
986 }
979 viewport.depth_range_far = regs.viewports[i].depth_range_far; 987 viewport.depth_range_far = regs.viewports[i].depth_range_far;
980 viewport.depth_range_near = regs.viewports[i].depth_range_near; 988 viewport.depth_range_near = regs.viewports[i].depth_range_near;
981 } 989 }