| Index: gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
 | 
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
 | 
| index 5f4cb99091026cf42e266459d350ca665a729bdb..77049c59825abe6c706a63a4bbe3ae01af7ed6c3 100644
 | 
| --- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
 | 
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc
 | 
| @@ -136,13 +136,23 @@
 | 
|  }
 | 
|  
 | 
|  GLuint GetTransformFeedbackServiceID(GLuint client_id,
 | 
| -                                     ClientServiceMap<GLuint, GLuint>* id_map) {
 | 
| -  return id_map->GetServiceIDOrInvalid(client_id);
 | 
| +                                     ClientServiceMap<GLuint, GLuint>* id_map,
 | 
| +                                     bool create_if_missing) {
 | 
| +  return GetServiceID(client_id, id_map, create_if_missing, []() {
 | 
| +    GLuint service_id = 0;
 | 
| +    glGenTransformFeedbacks(1, &service_id);
 | 
| +    return service_id;
 | 
| +  });
 | 
|  }
 | 
|  
 | 
|  GLuint GetVertexArrayServiceID(GLuint client_id,
 | 
| -                               ClientServiceMap<GLuint, GLuint>* id_map) {
 | 
| -  return id_map->GetServiceIDOrInvalid(client_id);
 | 
| +                               ClientServiceMap<GLuint, GLuint>* id_map,
 | 
| +                               bool create_if_missing) {
 | 
| +  return GetServiceID(client_id, id_map, create_if_missing, []() {
 | 
| +    GLuint service_id = 0;
 | 
| +    glGenVertexArraysOES(1, &service_id);
 | 
| +    return service_id;
 | 
| +  });
 | 
|  }
 | 
|  
 | 
|  GLuint GetProgramServiceID(GLuint client_id, PassthroughResources* resources) {
 | 
| @@ -280,7 +290,8 @@
 | 
|      GLuint transformfeedback) {
 | 
|    glBindTransformFeedback(
 | 
|        target, GetTransformFeedbackServiceID(transformfeedback,
 | 
| -                                            &transform_feedback_id_map_));
 | 
| +                                            &transform_feedback_id_map_,
 | 
| +                                            bind_generates_resource_));
 | 
|    return error::kNoError;
 | 
|  }
 | 
|  
 | 
| @@ -712,9 +723,20 @@
 | 
|      GLenum attachment,
 | 
|      GLenum renderbuffertarget,
 | 
|      GLuint renderbuffer) {
 | 
| -  glFramebufferRenderbufferEXT(
 | 
| -      target, attachment, renderbuffertarget,
 | 
| -      GetRenderbufferServiceID(renderbuffer, resources_, false));
 | 
| +  // TODO(geofflang): Handle this case in ANGLE by adding a WebGL validation
 | 
| +  // mode.
 | 
| +  if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {
 | 
| +    glFramebufferRenderbufferEXT(
 | 
| +        target, GL_DEPTH_ATTACHMENT, renderbuffertarget,
 | 
| +        GetRenderbufferServiceID(renderbuffer, resources_, false));
 | 
| +    glFramebufferRenderbufferEXT(
 | 
| +        target, GL_STENCIL_ATTACHMENT, renderbuffertarget,
 | 
| +        GetRenderbufferServiceID(renderbuffer, resources_, false));
 | 
| +  } else {
 | 
| +    glFramebufferRenderbufferEXT(
 | 
| +        target, attachment, renderbuffertarget,
 | 
| +        GetRenderbufferServiceID(renderbuffer, resources_, false));
 | 
| +  }
 | 
|    return error::kNoError;
 | 
|  }
 | 
|  
 | 
| @@ -1322,7 +1344,7 @@
 | 
|      GLuint transformfeedback,
 | 
|      uint32_t* result) {
 | 
|    *result = glIsTransformFeedback(GetTransformFeedbackServiceID(
 | 
| -      transformfeedback, &transform_feedback_id_map_));
 | 
| +      transformfeedback, &transform_feedback_id_map_, false));
 | 
|    return error::kNoError;
 | 
|  }
 | 
|  
 | 
| @@ -2187,13 +2209,14 @@
 | 
|  
 | 
|  error::Error GLES2DecoderPassthroughImpl::DoIsVertexArrayOES(GLuint array,
 | 
|                                                               uint32_t* result) {
 | 
| -  *result =
 | 
| -      glIsVertexArrayOES(GetVertexArrayServiceID(array, &vertex_array_id_map_));
 | 
| +  *result = glIsVertexArrayOES(
 | 
| +      GetVertexArrayServiceID(array, &vertex_array_id_map_, false));
 | 
|    return error::kNoError;
 | 
|  }
 | 
|  
 | 
|  error::Error GLES2DecoderPassthroughImpl::DoBindVertexArrayOES(GLuint array) {
 | 
| -  glBindVertexArrayOES(GetVertexArrayServiceID(array, &vertex_array_id_map_));
 | 
| +  glBindVertexArrayOES(GetVertexArrayServiceID(array, &vertex_array_id_map_,
 | 
| +                                               bind_generates_resource_));
 | 
|    return error::kNoError;
 | 
|  }
 | 
|  
 | 
| 
 |