| Index: gpu/command_buffer/client/gles2_implementation.cc
|
| ===================================================================
|
| --- gpu/command_buffer/client/gles2_implementation.cc (revision 40197)
|
| +++ gpu/command_buffer/client/gles2_implementation.cc (working copy)
|
| @@ -29,8 +29,7 @@
|
| transfer_buffer_(transfer_buffer_size, helper, transfer_buffer),
|
| transfer_buffer_id_(transfer_buffer_id),
|
| pack_alignment_(4),
|
| - unpack_alignment_(4),
|
| - error_bits_(0) {
|
| + unpack_alignment_(4) {
|
| // Eat 1 id so we start at 1 instead of 0.
|
| GLuint eat;
|
| MakeIds(1, &eat);
|
| @@ -59,47 +58,12 @@
|
| helper_->CommandBufferHelper::Finish();
|
| }
|
|
|
| -GLenum GLES2Implementation::GetError() {
|
| - return GetGLError();
|
| -}
|
| -
|
| -GLenum GLES2Implementation::GetGLError() {
|
| - // Check the GL error first, then our wrapped error.
|
| - typedef gles2::GetError::Result Result;
|
| - Result* result = GetResultAs<Result*>();
|
| - *result = GL_NO_ERROR;
|
| - helper_->GetError(result_shm_id(), result_shm_offset());
|
| - WaitForCmd();
|
| - GLenum error = *result;
|
| - if (error == GL_NO_ERROR && error_bits_ != 0) {
|
| - for (uint32 mask = 1; mask != 0; mask = mask << 1) {
|
| - if ((error_bits_ & mask) != 0) {
|
| - error = GLES2Util::GLErrorBitToGLError(mask);
|
| - break;
|
| - }
|
| - }
|
| - }
|
| -
|
| - if (error != GL_NO_ERROR) {
|
| - // There was an error, clear the corresponding wrapped error.
|
| - error_bits_ &= ~GLES2Util::GLErrorToErrorBit(error);
|
| - }
|
| - return error;
|
| -}
|
| -
|
| -void GLES2Implementation::SetGLError(GLenum error) {
|
| - error_bits_ |= GLES2Util::GLErrorToErrorBit(error);
|
| -}
|
| -
|
| void GLES2Implementation::GetBucketContents(uint32 bucket_id,
|
| std::vector<int8>* data) {
|
| DCHECK(data);
|
| - typedef cmd::GetBucketSize::Result Result;
|
| - Result* result = GetResultAs<Result*>();
|
| - *result = 0;
|
| helper_->GetBucketSize(bucket_id, result_shm_id(), result_shm_offset());
|
| WaitForCmd();
|
| - uint32 size = *result;
|
| + uint32 size = GetResultAs<cmd::GetBucketSize::Result>();
|
| data->resize(size);
|
| if (size > 0u) {
|
| uint32 max_size = transfer_buffer_.GetLargestFreeOrPendingSize();
|
| @@ -144,25 +108,15 @@
|
| }
|
| }
|
|
|
| -bool GLES2Implementation::GetBucketAsString(
|
| - uint32 bucket_id, std::string* str) {
|
| - DCHECK(str);
|
| +std::string GLES2Implementation::GetBucketAsString(uint32 bucket_id) {
|
| std::vector<int8> data;
|
| - // NOTE: strings are passed NULL terminated. That means the empty
|
| - // string will have a size of 1 and no-string will have a size of 0
|
| GetBucketContents(bucket_id, &data);
|
| - if (data.empty()) {
|
| - return false;
|
| - }
|
| - str->assign(&data[0], &data[0] + data.size() - 1);
|
| - return true;
|
| + return std::string(reinterpret_cast<char*>(&data[0]), data.size());
|
| }
|
|
|
| void GLES2Implementation::SetBucketAsString(
|
| uint32 bucket_id, const std::string& str) {
|
| - // NOTE: strings are passed NULL terminated. That means the empty
|
| - // string will have a size of 1 and no-string will have a size of 0
|
| - SetBucketContents(bucket_id, str.c_str(), str.size() + 1);
|
| + SetBucketContents(bucket_id, str.c_str(), str.size());
|
| }
|
|
|
| void GLES2Implementation::DrawElements(
|
| @@ -203,24 +157,18 @@
|
|
|
| GLint GLES2Implementation::GetAttribLocation(
|
| GLuint program, const char* name) {
|
| - typedef cmd::GetBucketSize::Result Result;
|
| - Result* result = GetResultAs<Result*>();
|
| - *result = -1;
|
| helper_->GetAttribLocationImmediate(
|
| program, name, result_shm_id(), result_shm_offset());
|
| WaitForCmd();
|
| - return *result;
|
| + return GetResultAs<GLint>();
|
| }
|
|
|
| GLint GLES2Implementation::GetUniformLocation(
|
| GLuint program, const char* name) {
|
| - typedef cmd::GetBucketSize::Result Result;
|
| - Result* result = GetResultAs<Result*>();
|
| - *result = -1;
|
| helper_->GetUniformLocationImmediate(
|
| program, name, result_shm_id(), result_shm_offset());
|
| WaitForCmd();
|
| - return *result;
|
| + return GetResultAs<GLint>();
|
| }
|
|
|
| void GLES2Implementation::PixelStorei(GLenum pname, GLint param) {
|
| @@ -247,10 +195,6 @@
|
|
|
| void GLES2Implementation::ShaderSource(
|
| GLuint shader, GLsizei count, const char** source, const GLint* length) {
|
| - if (count < 0) {
|
| - SetGLError(GL_INVALID_VALUE);
|
| - return;
|
| - }
|
| // TODO(gman): change to use buckets and check that there is enough room.
|
|
|
| // Compute the total size.
|
| @@ -289,15 +233,6 @@
|
|
|
| void GLES2Implementation::BufferSubData(
|
| GLenum target, GLintptr offset, GLsizeiptr size, const void* data) {
|
| - if (size == 0) {
|
| - return;
|
| - }
|
| -
|
| - if (size < 0) {
|
| - SetGLError(GL_INVALID_VALUE);
|
| - return;
|
| - }
|
| -
|
| const int8* source = static_cast<const int8*>(data);
|
| GLsizeiptr max_size = transfer_buffer_.GetLargestFreeOrPendingSize();
|
| while (size) {
|
| @@ -317,11 +252,7 @@
|
| void GLES2Implementation::CompressedTexImage2D(
|
| GLenum target, GLint level, GLenum internalformat, GLsizei width,
|
| GLsizei height, GLint border, GLsizei image_size, const void* data) {
|
| - if (width < 0 || height < 0 || level < 0) {
|
| - SetGLError(GL_INVALID_VALUE);
|
| - return;
|
| - }
|
| - // TODO(gman): Switch to use buckets always or at least if no room in shared
|
| + // TODO(gman): Switch to use buckets alwayst or at least if no room in shared
|
| // memory.
|
| DCHECK_LE(image_size,
|
| static_cast<GLsizei>(
|
| @@ -337,11 +268,7 @@
|
| void GLES2Implementation::CompressedTexSubImage2D(
|
| GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
|
| GLsizei height, GLenum format, GLsizei image_size, const void* data) {
|
| - if (width < 0 || height < 0 || level < 0) {
|
| - SetGLError(GL_INVALID_VALUE);
|
| - return;
|
| - }
|
| - // TODO(gman): Switch to use buckets always or at least if no room in shared
|
| + // TODO(gman): Switch to use buckets alwayst or at least if no room in shared
|
| // memory.
|
| DCHECK_LE(image_size,
|
| static_cast<GLsizei>(
|
| @@ -358,10 +285,6 @@
|
| GLenum target, GLint level, GLint internalformat, GLsizei width,
|
| GLsizei height, GLint border, GLenum format, GLenum type,
|
| const void* pixels) {
|
| - if (level < 0 || height < 0 || width < 0) {
|
| - SetGLError(GL_INVALID_VALUE);
|
| - return;
|
| - }
|
| helper_->TexImage2D(
|
| target, level, internalformat, width, height, border, format, type, 0, 0);
|
| if (pixels) {
|
| @@ -372,10 +295,6 @@
|
| void GLES2Implementation::TexSubImage2D(
|
| GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width,
|
| GLsizei height, GLenum format, GLenum type, const void* pixels) {
|
| - if (level < 0 || height < 0 || width < 0) {
|
| - SetGLError(GL_INVALID_VALUE);
|
| - return;
|
| - }
|
| const int8* source = static_cast<const int8*>(pixels);
|
| GLsizeiptr max_size = transfer_buffer_.GetLargestFreeOrPendingSize();
|
| GLsizeiptr unpadded_row_size = GLES2Util::ComputeImageDataSize(
|
| @@ -436,16 +355,8 @@
|
| void GLES2Implementation::GetActiveAttrib(
|
| GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
|
| GLenum* type, char* name) {
|
| - if (bufsize < 0) {
|
| - SetGLError(GL_INVALID_VALUE);
|
| - return;
|
| - }
|
| - // Clear the bucket so if we the command fails nothing will be in it.
|
| - helper_->SetBucketSize(kResultBucketId, 0);
|
| typedef gles2::GetActiveAttrib::Result Result;
|
| Result* result = static_cast<Result*>(result_buffer_);
|
| - // Set as failed so if the command fails we'll recover.
|
| - result->success = false;
|
| helper_->GetActiveAttrib(program, index, kResultBucketId,
|
| result_shm_id(), result_shm_offset());
|
| WaitForCmd();
|
| @@ -475,16 +386,8 @@
|
| void GLES2Implementation::GetActiveUniform(
|
| GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size,
|
| GLenum* type, char* name) {
|
| - if (bufsize < 0) {
|
| - SetGLError(GL_INVALID_VALUE);
|
| - return;
|
| - }
|
| - // Clear the bucket so if we the command fails nothing will be in it.
|
| - helper_->SetBucketSize(kResultBucketId, 0);
|
| typedef gles2::GetActiveUniform::Result Result;
|
| Result* result = static_cast<Result*>(result_buffer_);
|
| - // Set as failed so if the command fails we'll recover.
|
| - result->success = false;
|
| helper_->GetActiveUniform(program, index, kResultBucketId,
|
| result_shm_id(), result_shm_offset());
|
| WaitForCmd();
|
| @@ -513,10 +416,6 @@
|
|
|
| void GLES2Implementation::GetAttachedShaders(
|
| GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) {
|
| - if (maxcount < 0) {
|
| - SetGLError(GL_INVALID_VALUE);
|
| - return;
|
| - }
|
| typedef gles2::GetAttachedShaders::Result Result;
|
| uint32 size = Result::ComputeSize(maxcount);
|
| Result* result = transfer_buffer_.AllocTyped<Result>(size);
|
| @@ -534,6 +433,16 @@
|
| transfer_buffer_.FreePendingToken(result, token);
|
| }
|
|
|
| +void GLES2Implementation::GetProgramInfoLog(
|
| + GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) {
|
| + // TODO(gman): implement.
|
| +}
|
| +
|
| +void GLES2Implementation::GetShaderInfoLog(
|
| + GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) {
|
| + // TODO(gman): implement.
|
| +}
|
| +
|
| void GLES2Implementation::GetShaderPrecisionFormat(
|
| GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) {
|
| typedef gles2::GetShaderPrecisionFormat::Result Result;
|
| @@ -552,26 +461,14 @@
|
| }
|
| }
|
|
|
| +void GLES2Implementation::GetShaderSource(
|
| + GLuint shader, GLsizei bufsize, GLsizei* length, char* source) {
|
| + // TODO(gman): implement.
|
| +}
|
| +
|
| const GLubyte* GLES2Implementation::GetString(GLenum name) {
|
| - const char* result;
|
| - GLStringMap::const_iterator it = gl_strings_.find(name);
|
| - if (it != gl_strings_.end()) {
|
| - result = it->second.c_str();
|
| - } else {
|
| - // Clear the bucket so if we the command fails nothing will be in it.
|
| - helper_->SetBucketSize(kResultBucketId, 0);
|
| - helper_->GetString(name, kResultBucketId);
|
| - std::string str;
|
| - if (GetBucketAsString(kResultBucketId, &str)) {
|
| - std::pair<GLStringMap::const_iterator, bool> insert_result =
|
| - gl_strings_.insert(std::make_pair(name, str));
|
| - DCHECK(insert_result.second);
|
| - result = insert_result.first->second.c_str();
|
| - } else {
|
| - result = NULL;
|
| - }
|
| - }
|
| - return reinterpret_cast<const GLubyte*>(result);
|
| + // TODO(gman): implement.
|
| + return 0;
|
| }
|
|
|
| void GLES2Implementation::GetUniformfv(
|
| @@ -595,10 +492,6 @@
|
| GLenum type, void* pixels) {
|
| // Note: Negative widths and heights are not handled here but are handled
|
| // by the service side so the glGetError wrapping works.
|
| - if (width < 0 || height < 0) {
|
| - SetGLError(GL_INVALID_VALUE);
|
| - return;
|
| - }
|
| if (width == 0 || height == 0) {
|
| return;
|
| }
|
|
|