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 f7c7a7d3cad18940fc1545190465cba6dffd3137..3e1fbdb8e425e57b6f08306f0e3d50273818d58e 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder_passthrough_doers.cc |
@@ -878,8 +878,11 @@ error::Error GLES2DecoderPassthroughImpl::DoGetBooleanv(GLenum pname, |
GLsizei bufsize, |
GLsizei* length, |
GLboolean* params) { |
- glGetBooleanvRobustANGLE(pname, bufsize, length, params); |
- return error::kNoError; |
+ return GetNumericHelper( |
+ pname, bufsize, length, params, |
+ [](GLenum pname, GLsizei bufsize, GLsizei* length, GLboolean* params) { |
+ glGetBooleanvRobustANGLE(pname, bufsize, length, params); |
+ }); |
} |
error::Error GLES2DecoderPassthroughImpl::DoGetBufferParameteri64v( |
@@ -911,8 +914,11 @@ error::Error GLES2DecoderPassthroughImpl::DoGetFloatv(GLenum pname, |
GLsizei bufsize, |
GLsizei* length, |
GLfloat* params) { |
- glGetFloatvRobustANGLE(pname, bufsize, length, params); |
- return error::kNoError; |
+ return GetNumericHelper( |
+ pname, bufsize, length, params, |
+ [](GLenum pname, GLsizei bufsize, GLsizei* length, GLfloat* params) { |
+ glGetFloatvRobustANGLE(pname, bufsize, length, params); |
+ }); |
} |
error::Error GLES2DecoderPassthroughImpl::DoGetFragDataLocation( |
@@ -931,8 +937,23 @@ error::Error GLES2DecoderPassthroughImpl::DoGetFramebufferAttachmentParameteriv( |
GLsizei bufsize, |
GLsizei* length, |
GLint* params) { |
- glGetFramebufferAttachmentParameterivRobustANGLE(target, attachment, pname, |
- bufsize, length, params); |
+ // Get a scratch buffer to hold the result of the query |
+ GLint* scratch_params = GetTypedScratchMemory<GLint>(bufsize); |
+ glGetFramebufferAttachmentParameterivRobustANGLE( |
+ target, attachment, pname, bufsize, length, scratch_params); |
+ |
+ // Update the results of the query, if needed |
+ error::Error error = PatchGetFramebufferAttachmentParameter( |
+ target, attachment, pname, *length, scratch_params); |
+ if (error != error::kNoError) { |
+ *length = 0; |
+ return error; |
+ } |
+ |
+ // Copy into the destination |
+ DCHECK(*length < bufsize); |
+ std::copy(scratch_params, scratch_params + *length, params); |
+ |
return error::kNoError; |
} |
@@ -940,8 +961,11 @@ error::Error GLES2DecoderPassthroughImpl::DoGetInteger64v(GLenum pname, |
GLsizei bufsize, |
GLsizei* length, |
GLint64* params) { |
- glGetInteger64vRobustANGLE(pname, bufsize, length, params); |
- return error::kNoError; |
+ return GetNumericHelper( |
+ pname, bufsize, length, params, |
+ [](GLenum pname, GLsizei bufsize, GLsizei* length, GLint64* params) { |
+ glGetInteger64vRobustANGLE(pname, bufsize, length, params); |
+ }); |
} |
error::Error GLES2DecoderPassthroughImpl::DoGetIntegeri_v(GLenum pname, |
@@ -966,8 +990,11 @@ error::Error GLES2DecoderPassthroughImpl::DoGetIntegerv(GLenum pname, |
GLsizei bufsize, |
GLsizei* length, |
GLint* params) { |
- glGetIntegervRobustANGLE(pname, bufsize, length, params); |
- return error::kNoError; |
+ return GetNumericHelper( |
+ pname, bufsize, length, params, |
+ [](GLenum pname, GLsizei bufsize, GLsizei* length, GLint* params) { |
+ glGetIntegervRobustANGLE(pname, bufsize, length, params); |
+ }); |
} |
error::Error GLES2DecoderPassthroughImpl::DoGetInternalformativ(GLenum target, |