Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Unified Diff: gpu/command_buffer/service/context_state.cc

Issue 2762833003: gpu: Use decoder state restoration for scoped_binders (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/context_state.cc
diff --git a/gpu/command_buffer/service/context_state.cc b/gpu/command_buffer/service/context_state.cc
index 5aa24fbacd095e7c09ea022d30254b49588ba9fe..f600857e9100fad5b4258154725d899bdab45f32 100644
--- a/gpu/command_buffer/service/context_state.cc
+++ b/gpu/command_buffer/service/context_state.cc
@@ -417,6 +417,34 @@ void ContextState::RestoreVertexAttribValues() const {
}
}
+void ContextState::RestoreVertexAttribArray(unsigned attrib_index) const {
+ const VertexAttrib* attrib =
+ vertex_attrib_manager->GetVertexAttrib(attrib_index);
+
+ // Restore vertex array.
+ Buffer* buffer = attrib->buffer();
+ GLuint buffer_service_id = buffer ? buffer->service_id() : 0;
+ glBindBuffer(GL_ARRAY_BUFFER, buffer_service_id);
+ const void* ptr = reinterpret_cast<const void*>(attrib->offset());
+ glVertexAttribPointer(attrib_index, attrib->size(), attrib->type(),
+ attrib->normalized(), attrib->gl_stride(), ptr);
+
+ // Restore attrib divisor if supported.
+ if (feature_info_->feature_flags().angle_instanced_arrays)
+ glVertexAttribDivisorANGLE(attrib_index, attrib->divisor());
+
+ // Never touch vertex attribute 0's state (in particular, never
+ // disable it) when running on desktop GL with compatibility profile
+ // because it will never be re-enabled.
+ if (attrib_index != 0 || feature_info_->gl_version_info().BehavesLikeGLES()) {
+ if (attrib->enabled()) {
+ glEnableVertexAttribArray(attrib_index);
+ } else {
+ glDisableVertexAttribArray(attrib_index);
+ }
+ }
+}
+
void ContextState::RestoreVertexAttribArrays(
const scoped_refptr<VertexAttribManager> attrib_manager) const {
// This is expected to be called only for VAO with service_id 0,
@@ -430,37 +458,8 @@ void ContextState::RestoreVertexAttribArrays(
// Restore vertex attrib arrays.
for (size_t attrib_index = 0; attrib_index < attrib_manager->num_attribs();
- ++attrib_index) {
- const VertexAttrib* attrib = attrib_manager->GetVertexAttrib(attrib_index);
-
- // Restore vertex array.
- Buffer* buffer = attrib->buffer();
- GLuint buffer_service_id = buffer ? buffer->service_id() : 0;
- glBindBuffer(GL_ARRAY_BUFFER, buffer_service_id);
- const void* ptr = reinterpret_cast<const void*>(attrib->offset());
- glVertexAttribPointer(attrib_index,
- attrib->size(),
- attrib->type(),
- attrib->normalized(),
- attrib->gl_stride(),
- ptr);
-
- // Restore attrib divisor if supported.
- if (feature_info_->feature_flags().angle_instanced_arrays)
- glVertexAttribDivisorANGLE(attrib_index, attrib->divisor());
-
- // Never touch vertex attribute 0's state (in particular, never
- // disable it) when running on desktop GL with compatibility profile
- // because it will never be re-enabled.
- if (attrib_index != 0 ||
- feature_info_->gl_version_info().BehavesLikeGLES()) {
- if (attrib->enabled()) {
- glEnableVertexAttribArray(attrib_index);
- } else {
- glDisableVertexAttribArray(attrib_index);
- }
- }
- }
+ ++attrib_index)
+ RestoreVertexAttribArray(attrib_index);
piman 2017/03/22 21:28:26 This needs to pass in |attrib_manager|. RestoreVer
Chandan 2017/03/23 09:19:39 Have removed these changes in context_state.cc in
}
void ContextState::RestoreVertexAttribs() const {

Powered by Google App Engine
This is Rietveld 408576698