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

Unified Diff: gpu/command_buffer/service/gles2_cmd_decoder.cc

Issue 661220: Added support for glGetString, glGetShaderSource,... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 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 side-by-side diff with in-line comments
Download patch
Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
===================================================================
--- gpu/command_buffer/service/gles2_cmd_decoder.cc (revision 40176)
+++ gpu/command_buffer/service/gles2_cmd_decoder.cc (working copy)
@@ -103,53 +103,6 @@
#undef GLES2_CMD_OP
};
-namespace GLErrorBit {
-enum GLErrorBit {
- kNoError = 0,
- kInvalidEnum = (1 << 0),
- kInvalidValue = (1 << 1),
- kInvalidOperation = (1 << 2),
- kOutOfMemory = (1 << 3),
- kInvalidFrameBufferOperation = (1 << 4),
-};
-}
-
-uint32 GLErrorToErrorBit(GLenum error) {
- switch (error) {
- case GL_INVALID_ENUM:
- return GLErrorBit::kInvalidEnum;
- case GL_INVALID_VALUE:
- return GLErrorBit::kInvalidValue;
- case GL_INVALID_OPERATION:
- return GLErrorBit::kInvalidOperation;
- case GL_OUT_OF_MEMORY:
- return GLErrorBit::kOutOfMemory;
- case GL_INVALID_FRAMEBUFFER_OPERATION:
- return GLErrorBit::kInvalidFrameBufferOperation;
- default:
- DCHECK(false);
- return GLErrorBit::kNoError;
- }
-}
-
-GLenum GLErrorBitToGLError(uint32 error_bit) {
- switch (error_bit) {
- case GLErrorBit::kInvalidEnum:
- return GL_INVALID_ENUM;
- case GLErrorBit::kInvalidValue:
- return GL_INVALID_VALUE;
- case GLErrorBit::kInvalidOperation:
- return GL_INVALID_OPERATION;
- case GLErrorBit::kOutOfMemory:
- return GL_OUT_OF_MEMORY;
- case GLErrorBit::kInvalidFrameBufferOperation:
- return GL_INVALID_FRAMEBUFFER_OPERATION;
- default:
- DCHECK(false);
- return GL_NO_ERROR;
- }
-}
-
// } // anonymous namespace.
GLES2Decoder::GLES2Decoder(ContextGroup* group)
@@ -488,6 +441,9 @@
// Wrapper for glGenerateMipmap
void DoGenerateMipmap(GLenum target);
+ // Wrapper for glGetShaderiv
+ void DoGetShaderiv(GLuint shader, GLenum pname, GLint* params);
+
// Wrapper for glGetShaderSource.
void DoGetShaderSource(
GLuint shader, GLsizei bufsize, GLsizei* length, char* dst);
@@ -1802,7 +1758,7 @@
if (error == GL_NO_ERROR && error_bits_ != 0) {
for (uint32 mask = 1; mask != 0; mask = mask << 1) {
if ((error_bits_ & mask) != 0) {
- error = GLErrorBitToGLError(mask);
+ error = GLES2Util::GLErrorBitToGLError(mask);
break;
}
}
@@ -1810,13 +1766,13 @@
if (error != GL_NO_ERROR) {
// There was an error, clear the corresponding wrapped error.
- error_bits_ &= ~GLErrorToErrorBit(error);
+ error_bits_ &= ~GLES2Util::GLErrorToErrorBit(error);
}
return error;
}
void GLES2DecoderImpl::SetGLError(GLenum error) {
- error_bits_ |= GLErrorToErrorBit(error);
+ error_bits_ |= GLES2Util::GLErrorToErrorBit(error);
}
void GLES2DecoderImpl::CopyRealGLErrorsToWrapper() {
@@ -2048,6 +2004,20 @@
glCompileShader(shader);
};
+void GLES2DecoderImpl::DoGetShaderiv(
+ GLuint shader, GLenum pname, GLint* params) {
+ ShaderManager::ShaderInfo* info = GetShaderInfo(shader);
+ if (!info) {
+ SetGLError(GL_INVALID_OPERATION);
+ return;
+ }
+ if (pname == GL_SHADER_SOURCE_LENGTH) {
+ *params = info->source().size();
+ } else {
+ glGetShaderiv(shader, pname, params);
+ }
+}
+
void GLES2DecoderImpl::DoGetShaderSource(
GLuint shader, GLsizei bufsize, GLsizei* length, char* dst) {
ShaderManager::ShaderInfo* info = GetShaderInfo(shader);
@@ -2277,6 +2247,18 @@
return error::kNoError;
}
+error::Error GLES2DecoderImpl::HandleGetString(
+ uint32 immediate_data_size, const gles2::GetString& c) {
+ GLenum name = static_cast<GLenum>(c.name);
+ if (!ValidateGLenumStringType(name)) {
+ SetGLError(GL_INVALID_ENUM);
+ return error::kNoError;
+ }
+ Bucket* bucket = CreateBucket(c.bucket_id);
+ bucket->SetFromString(reinterpret_cast<const char*>(glGetString(name)));
+ return error::kNoError;
+}
+
error::Error GLES2DecoderImpl::HandleBufferData(
uint32 immediate_data_size, const gles2::BufferData& c) {
GLenum target = static_cast<GLenum>(c.target);
@@ -2437,8 +2419,6 @@
target, level, internal_format, width, height, border, image_size, data);
}
-// TODO(gman): handle CopyTexImage2D because we need to track what was created.
-
error::Error GLES2DecoderImpl::DoTexImage2D(
GLenum target,
GLint level,
« no previous file with comments | « gpu/command_buffer/service/common_decoder.cc ('k') | gpu/command_buffer/service/gles2_cmd_decoder_autogen.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698