| 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;
|
| }
|
|
|
|
|