Chromium Code Reviews| 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, |