video_core: Implement point_size and add point state sync
This commit is contained in:
parent
f7da74d18e
commit
e3e51d3ddb
|
@ -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();
|
||||
|
|
Reference in New Issue