video_core: Implement point_size and add point state sync

merge-requests/60/head
ReinUsesLisp 2018-09-28 01:31:01 +07:00
parent f7da74d18e
commit e3e51d3ddb
5 changed files with 27 additions and 1 deletions

@ -641,7 +641,11 @@ public:
u32 vb_element_base;
INSERT_PADDING_WORDS(0x40);
INSERT_PADDING_WORDS(0x38);
float point_size;
INSERT_PADDING_WORDS(0x7);
u32 zeta_enable;
@ -1017,6 +1021,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 {
@ -283,6 +285,11 @@ void OpenGLState::Apply() const {
}
}
// Point
if (point.size != cur_state.point.size) {
glPointSize(point.size);
}
cur_state = *this;
}

@ -141,6 +141,10 @@ public:
GLsizei height;
} viewport;
struct {
float size; // GL_POINT_SIZE
} point;
std::array<bool, 2> clip_distance; // GL_CLIP_DISTANCE
OpenGLState();