Browse Source
Merge pull request #1411 from ReinUsesLisp/point-size
video_core: Implement point_size and add point state sync
pull/15/merge
bunnei
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with
27 additions and
1 deletions
-
src/video_core/engines/maxwell_3d.h
-
src/video_core/renderer_opengl/gl_rasterizer.cpp
-
src/video_core/renderer_opengl/gl_rasterizer.h
-
src/video_core/renderer_opengl/gl_state.cpp
-
src/video_core/renderer_opengl/gl_state.h
|
|
|
@ -642,7 +642,11 @@ public: |
|
|
|
|
|
|
|
u32 vb_element_base; |
|
|
|
|
|
|
|
INSERT_PADDING_WORDS(0x40); |
|
|
|
INSERT_PADDING_WORDS(0x38); |
|
|
|
|
|
|
|
float point_size; |
|
|
|
|
|
|
|
INSERT_PADDING_WORDS(0x7); |
|
|
|
|
|
|
|
u32 zeta_enable; |
|
|
|
|
|
|
|
@ -1018,6 +1022,7 @@ ASSERT_REG_POSITION(stencil_front_func_mask, 0x4E6); |
|
|
|
ASSERT_REG_POSITION(stencil_front_mask, 0x4E7); |
|
|
|
ASSERT_REG_POSITION(screen_y_control, 0x4EB); |
|
|
|
ASSERT_REG_POSITION(vb_element_base, 0x50D); |
|
|
|
ASSERT_REG_POSITION(point_size, 0x546); |
|
|
|
ASSERT_REG_POSITION(zeta_enable, 0x54E); |
|
|
|
ASSERT_REG_POSITION(tsc, 0x557); |
|
|
|
ASSERT_REG_POSITION(tic, 0x55D); |
|
|
|
|
|
|
|
@ -452,6 +452,7 @@ void RasterizerOpenGL::DrawArrays() { |
|
|
|
SyncCullMode(); |
|
|
|
SyncAlphaTest(); |
|
|
|
SyncTransformFeedback(); |
|
|
|
SyncPointState(); |
|
|
|
|
|
|
|
// TODO(bunnei): Sync framebuffer_scale uniform here
|
|
|
|
// TODO(bunnei): Sync scissorbox uniform(s) here
|
|
|
|
@ -905,4 +906,10 @@ void RasterizerOpenGL::SyncTransformFeedback() { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void RasterizerOpenGL::SyncPointState() { |
|
|
|
const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; |
|
|
|
|
|
|
|
state.point.size = regs.point_size; |
|
|
|
} |
|
|
|
|
|
|
|
} // namespace OpenGL
|
|
|
|
@ -164,6 +164,9 @@ private: |
|
|
|
/// Syncs the transform feedback state to match the guest state |
|
|
|
void SyncTransformFeedback(); |
|
|
|
|
|
|
|
/// Syncs the point state to match the guest state |
|
|
|
void SyncPointState(); |
|
|
|
|
|
|
|
bool has_ARB_direct_state_access = false; |
|
|
|
bool has_ARB_multi_bind = false; |
|
|
|
bool has_ARB_separate_shader_objects = false; |
|
|
|
|
|
|
|
@ -79,6 +79,8 @@ OpenGLState::OpenGLState() { |
|
|
|
viewport.height = 0; |
|
|
|
|
|
|
|
clip_distance = {}; |
|
|
|
|
|
|
|
point.size = 1; |
|
|
|
} |
|
|
|
|
|
|
|
void OpenGLState::Apply() const { |
|
|
|
@ -301,6 +303,11 @@ void OpenGLState::Apply() const { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Point
|
|
|
|
if (point.size != cur_state.point.size) { |
|
|
|
glPointSize(point.size); |
|
|
|
} |
|
|
|
|
|
|
|
cur_state = *this; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -142,6 +142,10 @@ public: |
|
|
|
GLsizei height; |
|
|
|
} viewport; |
|
|
|
|
|
|
|
struct { |
|
|
|
float size; // GL_POINT_SIZE |
|
|
|
} point; |
|
|
|
|
|
|
|
std::array<bool, 2> clip_distance; // GL_CLIP_DISTANCE |
|
|
|
|
|
|
|
OpenGLState(); |
|
|
|
|