Index: gpu/command_buffer/client/gles2_implementation.cc |
diff --git a/gpu/command_buffer/client/gles2_implementation.cc b/gpu/command_buffer/client/gles2_implementation.cc |
index 8307790b34e0ac245cae8d46b939c174b74f64f2..6ad46f874d28e85dd83bc6bd8e26cb6f9ebe3714 100644 |
--- a/gpu/command_buffer/client/gles2_implementation.cc |
+++ b/gpu/command_buffer/client/gles2_implementation.cc |
@@ -17,6 +17,7 @@ |
#include <sstream> |
#include <string> |
#include "base/bind.h" |
+#include "base/numerics/safe_math.h" |
#include "gpu/command_buffer/client/buffer_tracker.h" |
#include "gpu/command_buffer/client/gpu_control.h" |
#include "gpu/command_buffer/client/program_info_manager.h" |
@@ -975,6 +976,20 @@ void GLES2Implementation::DeleteShaderStub( |
helper_->DeleteShader(shaders[0]); |
} |
+void GLES2Implementation::DeleteSyncHelper(GLsync sync) { |
+ GLuint sync_uint = ToGLuint(sync); |
+ if (!GetIdHandler(id_namespaces::kSyncs)->FreeIds( |
+ this, 1, &sync_uint, &GLES2Implementation::DeleteSyncStub)) { |
+ SetGLError( |
+ GL_INVALID_VALUE, |
+ "glDeleteSync", "id not created by this context."); |
+ } |
+} |
+ |
+void GLES2Implementation::DeleteSyncStub(GLsizei n, const GLuint* syncs) { |
+ DCHECK_EQ(1, n); |
+ helper_->DeleteSync(syncs[0]); |
+} |
GLint GLES2Implementation::GetAttribLocationHelper( |
GLuint program, const char* name) { |
@@ -1190,78 +1205,6 @@ void GLES2Implementation::VertexAttribDivisorANGLE( |
CheckGLError(); |
} |
-void GLES2Implementation::ShaderSource( |
- GLuint shader, |
- GLsizei count, |
- const GLchar* const* source, |
- const GLint* length) { |
- GPU_CLIENT_SINGLE_THREAD_CHECK(); |
- GPU_CLIENT_LOG("[" << GetLogPrefix() << "] glShaderSource(" |
- << shader << ", " << count << ", " |
- << static_cast<const void*>(source) << ", " |
- << static_cast<const void*>(length) << ")"); |
- GPU_CLIENT_LOG_CODE_BLOCK({ |
- for (GLsizei ii = 0; ii < count; ++ii) { |
- if (source[ii]) { |
- if (length && length[ii] >= 0) { |
- std::string str(source[ii], length[ii]); |
- GPU_CLIENT_LOG(" " << ii << ": ---\n" << str << "\n---"); |
- } else { |
- GPU_CLIENT_LOG(" " << ii << ": ---\n" << source[ii] << "\n---"); |
- } |
- } else { |
- GPU_CLIENT_LOG(" " << ii << ": NULL"); |
- } |
- } |
- }); |
- if (count < 0) { |
- SetGLError(GL_INVALID_VALUE, "glShaderSource", "count < 0"); |
- return; |
- } |
- if (shader == 0) { |
- SetGLError(GL_INVALID_VALUE, "glShaderSource", "shader == 0"); |
- return; |
- } |
- |
- // Compute the total size. |
- uint32 total_size = 1; |
- for (GLsizei ii = 0; ii < count; ++ii) { |
- if (source[ii]) { |
- total_size += (length && length[ii] >= 0) ? |
- static_cast<size_t>(length[ii]) : strlen(source[ii]); |
- } |
- } |
- |
- // Concatenate all the strings in to a bucket on the service. |
- helper_->SetBucketSize(kResultBucketId, total_size); |
- uint32 offset = 0; |
- for (GLsizei ii = 0; ii <= count; ++ii) { |
- const char* src = ii < count ? source[ii] : ""; |
- if (src) { |
- uint32 size = ii < count ? |
- (length ? static_cast<size_t>(length[ii]) : strlen(src)) : 1; |
- while (size) { |
- ScopedTransferBufferPtr buffer(size, helper_, transfer_buffer_); |
- if (!buffer.valid()) { |
- return; |
- } |
- memcpy(buffer.address(), src, buffer.size()); |
- helper_->SetBucketData(kResultBucketId, offset, buffer.size(), |
- buffer.shm_id(), buffer.offset()); |
- offset += buffer.size(); |
- src += buffer.size(); |
- size -= buffer.size(); |
- } |
- } |
- } |
- |
- DCHECK_EQ(total_size, offset); |
- |
- helper_->ShaderSourceBucket(shader, kResultBucketId); |
- helper_->SetBucketSize(kResultBucketId, 0); |
- CheckGLError(); |
-} |
- |
void GLES2Implementation::BufferDataHelper( |
GLenum target, GLsizeiptr size, const void* data, GLenum usage) { |
if (!ValidateSize("glBufferData", size)) |