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

Unified Diff: gpu/command_buffer/client/gles2_implementation.cc

Issue 786123002: Update from https://crrev.com/307330 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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/client/gles2_implementation.cc
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc
index 1916e7d2008d64b32dc71cc81d7211411e281237..4c148e9081cd22c2079fbd19c1e6198b16f5739c 100644
--- a/gpu/command_buffer/client/gles2_implementation.cc
+++ b/gpu/command_buffer/client/gles2_implementation.cc
@@ -2314,7 +2314,7 @@ void GLES2Implementation::GenValuebuffersCHROMIUMHelper(
// the old model but possibly not true in the new model if another context has
// deleted the resource.
-bool GLES2Implementation::BindBufferHelper(
+void GLES2Implementation::BindBufferHelper(
GLenum target, GLuint buffer_id) {
// TODO(gman): See note #1 above.
bool changed = false;
@@ -2340,11 +2340,19 @@ bool GLES2Implementation::BindBufferHelper(
}
// TODO(gman): There's a bug here. If the target is invalid the ID will not be
// used even though it's marked it as used here.
- GetIdHandler(id_namespaces::kBuffers)->MarkAsUsedForBind(buffer_id);
- return changed;
+ if (changed) {
+ GetIdHandler(id_namespaces::kBuffers)->MarkAsUsedForBind(
+ this, target, buffer_id, &GLES2Implementation::BindBufferStub);
+ }
+}
+
+void GLES2Implementation::BindBufferStub(GLenum target, GLuint buffer) {
+ helper_->BindBuffer(target, buffer);
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
}
-bool GLES2Implementation::BindFramebufferHelper(
+void GLES2Implementation::BindFramebufferHelper(
GLenum target, GLuint framebuffer) {
// TODO(gman): See note #1 above.
bool changed = false;
@@ -2360,7 +2368,7 @@ bool GLES2Implementation::BindFramebufferHelper(
case GL_READ_FRAMEBUFFER:
if (!IsChromiumFramebufferMultisampleAvailable()) {
SetGLErrorInvalidEnum("glBindFramebuffer", target, "target");
- return false;
+ return;
}
if (bound_read_framebuffer_ != framebuffer) {
bound_read_framebuffer_ = framebuffer;
@@ -2370,7 +2378,7 @@ bool GLES2Implementation::BindFramebufferHelper(
case GL_DRAW_FRAMEBUFFER:
if (!IsChromiumFramebufferMultisampleAvailable()) {
SetGLErrorInvalidEnum("glBindFramebuffer", target, "target");
- return false;
+ return;
}
if (bound_framebuffer_ != framebuffer) {
bound_framebuffer_ = framebuffer;
@@ -2379,13 +2387,23 @@ bool GLES2Implementation::BindFramebufferHelper(
break;
default:
SetGLErrorInvalidEnum("glBindFramebuffer", target, "target");
- return false;
+ return;
}
- GetIdHandler(id_namespaces::kFramebuffers)->MarkAsUsedForBind(framebuffer);
- return changed;
+
+ if (changed) {
+ GetIdHandler(id_namespaces::kFramebuffers)->MarkAsUsedForBind(
+ this, target, framebuffer, &GLES2Implementation::BindFramebufferStub);
+ }
+}
+
+void GLES2Implementation::BindFramebufferStub(GLenum target,
+ GLuint framebuffer) {
+ helper_->BindFramebuffer(target, framebuffer);
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
}
-bool GLES2Implementation::BindRenderbufferHelper(
+void GLES2Implementation::BindRenderbufferHelper(
GLenum target, GLuint renderbuffer) {
// TODO(gman): See note #1 above.
bool changed = false;
@@ -2402,11 +2420,21 @@ bool GLES2Implementation::BindRenderbufferHelper(
}
// TODO(gman): There's a bug here. If the target is invalid the ID will not be
// used even though it's marked it as used here.
- GetIdHandler(id_namespaces::kRenderbuffers)->MarkAsUsedForBind(renderbuffer);
- return changed;
+ if (changed) {
+ GetIdHandler(id_namespaces::kRenderbuffers)->MarkAsUsedForBind(
+ this, target, renderbuffer,
+ &GLES2Implementation::BindRenderbufferStub);
+ }
}
-bool GLES2Implementation::BindTextureHelper(GLenum target, GLuint texture) {
+void GLES2Implementation::BindRenderbufferStub(GLenum target,
+ GLuint renderbuffer) {
+ helper_->BindRenderbuffer(target, renderbuffer);
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
+}
+
+void GLES2Implementation::BindTextureHelper(GLenum target, GLuint texture) {
// TODO(gman): See note #1 above.
// TODO(gman): Change this to false once we figure out why it's failing
// on daisy.
@@ -2437,26 +2465,37 @@ bool GLES2Implementation::BindTextureHelper(GLenum target, GLuint texture) {
}
// TODO(gman): There's a bug here. If the target is invalid the ID will not be
// used. even though it's marked it as used here.
- GetIdHandler(id_namespaces::kTextures)->MarkAsUsedForBind(texture);
- return changed;
+ if (changed) {
+ GetIdHandler(id_namespaces::kTextures)->MarkAsUsedForBind(
+ this, target, texture, &GLES2Implementation::BindTextureStub);
+ }
+}
+
+void GLES2Implementation::BindTextureStub(GLenum target, GLuint texture) {
+ helper_->BindTexture(target, texture);
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
}
-bool GLES2Implementation::BindVertexArrayOESHelper(GLuint array) {
+void GLES2Implementation::BindVertexArrayOESHelper(GLuint array) {
// TODO(gman): See note #1 above.
bool changed = false;
- if (!vertex_array_object_manager_->BindVertexArray(array, &changed)) {
+ if (vertex_array_object_manager_->BindVertexArray(array, &changed)) {
+ if (changed) {
+ // Unlike other BindXXXHelpers we don't call MarkAsUsedForBind
+ // because unlike other resources VertexArrayObject ids must
+ // be generated by GenVertexArrays. A random id to Bind will not
+ // generate a new object.
+ helper_->BindVertexArrayOES(array);
+ }
+ } else {
SetGLError(
GL_INVALID_OPERATION, "glBindVertexArrayOES",
"id was not generated with glGenVertexArrayOES");
}
- // Unlike other BindXXXHelpers we don't call MarkAsUsedForBind
- // because unlike other resources VertexArrayObject ids must
- // be generated by GenVertexArrays. A random id to Bind will not
- // generate a new object.
- return changed;
}
-bool GLES2Implementation::BindValuebufferCHROMIUMHelper(GLenum target,
+void GLES2Implementation::BindValuebufferCHROMIUMHelper(GLenum target,
GLuint valuebuffer) {
bool changed = false;
switch (target) {
@@ -2472,17 +2511,25 @@ bool GLES2Implementation::BindValuebufferCHROMIUMHelper(GLenum target,
}
// TODO(gman): There's a bug here. If the target is invalid the ID will not be
// used even though it's marked it as used here.
- GetIdHandler(id_namespaces::kValuebuffers)->MarkAsUsedForBind(valuebuffer);
- return changed;
+ if (changed) {
+ GetIdHandler(id_namespaces::kValuebuffers)->MarkAsUsedForBind(
+ this, target, valuebuffer,
+ &GLES2Implementation::BindValuebufferCHROMIUMStub);
+ }
}
-bool GLES2Implementation::UseProgramHelper(GLuint program) {
- bool changed = false;
+void GLES2Implementation::BindValuebufferCHROMIUMStub(GLenum target,
+ GLuint valuebuffer) {
+ helper_->BindValuebufferCHROMIUM(target, valuebuffer);
+ if (share_group_->bind_generates_resource())
+ helper_->CommandBufferHelper::Flush();
+}
+
+void GLES2Implementation::UseProgramHelper(GLuint program) {
if (current_program_ != program) {
current_program_ = program;
- changed = true;
+ helper_->UseProgram(program);
}
- return changed;
}
bool GLES2Implementation::IsBufferReservedId(GLuint id) {
« no previous file with comments | « gpu/command_buffer/client/gles2_implementation.h ('k') | gpu/command_buffer/client/gles2_implementation_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698