Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 932963003: Add glClientWaitSync to GPU command buffer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 5 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <list> 10 #include <list>
(...skipping 12037 matching lines...) Expand 10 before | Expand all | Expand 10 after
12048 Program* program = GetProgramInfoNotShader( 12048 Program* program = GetProgramInfoNotShader(
12049 client_id, "glUniformBlockBinding"); 12049 client_id, "glUniformBlockBinding");
12050 if (!program) { 12050 if (!program) {
12051 return error::kNoError; 12051 return error::kNoError;
12052 } 12052 }
12053 GLuint service_id = program->service_id(); 12053 GLuint service_id = program->service_id();
12054 glUniformBlockBinding(service_id, index, binding); 12054 glUniformBlockBinding(service_id, index, binding);
12055 return error::kNoError; 12055 return error::kNoError;
12056 } 12056 }
12057 12057
12058 error::Error GLES2DecoderImpl::HandleClientWaitSync(
12059 uint32_t immediate_data_size, const void* cmd_data) {
12060 if (!unsafe_es3_apis_enabled())
12061 return error::kUnknownCommand;
12062 const gles2::cmds::ClientWaitSync& c =
12063 *static_cast<const gles2::cmds::ClientWaitSync*>(cmd_data);
12064 GLuint sync = static_cast<GLuint>(c.sync);
12065 GLbitfield flags = static_cast<GLbitfield>(c.flags);
12066 GLuint64Union mapping;
12067 mapping.param32[0] = c.timeout_0;
12068 mapping.param32[1] = c.timeout_1;
12069 GLuint64 timeout = mapping.param64;
12070 if (timeout != 0) {
12071 // In Chromium we only allow |timeout| to be 0.
piman 2015/02/18 16:22:07 We should allow it here, and check this in the web
12072 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "ClientWaitSync", "timeout not 0");
12073 return error::kNoError;
12074 }
12075 typedef cmds::ClientWaitSync::Result Result;
12076 Result* result_dst = GetSharedMemoryAs<Result*>(
12077 c.result_shm_id, c.result_shm_offset, sizeof(*result_dst));
12078 if (!result_dst) {
12079 return error::kOutOfBounds;
12080 }
12081 if (*result_dst != GL_WAIT_FAILED) {
12082 return error::kInvalidArguments;
12083 }
12084 GLsync service_sync = 0;
12085 if (!group_->GetSyncServiceId(sync, &service_sync)) {
12086 LOCAL_SET_GL_ERROR(GL_INVALID_VALUE, "ClientWaitSync", "invalid sync");
12087 return error::kNoError;
12088 }
12089 *result_dst = glClientWaitSync(service_sync, flags, timeout);
12090 return error::kNoError;
12091 }
12092
12058 void GLES2DecoderImpl::OnTextureRefDetachedFromFramebuffer( 12093 void GLES2DecoderImpl::OnTextureRefDetachedFromFramebuffer(
12059 TextureRef* texture_ref) { 12094 TextureRef* texture_ref) {
12060 Texture* texture = texture_ref->texture(); 12095 Texture* texture = texture_ref->texture();
12061 DoDidUseTexImageIfNeeded(texture, texture->target()); 12096 DoDidUseTexImageIfNeeded(texture, texture->target());
12062 } 12097 }
12063 12098
12064 void GLES2DecoderImpl::OnContextLostError() { 12099 void GLES2DecoderImpl::OnContextLostError() {
12065 group_->LoseContexts(GL_UNKNOWN_CONTEXT_RESET_ARB); 12100 group_->LoseContexts(GL_UNKNOWN_CONTEXT_RESET_ARB);
12066 } 12101 }
12067 12102
12068 void GLES2DecoderImpl::OnOutOfMemoryError() { 12103 void GLES2DecoderImpl::OnOutOfMemoryError() {
12069 if (lose_context_when_out_of_memory_) { 12104 if (lose_context_when_out_of_memory_) {
12070 group_->LoseContexts(GL_UNKNOWN_CONTEXT_RESET_ARB); 12105 group_->LoseContexts(GL_UNKNOWN_CONTEXT_RESET_ARB);
12071 } 12106 }
12072 } 12107 }
12073 12108
12074 // Include the auto-generated part of this file. We split this because it means 12109 // Include the auto-generated part of this file. We split this because it means
12075 // we can easily edit the non-auto generated parts right here in this file 12110 // we can easily edit the non-auto generated parts right here in this file
12076 // instead of having to edit some template or the code generator. 12111 // instead of having to edit some template or the code generator.
12077 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h" 12112 #include "gpu/command_buffer/service/gles2_cmd_decoder_autogen.h"
12078 12113
12079 } // namespace gles2 12114 } // namespace gles2
12080 } // namespace gpu 12115 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/common/gles2_cmd_ids_autogen.h ('k') | gpu/command_buffer/service/gles2_cmd_decoder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698