diff options
| author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-01-15 16:14:17 -0300 | 
|---|---|---|
| committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-01-15 16:14:17 -0300 | 
| commit | c375d735e66b275d70de7c8a29113cf1e1e41d7e (patch) | |
| tree | b9797b0801720f2710681dd527916a61affa3557 | |
| parent | 64cd46579bd822ce9ee75e599973c1936eef965e (diff) | |
gl_state: Implement PROGRAM_POINT_SIZE
For gl_PointSize to have effect we have to activate
GL_PROGRAM_POINT_SIZE.
| -rw-r--r-- | src/video_core/engines/maxwell_3d.h | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 1 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.cpp | 1 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.h | 3 | 
4 files changed, 13 insertions, 2 deletions
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index a35e7a195..2e6c7da19 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h @@ -1018,7 +1018,14 @@ public:                      }                  } instanced_arrays; -                INSERT_UNION_PADDING_WORDS(0x6); +                INSERT_UNION_PADDING_WORDS(0x4); + +                union { +                    BitField<0, 1, u32> enable; +                    BitField<4, 8, u32> unk4; +                } vp_point_size; + +                INSERT_UNION_PADDING_WORDS(1);                  Cull cull; @@ -1503,6 +1510,7 @@ ASSERT_REG_POSITION(primitive_restart, 0x591);  ASSERT_REG_POSITION(index_array, 0x5F2);  ASSERT_REG_POSITION(polygon_offset_clamp, 0x61F);  ASSERT_REG_POSITION(instanced_arrays, 0x620); +ASSERT_REG_POSITION(vp_point_size, 0x644);  ASSERT_REG_POSITION(cull, 0x646);  ASSERT_REG_POSITION(pixel_center_integer, 0x649);  ASSERT_REG_POSITION(viewport_transform_enabled, 0x64B); diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 672051102..926bccd42 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -1272,6 +1272,7 @@ void RasterizerOpenGL::SyncPointState() {      const auto& regs = system.GPU().Maxwell3D().regs;      // Limit the point size to 1 since nouveau sometimes sets a point size of 0 (and that's invalid      // in OpenGL). +    state.point.program_control = regs.vp_point_size.enable ? GL_TRUE : GL_FALSE;      state.point.size = std::max(1.0f, regs.point_size);  } diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index df2e2395a..cc185e9e1 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp @@ -127,6 +127,7 @@ void OpenGLState::ApplyClipDistances() {  }  void OpenGLState::ApplyPointSize() { +    Enable(GL_PROGRAM_POINT_SIZE, cur_state.point.program_control, point.program_control);      if (UpdateValue(cur_state.point.size, point.size)) {          glPointSize(point.size);      } diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h index fb180f302..71d418776 100644 --- a/src/video_core/renderer_opengl/gl_state.h +++ b/src/video_core/renderer_opengl/gl_state.h @@ -131,7 +131,8 @@ public:      std::array<Viewport, Tegra::Engines::Maxwell3D::Regs::NumViewports> viewports;      struct { -        float size = 1.0f; // GL_POINT_SIZE +        GLboolean program_control = GL_FALSE; // GL_PROGRAM_POINT_SIZE +        GLfloat size = 1.0f;                  // GL_POINT_SIZE      } point;      struct {  | 
