gl_state_tracker: Implement dirty flags for primitive restart

This commit is contained in:
ReinUsesLisp 2019-12-29 23:25:53 -03:00
parent 37536d7a49
commit 46a1888e02
3 changed files with 19 additions and 5 deletions

View File

@ -1017,10 +1017,19 @@ void RasterizerOpenGL::SyncCullMode() {
} }
void RasterizerOpenGL::SyncPrimitiveRestart() { void RasterizerOpenGL::SyncPrimitiveRestart() {
const auto& regs = system.GPU().Maxwell3D().regs; auto& gpu = system.GPU().Maxwell3D();
auto& flags = gpu.dirty.flags;
if (!flags[Dirty::PrimitiveRestart]) {
return;
}
flags[Dirty::PrimitiveRestart] = false;
oglEnable(GL_PRIMITIVE_RESTART, regs.primitive_restart.enabled); if (gpu.regs.primitive_restart.enabled) {
glPrimitiveRestartIndex(regs.primitive_restart.index); glEnable(GL_PRIMITIVE_RESTART);
glPrimitiveRestartIndex(gpu.regs.primitive_restart.index);
} else {
glDisable(GL_PRIMITIVE_RESTART);
}
} }
void RasterizerOpenGL::SyncDepthTestState() { void RasterizerOpenGL::SyncDepthTestState() {

View File

@ -164,6 +164,10 @@ void SetupDirtyBlend(Tables& tables) {
FillBlock(tables[1], OFF(blend), NUM(blend), BlendStates); FillBlock(tables[1], OFF(blend), NUM(blend), BlendStates);
} }
void SetupDirtyPrimitiveRestart(Tables& tables) {
FillBlock(tables[0], OFF(primitive_restart), NUM(primitive_restart), PrimitiveRestart);
}
void SetupDirtyMisc(Tables& tables) { void SetupDirtyMisc(Tables& tables) {
auto& table = tables[0]; auto& table = tables[0];
@ -192,6 +196,7 @@ void StateTracker::Initialize() {
SetupDirtyDepthTest(tables); SetupDirtyDepthTest(tables);
SetupDirtyStencilTest(tables); SetupDirtyStencilTest(tables);
SetupDirtyBlend(tables); SetupDirtyBlend(tables);
SetupDirtyPrimitiveRestart(tables);
SetupDirtyMisc(tables); SetupDirtyMisc(tables);
auto& store = dirty.on_write_stores; auto& store = dirty.on_write_stores;

View File

@ -56,13 +56,13 @@ enum : u8 {
Shaders, Shaders,
ClipDistances, ClipDistances,
ColorMask,
FrontFace, FrontFace,
CullTest, CullTest,
DepthMask, DepthMask,
DepthTest, DepthTest,
PrimitiveRestart,
StencilTest, StencilTest,
ColorMask, PrimitiveRestart,
PolygonOffset, PolygonOffset,
Last Last