Index: gpu/command_buffer/service/gles2_cmd_decoder.cc |
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
index 6ec2b0a83120dfc5c32b4ff9fbafabb0c820209d..d48fe1880e9419fcceebb8b354ac0a636f021b2e 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
@@ -10448,6 +10448,51 @@ error::Error GLES2DecoderImpl::HandleScheduleCALayerCHROMIUM( |
return error::kNoError; |
} |
+error::Error GLES2DecoderImpl::HandleScheduleCALayerInUseQueryCHROMIUMImmediate( |
+ uint32_t immediate_data_size, |
+ const void* cmd_data) { |
+ const gles2::cmds::ScheduleCALayerInUseQueryCHROMIUMImmediate& c = |
+ *static_cast< |
+ const gles2::cmds::ScheduleCALayerInUseQueryCHROMIUMImmediate*>( |
+ cmd_data); |
+ |
+ GLuint n = static_cast<GLuint>(c.n); |
+ uint32_t data_size; |
+ if (!GLES2Util::ComputeDataSize(n, sizeof(GLuint), 1, &data_size)) { |
+ return error::kOutOfBounds; |
+ } |
+ if (data_size > immediate_data_size) { |
+ return error::kOutOfBounds; |
+ } |
+ const GLuint* textures = |
+ GetImmediateDataAs<const GLuint*>(c, data_size, immediate_data_size); |
piman
2016/06/14 00:58:56
On the client side, you transmits the textures int
erikchen
2016/06/14 01:47:51
This code is no longer necessary, because I now us
|
+ |
+ std::vector<gl::GLSurface::CALayerInUseQuery> queries; |
piman
2016/06/14 00:58:55
nit: queries.reserve(n); to avoid reallocations
erikchen
2016/06/14 01:47:51
Done.
|
+ for (unsigned i = 0; i < n; ++i) { |
+ gl::GLImage* image = nullptr; |
+ GLuint texture_id = textures[i]; |
+ if (texture_id) { |
+ TextureRef* ref = texture_manager()->GetTexture(texture_id); |
+ if (!ref) { |
+ LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, |
+ "glScheduleCALayerInUseQueryCHROMIUM", |
+ "unknown texture"); |
+ return error::kNoError; |
+ } |
+ Texture::ImageState image_state; |
+ image = ref->texture()->GetLevelImage(ref->texture()->target(), 0, |
+ &image_state); |
+ } |
+ gl::GLSurface::CALayerInUseQuery query; |
+ query.image = image; |
+ query.texture = texture_id; |
+ queries.push_back(query); |
+ } |
+ |
+ surface_->ScheduleCALayerInUseQuery(queries); |
piman
2016/06/14 00:58:55
nit: std::move(queries)
erikchen
2016/06/14 01:47:51
Done.
|
+ return error::kNoError; |
+} |
+ |
error::Error GLES2DecoderImpl::GetAttribLocationHelper( |
GLuint client_id, |
uint32_t location_shm_id, |