Add gl::Program::syncState and dirty bits.
Currently this handles uniform block bindings. Cleans up some logic in D3D.
Bug: angleproject:2747
Change-Id: I8c2989738d50a77d6f6d90a9ff11dceab6d3129c
Reviewed-on: https://chromium-review.googlesource.com/1172085
Reviewed-by: Frank Henigman <fjhenigman@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/State.cpp b/src/libANGLE/State.cpp
index ce840f1..3208c3a 100644
--- a/src/libANGLE/State.cpp
+++ b/src/libANGLE/State.cpp
@@ -1351,6 +1351,7 @@
}
mDirtyBits.set(DIRTY_BIT_PROGRAM_EXECUTABLE);
mDirtyBits.set(DIRTY_BIT_PROGRAM_BINDING);
+ mDirtyObjects.set(DIRTY_OBJECT_PROGRAM);
}
}
@@ -2675,6 +2676,9 @@
case DIRTY_OBJECT_PROGRAM_TEXTURES:
ANGLE_TRY(syncProgramTextures(context));
break;
+ case DIRTY_OBJECT_PROGRAM:
+ ANGLE_TRY(mProgram->syncState(context));
+ break;
default:
UNREACHABLE();
@@ -2781,8 +2785,11 @@
break;
case GL_TEXTURE:
case GL_SAMPLER:
+ localSet.set(DIRTY_OBJECT_PROGRAM_TEXTURES);
+ break;
case GL_PROGRAM:
localSet.set(DIRTY_OBJECT_PROGRAM_TEXTURES);
+ localSet.set(DIRTY_OBJECT_PROGRAM);
break;
}
@@ -2808,8 +2815,12 @@
break;
case GL_TEXTURE:
case GL_SAMPLER:
+ mDirtyObjects.set(DIRTY_OBJECT_PROGRAM_TEXTURES);
+ mDirtyBits.set(DIRTY_BIT_TEXTURE_BINDINGS);
+ break;
case GL_PROGRAM:
mDirtyObjects.set(DIRTY_OBJECT_PROGRAM_TEXTURES);
+ mDirtyObjects.set(DIRTY_OBJECT_PROGRAM);
mDirtyBits.set(DIRTY_BIT_TEXTURE_BINDINGS);
break;
}
@@ -2825,6 +2836,7 @@
{
mDirtyBits.set(DIRTY_BIT_PROGRAM_EXECUTABLE);
mDirtyObjects.set(DIRTY_OBJECT_PROGRAM_TEXTURES);
+ mDirtyObjects.set(DIRTY_OBJECT_PROGRAM);
}
}