gl_state_tracker: Implement dirty flags for point sizes
This commit is contained in:
parent
231601763c
commit
4f8d152b18
3 changed files with 25 additions and 4 deletions
|
@ -1267,12 +1267,25 @@ void RasterizerOpenGL::SyncTransformFeedback() {
|
|||
}
|
||||
|
||||
void RasterizerOpenGL::SyncPointState() {
|
||||
const auto& regs = system.GPU().Maxwell3D().regs;
|
||||
auto& gpu = system.GPU().Maxwell3D();
|
||||
auto& flags = gpu.dirty.flags;
|
||||
if (!flags[Dirty::PointSize]) {
|
||||
return;
|
||||
}
|
||||
flags[Dirty::PointSize] = false;
|
||||
|
||||
oglEnable(GL_POINT_SPRITE, gpu.regs.point_sprite_enable);
|
||||
|
||||
if (gpu.regs.vp_point_size.enable) {
|
||||
// By definition of GL_POINT_SIZE, it only matters if GL_PROGRAM_POINT_SIZE is disabled.
|
||||
glEnable(GL_PROGRAM_POINT_SIZE);
|
||||
return;
|
||||
}
|
||||
|
||||
// Limit the point size to 1 since nouveau sometimes sets a point size of 0 (and that's invalid
|
||||
// in OpenGL).
|
||||
oglEnable(GL_PROGRAM_POINT_SIZE, regs.vp_point_size.enable);
|
||||
oglEnable(GL_POINT_SPRITE, regs.point_sprite_enable);
|
||||
glPointSize(std::max(1.0f, regs.point_size));
|
||||
glPointSize(std::max(1.0f, gpu.regs.point_size));
|
||||
glDisable(GL_PROGRAM_POINT_SIZE);
|
||||
}
|
||||
|
||||
void RasterizerOpenGL::SyncPolygonOffset() {
|
||||
|
|
|
@ -205,6 +205,12 @@ void SetupDirtyFragmentClampColor(Tables& tables) {
|
|||
tables[0][OFF(frag_color_clamp)] = FragmentClampColor;
|
||||
}
|
||||
|
||||
void SetupDirtyPointSize(Tables& tables) {
|
||||
tables[0][OFF(vp_point_size)] = PointSize;
|
||||
tables[0][OFF(point_size)] = PointSize;
|
||||
tables[0][OFF(point_sprite_enable)] = PointSize;
|
||||
}
|
||||
|
||||
void SetupDirtyMisc(Tables& tables) {
|
||||
auto& table = tables[0];
|
||||
|
||||
|
@ -241,6 +247,7 @@ void StateTracker::Initialize() {
|
|||
SetupDirtyFramebufferSRGB(tables);
|
||||
SetupDirtyLogicOp(tables);
|
||||
SetupDirtyFragmentClampColor(tables);
|
||||
SetupDirtyPointSize(tables);
|
||||
SetupDirtyMisc(tables);
|
||||
|
||||
auto& store = dirty.on_write_stores;
|
||||
|
|
|
@ -70,6 +70,7 @@ enum : u8 {
|
|||
FramebufferSRGB,
|
||||
LogicOp,
|
||||
FragmentClampColor,
|
||||
PointSize,
|
||||
|
||||
Last
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue