summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bunnei2018-09-29 11:58:39 -0400
committerGravatar GitHub2018-09-29 11:58:39 -0400
commitfe5962e073245bee0e7204cca68c5f686c8e6625 (patch)
tree4fb852dd52022f1f24b1b31bbc95f5acd09e3851
parentMerge pull request #1406 from ReinUsesLisp/multibind-samplers (diff)
parentvideo_core: Implement point_size and add point state sync (diff)
downloadyuzu-fe5962e073245bee0e7204cca68c5f686c8e6625.tar.gz
yuzu-fe5962e073245bee0e7204cca68c5f686c8e6625.tar.xz
yuzu-fe5962e073245bee0e7204cca68c5f686c8e6625.zip
Merge pull request #1411 from ReinUsesLisp/point-size
video_core: Implement point_size and add point state sync
Diffstat (limited to '')
-rw-r--r--src/video_core/engines/maxwell_3d.h7
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp7
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.h3
-rw-r--r--src/video_core/renderer_opengl/gl_state.cpp7
-rw-r--r--src/video_core/renderer_opengl/gl_state.h4
5 files changed, 27 insertions, 1 deletions
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h
index cd26c7216..9f5581045 100644
--- a/src/video_core/engines/maxwell_3d.h
+++ b/src/video_core/engines/maxwell_3d.h
@@ -642,7 +642,11 @@ public:
642 642
643 u32 vb_element_base; 643 u32 vb_element_base;
644 644
645 INSERT_PADDING_WORDS(0x40); 645 INSERT_PADDING_WORDS(0x38);
646
647 float point_size;
648
649 INSERT_PADDING_WORDS(0x7);
646 650
647 u32 zeta_enable; 651 u32 zeta_enable;
648 652
@@ -1018,6 +1022,7 @@ ASSERT_REG_POSITION(stencil_front_func_mask, 0x4E6);
1018ASSERT_REG_POSITION(stencil_front_mask, 0x4E7); 1022ASSERT_REG_POSITION(stencil_front_mask, 0x4E7);
1019ASSERT_REG_POSITION(screen_y_control, 0x4EB); 1023ASSERT_REG_POSITION(screen_y_control, 0x4EB);
1020ASSERT_REG_POSITION(vb_element_base, 0x50D); 1024ASSERT_REG_POSITION(vb_element_base, 0x50D);
1025ASSERT_REG_POSITION(point_size, 0x546);
1021ASSERT_REG_POSITION(zeta_enable, 0x54E); 1026ASSERT_REG_POSITION(zeta_enable, 0x54E);
1022ASSERT_REG_POSITION(tsc, 0x557); 1027ASSERT_REG_POSITION(tsc, 0x557);
1023ASSERT_REG_POSITION(tic, 0x55D); 1028ASSERT_REG_POSITION(tic, 0x55D);
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 44850d193..1fcd13f04 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -452,6 +452,7 @@ void RasterizerOpenGL::DrawArrays() {
452 SyncCullMode(); 452 SyncCullMode();
453 SyncAlphaTest(); 453 SyncAlphaTest();
454 SyncTransformFeedback(); 454 SyncTransformFeedback();
455 SyncPointState();
455 456
456 // TODO(bunnei): Sync framebuffer_scale uniform here 457 // TODO(bunnei): Sync framebuffer_scale uniform here
457 // TODO(bunnei): Sync scissorbox uniform(s) here 458 // TODO(bunnei): Sync scissorbox uniform(s) here
@@ -905,4 +906,10 @@ void RasterizerOpenGL::SyncTransformFeedback() {
905 } 906 }
906} 907}
907 908
909void RasterizerOpenGL::SyncPointState() {
910 const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs;
911
912 state.point.size = regs.point_size;
913}
914
908} // namespace OpenGL 915} // namespace OpenGL
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h
index b64c93b81..4c8ecbd1c 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer.h
@@ -164,6 +164,9 @@ private:
164 /// Syncs the transform feedback state to match the guest state 164 /// Syncs the transform feedback state to match the guest state
165 void SyncTransformFeedback(); 165 void SyncTransformFeedback();
166 166
167 /// Syncs the point state to match the guest state
168 void SyncPointState();
169
167 bool has_ARB_direct_state_access = false; 170 bool has_ARB_direct_state_access = false;
168 bool has_ARB_multi_bind = false; 171 bool has_ARB_multi_bind = false;
169 bool has_ARB_separate_shader_objects = false; 172 bool has_ARB_separate_shader_objects = false;
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp
index e494b3f16..1fe26a2a9 100644
--- a/src/video_core/renderer_opengl/gl_state.cpp
+++ b/src/video_core/renderer_opengl/gl_state.cpp
@@ -79,6 +79,8 @@ OpenGLState::OpenGLState() {
79 viewport.height = 0; 79 viewport.height = 0;
80 80
81 clip_distance = {}; 81 clip_distance = {};
82
83 point.size = 1;
82} 84}
83 85
84void OpenGLState::Apply() const { 86void OpenGLState::Apply() const {
@@ -301,6 +303,11 @@ void OpenGLState::Apply() const {
301 } 303 }
302 } 304 }
303 305
306 // Point
307 if (point.size != cur_state.point.size) {
308 glPointSize(point.size);
309 }
310
304 cur_state = *this; 311 cur_state = *this;
305} 312}
306 313
diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h
index 49f30b111..dc21a2ee3 100644
--- a/src/video_core/renderer_opengl/gl_state.h
+++ b/src/video_core/renderer_opengl/gl_state.h
@@ -142,6 +142,10 @@ public:
142 GLsizei height; 142 GLsizei height;
143 } viewport; 143 } viewport;
144 144
145 struct {
146 float size; // GL_POINT_SIZE
147 } point;
148
145 std::array<bool, 2> clip_distance; // GL_CLIP_DISTANCE 149 std::array<bool, 2> clip_distance; // GL_CLIP_DISTANCE
146 150
147 OpenGLState(); 151 OpenGLState();