diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-15 22:55:05 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-06-15 22:55:05 +0000 |
commit | 9438b01d71983b665a9490fc5255712137f6c238 (patch) | |
tree | f3b56482b064e294aad7fae1cae8bb949d56ed69 /gpu | |
parent | 5e1a06af1598eec1daea4689c93b719d9ea5200f (diff) | |
download | chromium_src-9438b01d71983b665a9490fc5255712137f6c238.zip chromium_src-9438b01d71983b665a9490fc5255712137f6c238.tar.gz chromium_src-9438b01d71983b665a9490fc5255712137f6c238.tar.bz2 |
Refactor validation code so it can be modified at runtime.
I'll move the DXT stuff out after this CL lands.
TEST=ran unit and conformance tests
BUG=44368
Review URL: http://codereview.chromium.org/2689006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49850 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rwxr-xr-x | gpu/command_buffer/build_gles2_cmd_buffer.py | 89 | ||||
-rw-r--r-- | gpu/command_buffer/service/context_group.h | 7 | ||||
-rw-r--r-- | gpu/command_buffer/service/gl_utils.h | 1 | ||||
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_decoder.cc | 61 | ||||
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_decoder_autogen.h | 190 | ||||
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_validation.cc | 11 | ||||
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_validation.h | 28 | ||||
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_validation_autogen.h | 86 | ||||
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h | 1115 |
9 files changed, 785 insertions, 803 deletions
diff --git a/gpu/command_buffer/build_gles2_cmd_buffer.py b/gpu/command_buffer/build_gles2_cmd_buffer.py index 1b7df40..b60c801 100755 --- a/gpu/command_buffer/build_gles2_cmd_buffer.py +++ b/gpu/command_buffer/build_gles2_cmd_buffer.py @@ -160,9 +160,9 @@ GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat x, GLfl GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat* v); GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint x, GLint y, GLint z, GLint w); GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint* v); -GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLbooleanFalse transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLbooleanFalse transpose, const GLfloat* value); -GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLbooleanFalse transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLbooleanFalseOnly transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLbooleanFalseOnly transpose, const GLfloat* value); +GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLbooleanFalseOnly transpose, const GLfloat* value); GL_APICALL void GL_APIENTRY glUseProgram (GLidZeroProgram program); GL_APICALL void GL_APIENTRY glValidateProgram (GLidProgram program); GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint indx, GLfloat x); @@ -947,7 +947,7 @@ _ENUM_LISTS = { '5', ], }, - 'False': { + 'FalseOnly': { 'type': 'GLboolean', 'valid': [ 'false', @@ -1452,6 +1452,47 @@ _FUNCTION_INFO = { } +def SplitWords(input_string): + """Transforms a input_string into a list of lower-case components. + + Args: + input_string: the input string. + + Returns: + a list of lower-case words. + """ + if input_string.find('_') > -1: + # 'some_TEXT_' -> 'some text' + return input_string.replace('_', ' ').strip().lower().split() + else: + if re.search('[A-Z]', input_string) and re.search('[a-z]', input_string): + # mixed case. + # look for capitalization to cut input_strings + # 'SomeText' -> 'Some Text' + input_string = re.sub('([A-Z])', r' \1', input_string).strip() + # 'Vector3' -> 'Vector 3' + input_string = re.sub('([^0-9])([0-9])', r'\1 \2', input_string) + return input_string.lower().split() + + +def Lower(words): + """Makes a lower-case identifier from words. + + Args: + words: a list of lower-case words. + + Returns: + the lower-case identifier. + """ + return '_'.join(words) + + +def ToUnderscore(input_string): + """converts CamelCase to camel_case.""" + words = SplitWords(input_string) + return Lower(words) + + class CWriter(object): """Writes to a file formatting it for Google's style guidelines.""" @@ -3906,10 +3947,12 @@ class EnumBaseArgument(Argument): self.local_type = type self.gl_error = gl_error name = type[len(gl_type):] + self.type_name = name self.enum_info = _ENUM_LISTS[name] def WriteValidationCode(self, file, func): - file.Write(" if (!Validate%s(%s)) {\n" % (self.local_type, self.name)) + file.Write(" if (!validators_->%s.IsValid(%s)) {\n" % + (ToUnderscore(self.type_name), self.name)) file.Write(" SetGLError(%s, \"gl%s: %s %s\");\n" % (self.gl_error, func.original_name, self.name, self.gl_error)) file.Write(" return error::kNoError;\n") @@ -4902,24 +4945,40 @@ class GLGenerator(object): """Writes the gles2 auto generated utility header.""" file = CHeaderWriter(filename) for enum in sorted(_ENUM_LISTS.keys()): - file.Write("bool Validate%s%s(GLenum value);\n" % (_ENUM_LISTS[enum]['type'], enum)) + file.Write("ValueValidator<%s> %s;\n" % + (_ENUM_LISTS[enum]['type'], ToUnderscore(enum))) file.Write("\n") file.Close() def WriteServiceUtilsImplementation(self, filename): """Writes the gles2 auto generated utility implementation.""" file = CHeaderWriter(filename) - for enum in sorted(_ENUM_LISTS.keys()): - file.Write("bool Validate%s%s(GLenum value) {\n" % (_ENUM_LISTS[enum]['type'], enum)) - file.Write(" switch (value) {\n") + enums = sorted(_ENUM_LISTS.keys()) + for enum in enums: + file.Write("static %s valid_%s_table[] = {\n" % + (_ENUM_LISTS[enum]['type'], ToUnderscore(enum))) for value in _ENUM_LISTS[enum]['valid']: - file.Write(" case %s:\n" % value) - file.Write(" return true;\n") - file.Write(" default:\n") - file.Write(" return false;\n") - file.Write(" }\n") - file.Write("}\n") + file.Write(" %s,\n" % value) + file.Write("};\n") file.Write("\n") + file.Write("Validators::Validators()\n") + pre = ': ' + post = ',' + count = 0 + for enum in enums: + count += 1 + if count == len(enums): + post = ' {' + code = """ %(pre)s%(name)s( + valid_%(name)s_table, arraysize(valid_%(name)s_table))%(post)s +""" + file.Write(code % { + 'name': ToUnderscore(enum), + 'pre': pre, + 'post': post, + }) + pre = ' ' + file.Write("}\n"); file.Close() diff --git a/gpu/command_buffer/service/context_group.h b/gpu/command_buffer/service/context_group.h index 12fa7b6..477983f 100644 --- a/gpu/command_buffer/service/context_group.h +++ b/gpu/command_buffer/service/context_group.h @@ -9,6 +9,7 @@ #include "base/basictypes.h" #include "base/linked_ptr.h" #include "base/scoped_ptr.h" +#include "gpu/command_buffer/service/gles2_cmd_validation.h" namespace gpu { @@ -88,6 +89,10 @@ class ContextGroup { IdAllocator* GetIdAllocator(unsigned namepsace_id); + const Validators* validators() const { + return &validators_; + } + private: // Whether or not this context is initialized. bool initialized_; @@ -115,6 +120,8 @@ class ContextGroup { typedef std::map<uint32, linked_ptr<IdAllocator> > IdAllocatorMap; IdAllocatorMap id_namespaces_; + Validators validators_; + DISALLOW_COPY_AND_ASSIGN(ContextGroup); }; diff --git a/gpu/command_buffer/service/gl_utils.h b/gpu/command_buffer/service/gl_utils.h index 2e59179..daa1603 100644 --- a/gpu/command_buffer/service/gl_utils.h +++ b/gpu/command_buffer/service/gl_utils.h @@ -27,6 +27,7 @@ #define GL_SHADER_BINARY_FORMATS 0x8DF8 #define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 #define GL_SHADER_COMPILER 0x8DFA +#define GL_RGB565 0x8D62 #define GL_GLEXT_PROTOTYPES 1 diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index 8d8ccb0..508e0b3 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc @@ -1039,8 +1039,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, error::Error* error, GLuint* service_id, void** result, GLenum* result_type); - bool ValidateGLenumCompressedTextureInternalFormat(GLenum format); - // Generate a member function prototype for each command in an automated and // typesafe way. #define GLES2_CMD_OP(name) \ @@ -1146,6 +1144,9 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, bool use_shader_translator_; + // Cached from the context group. + const Validators* validators_; + DISALLOW_COPY_AND_ASSIGN(GLES2DecoderImpl); }; @@ -1407,7 +1408,8 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group) black_2d_texture_id_(0), black_cube_texture_id_(0), anti_aliased_(false), - use_shader_translator_(true) { + use_shader_translator_(true), + validators_(group->validators()) { attrib_0_value_.v[0] = 0.0f; attrib_0_value_.v[1] = 0.0f; attrib_0_value_.v[2] = 0.0f; @@ -2028,11 +2030,6 @@ bool GLES2DecoderImpl::CreateShaderHelper(GLenum type, GLuint client_id) { return true; } -bool GLES2DecoderImpl::ValidateGLenumCompressedTextureInternalFormat(GLenum) { - // TODO(gman): Add support for compressed texture formats. - return false; -} - void GLES2DecoderImpl::DoActiveTexture(GLenum texture_unit) { GLuint texture_index = texture_unit - GL_TEXTURE0; if (texture_index > group_->max_texture_units()) { @@ -3155,11 +3152,11 @@ error::Error GLES2DecoderImpl::HandleDrawElements( SetGLError(GL_INVALID_VALUE, "glDrawElements: offset < 0"); return error::kNoError; } - if (!ValidateGLenumDrawMode(mode)) { + if (!validators_->draw_mode.IsValid(mode)) { SetGLError(GL_INVALID_ENUM, "glDrawElements: mode GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumIndexType(type)) { + if (!validators_->index_type.IsValid(type)) { SetGLError(GL_INVALID_ENUM, "glDrawElements: type GL_INVALID_ENUM"); return error::kNoError; } @@ -3685,12 +3682,12 @@ error::Error GLES2DecoderImpl::HandleVertexAttribPointer( GLsizei stride = c.stride; GLsizei offset = c.offset; const void* ptr = reinterpret_cast<const void*>(offset); - if (!ValidateGLenumVertexAttribType(type)) { + if (!validators_->vertex_attrib_type.IsValid(type)) { SetGLError(GL_INVALID_ENUM, "glVertexAttribPointer: type GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLintVertexAttribSize(size)) { + if (!validators_->vertex_attrib_size.IsValid(size)) { SetGLError(GL_INVALID_ENUM, "glVertexAttribPointer: size GL_INVALID_VALUE"); return error::kNoError; @@ -3759,11 +3756,11 @@ error::Error GLES2DecoderImpl::HandleReadPixels( return error::kOutOfBounds; } - if (!ValidateGLenumReadPixelFormat(format)) { + if (!validators_->read_pixel_format.IsValid(format)) { SetGLError(GL_INVALID_ENUM, "glReadPixels: format GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumPixelType(type)) { + if (!validators_->pixel_type.IsValid(type)) { SetGLError(GL_INVALID_ENUM, "glReadPixels: type GL_INVALID_ENUM"); return error::kNoError; } @@ -3846,11 +3843,11 @@ error::Error GLES2DecoderImpl::HandlePixelStorei( uint32 immediate_data_size, const gles2::PixelStorei& c) { GLenum pname = c.pname; GLenum param = c.param; - if (!ValidateGLenumPixelStore(pname)) { + if (!validators_->pixel_store.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glPixelStorei: pname GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLintPixelStoreAlignment(param)) { + if (!validators_->pixel_store_alignment.IsValid(param)) { SetGLError(GL_INVALID_VALUE, "glPixelSTore: param GL_INVALID_VALUE"); return error::kNoError; } @@ -4006,7 +4003,7 @@ error::Error GLES2DecoderImpl::HandleGetUniformLocationBucket( error::Error GLES2DecoderImpl::HandleGetString( uint32 immediate_data_size, const gles2::GetString& c) { GLenum name = static_cast<GLenum>(c.name); - if (!ValidateGLenumStringType(name)) { + if (!validators_->string_type.IsValid(name)) { SetGLError(GL_INVALID_ENUM, "glGetString: name GL_INVALID_ENUM"); return error::kNoError; } @@ -4033,11 +4030,11 @@ error::Error GLES2DecoderImpl::HandleGetString( void GLES2DecoderImpl::DoBufferData( GLenum target, GLsizeiptr size, const GLvoid * data, GLenum usage) { - if (!ValidateGLenumBufferTarget(target)) { + if (!validators_->buffer_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glBufferData: target GL_INVALID_ENUM"); return; } - if (!ValidateGLenumBufferUsage(usage)) { + if (!validators_->buffer_usage.IsValid(usage)) { SetGLError(GL_INVALID_ENUM, "glBufferData: usage GL_INVALID_ENUM"); return; } @@ -4124,12 +4121,13 @@ error::Error GLES2DecoderImpl::DoCompressedTexImage2D( GLsizei image_size, const void* data) { // TODO(gman): Validate image_size is correct for width, height and format. - if (!ValidateGLenumTextureTarget(target)) { + if (!validators_->texture_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glCompressedTexImage2D: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumCompressedTextureInternalFormat(internal_format)) { + if (!validators_->compressed_texture_format.IsValid( + internal_format)) { SetGLError(GL_INVALID_ENUM, "glCompressedTexImage2D: internal_format GL_INVALID_ENUM"); return error::kNoError; @@ -4228,11 +4226,16 @@ error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2DBucket( uint32 data_size = bucket->size(); GLsizei imageSize = data_size; const void* data = bucket->GetData(0, data_size); - if (!ValidateGLenumTextureTarget(target)) { + if (!validators_->texture_target.IsValid(target)) { SetGLError( GL_INVALID_ENUM, "glCompressedTexSubImage2D: target GL_INVALID_ENUM"); return error::kNoError; } + if (!validators_->compressed_texture_format.IsValid(format)) { + SetGLError(GL_INVALID_ENUM, + "glCompressedTexSubImage2D: format GL_INVALID_ENUM"); + return error::kNoError; + } if (width < 0) { SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: width < 0"); return error::kNoError; @@ -4261,20 +4264,20 @@ error::Error GLES2DecoderImpl::DoTexImage2D( GLenum type, const void* pixels, uint32 pixels_size) { - if (!ValidateGLenumTextureTarget(target)) { + if (!validators_->texture_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glTexImage2D: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumTextureFormat(internal_format)) { + if (!validators_->texture_format.IsValid(internal_format)) { SetGLError(GL_INVALID_ENUM, "glTexImage2D: internal_format GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumTextureFormat(format)) { + if (!validators_->texture_format.IsValid(format)) { SetGLError(GL_INVALID_ENUM, "glTexImage2D: format GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumPixelType(type)) { + if (!validators_->pixel_type.IsValid(type)) { SetGLError(GL_INVALID_ENUM, "glTexImage2D: type GL_INVALID_ENUM"); return error::kNoError; } @@ -4373,7 +4376,7 @@ error::Error GLES2DecoderImpl::HandleGetVertexAttribPointerv( if (result->size != 0) { return error::kInvalidArguments; } - if (!ValidateGLenumVertexPointer(pname)) { + if (!validators_->vertex_pointer.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glGetVertexAttribPointerv: pname GL_INVALID_ENUM"); return error::kNoError; @@ -4503,12 +4506,12 @@ error::Error GLES2DecoderImpl::HandleGetShaderPrecisionFormat( if (result->success != 0) { return error::kInvalidArguments; } - if (!ValidateGLenumShaderType(shader_type)) { + if (!validators_->shader_type.IsValid(shader_type)) { SetGLError(GL_INVALID_ENUM, "glGetShaderPrecisionFormat: shader_type GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumShaderPrecision(precision_type)) { + if (!validators_->shader_precision.IsValid(precision_type)) { SetGLError(GL_INVALID_ENUM, "glGetShaderPrecisionFormat: precision_type GL_INVALID_ENUM"); return error::kNoError; diff --git a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h index d6de595..c7aca37 100644 --- a/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_decoder_autogen.h @@ -27,7 +27,7 @@ error::Error GLES2DecoderImpl::HandleBindBuffer( uint32 immediate_data_size, const gles2::BindBuffer& c) { GLenum target = static_cast<GLenum>(c.target); GLuint buffer = c.buffer; - if (!ValidateGLenumBufferTarget(target)) { + if (!validators_->buffer_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glBindBuffer: target GL_INVALID_ENUM"); return error::kNoError; } @@ -39,7 +39,7 @@ error::Error GLES2DecoderImpl::HandleBindFramebuffer( uint32 immediate_data_size, const gles2::BindFramebuffer& c) { GLenum target = static_cast<GLenum>(c.target); GLuint framebuffer = c.framebuffer; - if (!ValidateGLenumFrameBufferTarget(target)) { + if (!validators_->frame_buffer_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glBindFramebuffer: target GL_INVALID_ENUM"); return error::kNoError; } @@ -51,7 +51,7 @@ error::Error GLES2DecoderImpl::HandleBindRenderbuffer( uint32 immediate_data_size, const gles2::BindRenderbuffer& c) { GLenum target = static_cast<GLenum>(c.target); GLuint renderbuffer = c.renderbuffer; - if (!ValidateGLenumRenderBufferTarget(target)) { + if (!validators_->render_buffer_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glBindRenderbuffer: target GL_INVALID_ENUM"); return error::kNoError; } @@ -63,7 +63,7 @@ error::Error GLES2DecoderImpl::HandleBindTexture( uint32 immediate_data_size, const gles2::BindTexture& c) { GLenum target = static_cast<GLenum>(c.target); GLuint texture = c.texture; - if (!ValidateGLenumTextureBindTarget(target)) { + if (!validators_->texture_bind_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glBindTexture: target GL_INVALID_ENUM"); return error::kNoError; } @@ -84,7 +84,7 @@ error::Error GLES2DecoderImpl::HandleBlendColor( error::Error GLES2DecoderImpl::HandleBlendEquation( uint32 immediate_data_size, const gles2::BlendEquation& c) { GLenum mode = static_cast<GLenum>(c.mode); - if (!ValidateGLenumEquation(mode)) { + if (!validators_->equation.IsValid(mode)) { SetGLError(GL_INVALID_ENUM, "glBlendEquation: mode GL_INVALID_ENUM"); return error::kNoError; } @@ -96,12 +96,12 @@ error::Error GLES2DecoderImpl::HandleBlendEquationSeparate( uint32 immediate_data_size, const gles2::BlendEquationSeparate& c) { GLenum modeRGB = static_cast<GLenum>(c.modeRGB); GLenum modeAlpha = static_cast<GLenum>(c.modeAlpha); - if (!ValidateGLenumEquation(modeRGB)) { + if (!validators_->equation.IsValid(modeRGB)) { SetGLError( GL_INVALID_ENUM, "glBlendEquationSeparate: modeRGB GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumEquation(modeAlpha)) { + if (!validators_->equation.IsValid(modeAlpha)) { SetGLError( GL_INVALID_ENUM, "glBlendEquationSeparate: modeAlpha GL_INVALID_ENUM"); return error::kNoError; @@ -114,11 +114,11 @@ error::Error GLES2DecoderImpl::HandleBlendFunc( uint32 immediate_data_size, const gles2::BlendFunc& c) { GLenum sfactor = static_cast<GLenum>(c.sfactor); GLenum dfactor = static_cast<GLenum>(c.dfactor); - if (!ValidateGLenumSrcBlendFactor(sfactor)) { + if (!validators_->src_blend_factor.IsValid(sfactor)) { SetGLError(GL_INVALID_ENUM, "glBlendFunc: sfactor GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumDstBlendFactor(dfactor)) { + if (!validators_->dst_blend_factor.IsValid(dfactor)) { SetGLError(GL_INVALID_ENUM, "glBlendFunc: dfactor GL_INVALID_ENUM"); return error::kNoError; } @@ -132,20 +132,20 @@ error::Error GLES2DecoderImpl::HandleBlendFuncSeparate( GLenum dstRGB = static_cast<GLenum>(c.dstRGB); GLenum srcAlpha = static_cast<GLenum>(c.srcAlpha); GLenum dstAlpha = static_cast<GLenum>(c.dstAlpha); - if (!ValidateGLenumSrcBlendFactor(srcRGB)) { + if (!validators_->src_blend_factor.IsValid(srcRGB)) { SetGLError(GL_INVALID_ENUM, "glBlendFuncSeparate: srcRGB GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumDstBlendFactor(dstRGB)) { + if (!validators_->dst_blend_factor.IsValid(dstRGB)) { SetGLError(GL_INVALID_ENUM, "glBlendFuncSeparate: dstRGB GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumSrcBlendFactor(srcAlpha)) { + if (!validators_->src_blend_factor.IsValid(srcAlpha)) { SetGLError( GL_INVALID_ENUM, "glBlendFuncSeparate: srcAlpha GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumDstBlendFactor(dstAlpha)) { + if (!validators_->dst_blend_factor.IsValid(dstAlpha)) { SetGLError( GL_INVALID_ENUM, "glBlendFuncSeparate: dstAlpha GL_INVALID_ENUM"); return error::kNoError; @@ -162,7 +162,7 @@ error::Error GLES2DecoderImpl::HandleBufferSubData( uint32 data_size = size; const void* data = GetSharedMemoryAs<const void*>( c.data_shm_id, c.data_shm_offset, data_size); - if (!ValidateGLenumBufferTarget(target)) { + if (!validators_->buffer_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glBufferSubData: target GL_INVALID_ENUM"); return error::kNoError; } @@ -185,7 +185,7 @@ error::Error GLES2DecoderImpl::HandleBufferSubDataImmediate( uint32 data_size = size; const void* data = GetImmediateDataAs<const void*>( c, data_size, immediate_data_size); - if (!ValidateGLenumBufferTarget(target)) { + if (!validators_->buffer_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glBufferSubData: target GL_INVALID_ENUM"); return error::kNoError; } @@ -209,7 +209,7 @@ error::Error GLES2DecoderImpl::HandleCheckFramebufferStatus( if (!result_dst) { return error::kOutOfBounds; } - if (!ValidateGLenumFrameBufferTarget(target)) { + if (!validators_->frame_buffer_target.IsValid(target)) { SetGLError( GL_INVALID_ENUM, "glCheckFramebufferStatus: target GL_INVALID_ENUM"); return error::kNoError; @@ -279,7 +279,7 @@ error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2D( uint32 data_size = imageSize; const void* data = GetSharedMemoryAs<const void*>( c.data_shm_id, c.data_shm_offset, data_size); - if (!ValidateGLenumTextureTarget(target)) { + if (!validators_->texture_target.IsValid(target)) { SetGLError( GL_INVALID_ENUM, "glCompressedTexSubImage2D: target GL_INVALID_ENUM"); return error::kNoError; @@ -292,7 +292,7 @@ error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2D( SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: height < 0"); return error::kNoError; } - if (!ValidateGLenumCompressedTextureFormat(format)) { + if (!validators_->compressed_texture_format.IsValid(format)) { SetGLError( GL_INVALID_ENUM, "glCompressedTexSubImage2D: format GL_INVALID_ENUM"); return error::kNoError; @@ -323,7 +323,7 @@ error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2DImmediate( uint32 data_size = imageSize; const void* data = GetImmediateDataAs<const void*>( c, data_size, immediate_data_size); - if (!ValidateGLenumTextureTarget(target)) { + if (!validators_->texture_target.IsValid(target)) { SetGLError( GL_INVALID_ENUM, "glCompressedTexSubImage2D: target GL_INVALID_ENUM"); return error::kNoError; @@ -336,7 +336,7 @@ error::Error GLES2DecoderImpl::HandleCompressedTexSubImage2DImmediate( SetGLError(GL_INVALID_VALUE, "glCompressedTexSubImage2D: height < 0"); return error::kNoError; } - if (!ValidateGLenumCompressedTextureFormat(format)) { + if (!validators_->compressed_texture_format.IsValid(format)) { SetGLError( GL_INVALID_ENUM, "glCompressedTexSubImage2D: format GL_INVALID_ENUM"); return error::kNoError; @@ -363,7 +363,7 @@ error::Error GLES2DecoderImpl::HandleCopyTexImage2D( GLsizei width = static_cast<GLsizei>(c.width); GLsizei height = static_cast<GLsizei>(c.height); GLint border = static_cast<GLint>(c.border); - if (!ValidateGLenumTextureTarget(target)) { + if (!validators_->texture_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glCopyTexImage2D: target GL_INVALID_ENUM"); return error::kNoError; } @@ -389,7 +389,7 @@ error::Error GLES2DecoderImpl::HandleCopyTexSubImage2D( GLint y = static_cast<GLint>(c.y); GLsizei width = static_cast<GLsizei>(c.width); GLsizei height = static_cast<GLsizei>(c.height); - if (!ValidateGLenumTextureTarget(target)) { + if (!validators_->texture_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glCopyTexSubImage2D: target GL_INVALID_ENUM"); return error::kNoError; } @@ -417,7 +417,7 @@ error::Error GLES2DecoderImpl::HandleCreateProgram( error::Error GLES2DecoderImpl::HandleCreateShader( uint32 immediate_data_size, const gles2::CreateShader& c) { GLenum type = static_cast<GLenum>(c.type); - if (!ValidateGLenumShaderType(type)) { + if (!validators_->shader_type.IsValid(type)) { SetGLError(GL_INVALID_ENUM, "glCreateShader: type GL_INVALID_ENUM"); return error::kNoError; } @@ -431,7 +431,7 @@ error::Error GLES2DecoderImpl::HandleCreateShader( error::Error GLES2DecoderImpl::HandleCullFace( uint32 immediate_data_size, const gles2::CullFace& c) { GLenum mode = static_cast<GLenum>(c.mode); - if (!ValidateGLenumFaceType(mode)) { + if (!validators_->face_type.IsValid(mode)) { SetGLError(GL_INVALID_ENUM, "glCullFace: mode GL_INVALID_ENUM"); return error::kNoError; } @@ -602,7 +602,7 @@ error::Error GLES2DecoderImpl::HandleDeleteTexturesImmediate( error::Error GLES2DecoderImpl::HandleDepthFunc( uint32 immediate_data_size, const gles2::DepthFunc& c) { GLenum func = static_cast<GLenum>(c.func); - if (!ValidateGLenumCmpFunction(func)) { + if (!validators_->cmp_function.IsValid(func)) { SetGLError(GL_INVALID_ENUM, "glDepthFunc: func GL_INVALID_ENUM"); return error::kNoError; } @@ -636,7 +636,7 @@ error::Error GLES2DecoderImpl::HandleDetachShader( error::Error GLES2DecoderImpl::HandleDisable( uint32 immediate_data_size, const gles2::Disable& c) { GLenum cap = static_cast<GLenum>(c.cap); - if (!ValidateGLenumCapability(cap)) { + if (!validators_->capability.IsValid(cap)) { SetGLError(GL_INVALID_ENUM, "glDisable: cap GL_INVALID_ENUM"); return error::kNoError; } @@ -656,7 +656,7 @@ error::Error GLES2DecoderImpl::HandleDrawArrays( GLenum mode = static_cast<GLenum>(c.mode); GLint first = static_cast<GLint>(c.first); GLsizei count = static_cast<GLsizei>(c.count); - if (!ValidateGLenumDrawMode(mode)) { + if (!validators_->draw_mode.IsValid(mode)) { SetGLError(GL_INVALID_ENUM, "glDrawArrays: mode GL_INVALID_ENUM"); return error::kNoError; } @@ -671,7 +671,7 @@ error::Error GLES2DecoderImpl::HandleDrawArrays( error::Error GLES2DecoderImpl::HandleEnable( uint32 immediate_data_size, const gles2::Enable& c) { GLenum cap = static_cast<GLenum>(c.cap); - if (!ValidateGLenumCapability(cap)) { + if (!validators_->capability.IsValid(cap)) { SetGLError(GL_INVALID_ENUM, "glEnable: cap GL_INVALID_ENUM"); return error::kNoError; } @@ -704,18 +704,18 @@ error::Error GLES2DecoderImpl::HandleFramebufferRenderbuffer( GLenum attachment = static_cast<GLenum>(c.attachment); GLenum renderbuffertarget = static_cast<GLenum>(c.renderbuffertarget); GLuint renderbuffer = c.renderbuffer; - if (!ValidateGLenumFrameBufferTarget(target)) { + if (!validators_->frame_buffer_target.IsValid(target)) { SetGLError( GL_INVALID_ENUM, "glFramebufferRenderbuffer: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumAttachment(attachment)) { + if (!validators_->attachment.IsValid(attachment)) { SetGLError( GL_INVALID_ENUM, "glFramebufferRenderbuffer: attachment GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumRenderBufferTarget(renderbuffertarget)) { + if (!validators_->render_buffer_target.IsValid(renderbuffertarget)) { SetGLError( GL_INVALID_ENUM, "glFramebufferRenderbuffer: renderbuffertarget GL_INVALID_ENUM"); @@ -733,17 +733,17 @@ error::Error GLES2DecoderImpl::HandleFramebufferTexture2D( GLenum textarget = static_cast<GLenum>(c.textarget); GLuint texture = c.texture; GLint level = static_cast<GLint>(c.level); - if (!ValidateGLenumFrameBufferTarget(target)) { + if (!validators_->frame_buffer_target.IsValid(target)) { SetGLError( GL_INVALID_ENUM, "glFramebufferTexture2D: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumAttachment(attachment)) { + if (!validators_->attachment.IsValid(attachment)) { SetGLError( GL_INVALID_ENUM, "glFramebufferTexture2D: attachment GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumTextureTarget(textarget)) { + if (!validators_->texture_target.IsValid(textarget)) { SetGLError( GL_INVALID_ENUM, "glFramebufferTexture2D: textarget GL_INVALID_ENUM"); return error::kNoError; @@ -755,7 +755,7 @@ error::Error GLES2DecoderImpl::HandleFramebufferTexture2D( error::Error GLES2DecoderImpl::HandleFrontFace( uint32 immediate_data_size, const gles2::FrontFace& c) { GLenum mode = static_cast<GLenum>(c.mode); - if (!ValidateGLenumFaceMode(mode)) { + if (!validators_->face_mode.IsValid(mode)) { SetGLError(GL_INVALID_ENUM, "glFrontFace: mode GL_INVALID_ENUM"); return error::kNoError; } @@ -810,7 +810,7 @@ error::Error GLES2DecoderImpl::HandleGenBuffersImmediate( error::Error GLES2DecoderImpl::HandleGenerateMipmap( uint32 immediate_data_size, const gles2::GenerateMipmap& c) { GLenum target = static_cast<GLenum>(c.target); - if (!ValidateGLenumTextureBindTarget(target)) { + if (!validators_->texture_bind_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glGenerateMipmap: target GL_INVALID_ENUM"); return error::kNoError; } @@ -959,7 +959,7 @@ error::Error GLES2DecoderImpl::HandleGetBooleanv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLboolean* params = result ? result->GetData() : NULL; - if (!ValidateGLenumGLState(pname)) { + if (!validators_->g_l_state.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glGetBooleanv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -991,12 +991,12 @@ error::Error GLES2DecoderImpl::HandleGetBufferParameteriv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLint* params = result ? result->GetData() : NULL; - if (!ValidateGLenumBufferTarget(target)) { + if (!validators_->buffer_target.IsValid(target)) { SetGLError( GL_INVALID_ENUM, "glGetBufferParameteriv: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumBufferParameter(pname)) { + if (!validators_->buffer_parameter.IsValid(pname)) { SetGLError( GL_INVALID_ENUM, "glGetBufferParameteriv: pname GL_INVALID_ENUM"); return error::kNoError; @@ -1040,7 +1040,7 @@ error::Error GLES2DecoderImpl::HandleGetFloatv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLfloat* params = result ? result->GetData() : NULL; - if (!ValidateGLenumGLState(pname)) { + if (!validators_->g_l_state.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glGetFloatv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1074,19 +1074,19 @@ error::Error GLES2DecoderImpl::HandleGetFramebufferAttachmentParameteriv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLint* params = result ? result->GetData() : NULL; - if (!ValidateGLenumFrameBufferTarget(target)) { + if (!validators_->frame_buffer_target.IsValid(target)) { SetGLError( GL_INVALID_ENUM, "glGetFramebufferAttachmentParameteriv: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumAttachment(attachment)) { + if (!validators_->attachment.IsValid(attachment)) { SetGLError( GL_INVALID_ENUM, "glGetFramebufferAttachmentParameteriv: attachment GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumFrameBufferParameter(pname)) { + if (!validators_->frame_buffer_parameter.IsValid(pname)) { SetGLError( GL_INVALID_ENUM, "glGetFramebufferAttachmentParameteriv: pname GL_INVALID_ENUM"); @@ -1119,7 +1119,7 @@ error::Error GLES2DecoderImpl::HandleGetIntegerv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLint* params = result ? result->GetData() : NULL; - if (!ValidateGLenumGLState(pname)) { + if (!validators_->g_l_state.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glGetIntegerv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1151,7 +1151,7 @@ error::Error GLES2DecoderImpl::HandleGetProgramiv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLint* params = result ? result->GetData() : NULL; - if (!ValidateGLenumProgramParameter(pname)) { + if (!validators_->program_parameter.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glGetProgramiv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1183,13 +1183,13 @@ error::Error GLES2DecoderImpl::HandleGetRenderbufferParameteriv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLint* params = result ? result->GetData() : NULL; - if (!ValidateGLenumRenderBufferTarget(target)) { + if (!validators_->render_buffer_target.IsValid(target)) { SetGLError( GL_INVALID_ENUM, "glGetRenderbufferParameteriv: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumRenderBufferParameter(pname)) { + if (!validators_->render_buffer_parameter.IsValid(pname)) { SetGLError( GL_INVALID_ENUM, "glGetRenderbufferParameteriv: pname GL_INVALID_ENUM"); @@ -1223,7 +1223,7 @@ error::Error GLES2DecoderImpl::HandleGetShaderiv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLint* params = result ? result->GetData() : NULL; - if (!ValidateGLenumShaderParameter(pname)) { + if (!validators_->shader_parameter.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glGetShaderiv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1255,11 +1255,11 @@ error::Error GLES2DecoderImpl::HandleGetTexParameterfv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLfloat* params = result ? result->GetData() : NULL; - if (!ValidateGLenumTextureTarget(target)) { + if (!validators_->texture_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glGetTexParameterfv: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumTextureParameter(pname)) { + if (!validators_->texture_parameter.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glGetTexParameterfv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1291,11 +1291,11 @@ error::Error GLES2DecoderImpl::HandleGetTexParameteriv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLint* params = result ? result->GetData() : NULL; - if (!ValidateGLenumTextureTarget(target)) { + if (!validators_->texture_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glGetTexParameteriv: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumTextureParameter(pname)) { + if (!validators_->texture_parameter.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glGetTexParameteriv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1327,7 +1327,7 @@ error::Error GLES2DecoderImpl::HandleGetVertexAttribfv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLfloat* params = result ? result->GetData() : NULL; - if (!ValidateGLenumVertexAttribute(pname)) { + if (!validators_->vertex_attribute.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glGetVertexAttribfv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1359,7 +1359,7 @@ error::Error GLES2DecoderImpl::HandleGetVertexAttribiv( Result* result = GetSharedMemoryAs<Result*>( c.params_shm_id, c.params_shm_offset, Result::ComputeSize(num_values)); GLint* params = result ? result->GetData() : NULL; - if (!ValidateGLenumVertexAttribute(pname)) { + if (!validators_->vertex_attribute.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glGetVertexAttribiv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1385,11 +1385,11 @@ error::Error GLES2DecoderImpl::HandleHint( uint32 immediate_data_size, const gles2::Hint& c) { GLenum target = static_cast<GLenum>(c.target); GLenum mode = static_cast<GLenum>(c.mode); - if (!ValidateGLenumHintTarget(target)) { + if (!validators_->hint_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glHint: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumHintMode(mode)) { + if (!validators_->hint_mode.IsValid(mode)) { SetGLError(GL_INVALID_ENUM, "glHint: mode GL_INVALID_ENUM"); return error::kNoError; } @@ -1419,7 +1419,7 @@ error::Error GLES2DecoderImpl::HandleIsEnabled( if (!result_dst) { return error::kOutOfBounds; } - if (!ValidateGLenumCapability(cap)) { + if (!validators_->capability.IsValid(cap)) { SetGLError(GL_INVALID_ENUM, "glIsEnabled: cap GL_INVALID_ENUM"); return error::kNoError; } @@ -1526,12 +1526,12 @@ error::Error GLES2DecoderImpl::HandleRenderbufferStorage( GLenum internalformat = static_cast<GLenum>(c.internalformat); GLsizei width = static_cast<GLsizei>(c.width); GLsizei height = static_cast<GLsizei>(c.height); - if (!ValidateGLenumRenderBufferTarget(target)) { + if (!validators_->render_buffer_target.IsValid(target)) { SetGLError( GL_INVALID_ENUM, "glRenderbufferStorage: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumRenderBufferFormat(internalformat)) { + if (!validators_->render_buffer_format.IsValid(internalformat)) { SetGLError( GL_INVALID_ENUM, "glRenderbufferStorage: internalformat GL_INVALID_ENUM"); @@ -1580,7 +1580,7 @@ error::Error GLES2DecoderImpl::HandleStencilFunc( GLenum func = static_cast<GLenum>(c.func); GLint ref = static_cast<GLint>(c.ref); GLuint mask = static_cast<GLuint>(c.mask); - if (!ValidateGLenumCmpFunction(func)) { + if (!validators_->cmp_function.IsValid(func)) { SetGLError(GL_INVALID_ENUM, "glStencilFunc: func GL_INVALID_ENUM"); return error::kNoError; } @@ -1594,11 +1594,11 @@ error::Error GLES2DecoderImpl::HandleStencilFuncSeparate( GLenum func = static_cast<GLenum>(c.func); GLint ref = static_cast<GLint>(c.ref); GLuint mask = static_cast<GLuint>(c.mask); - if (!ValidateGLenumFaceType(face)) { + if (!validators_->face_type.IsValid(face)) { SetGLError(GL_INVALID_ENUM, "glStencilFuncSeparate: face GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumCmpFunction(func)) { + if (!validators_->cmp_function.IsValid(func)) { SetGLError(GL_INVALID_ENUM, "glStencilFuncSeparate: func GL_INVALID_ENUM"); return error::kNoError; } @@ -1617,7 +1617,7 @@ error::Error GLES2DecoderImpl::HandleStencilMaskSeparate( uint32 immediate_data_size, const gles2::StencilMaskSeparate& c) { GLenum face = static_cast<GLenum>(c.face); GLuint mask = static_cast<GLuint>(c.mask); - if (!ValidateGLenumFaceType(face)) { + if (!validators_->face_type.IsValid(face)) { SetGLError(GL_INVALID_ENUM, "glStencilMaskSeparate: face GL_INVALID_ENUM"); return error::kNoError; } @@ -1630,15 +1630,15 @@ error::Error GLES2DecoderImpl::HandleStencilOp( GLenum fail = static_cast<GLenum>(c.fail); GLenum zfail = static_cast<GLenum>(c.zfail); GLenum zpass = static_cast<GLenum>(c.zpass); - if (!ValidateGLenumStencilOp(fail)) { + if (!validators_->stencil_op.IsValid(fail)) { SetGLError(GL_INVALID_ENUM, "glStencilOp: fail GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumStencilOp(zfail)) { + if (!validators_->stencil_op.IsValid(zfail)) { SetGLError(GL_INVALID_ENUM, "glStencilOp: zfail GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumStencilOp(zpass)) { + if (!validators_->stencil_op.IsValid(zpass)) { SetGLError(GL_INVALID_ENUM, "glStencilOp: zpass GL_INVALID_ENUM"); return error::kNoError; } @@ -1652,19 +1652,19 @@ error::Error GLES2DecoderImpl::HandleStencilOpSeparate( GLenum fail = static_cast<GLenum>(c.fail); GLenum zfail = static_cast<GLenum>(c.zfail); GLenum zpass = static_cast<GLenum>(c.zpass); - if (!ValidateGLenumFaceType(face)) { + if (!validators_->face_type.IsValid(face)) { SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: face GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumStencilOp(fail)) { + if (!validators_->stencil_op.IsValid(fail)) { SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: fail GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumStencilOp(zfail)) { + if (!validators_->stencil_op.IsValid(zfail)) { SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: zfail GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumStencilOp(zpass)) { + if (!validators_->stencil_op.IsValid(zpass)) { SetGLError(GL_INVALID_ENUM, "glStencilOpSeparate: zpass GL_INVALID_ENUM"); return error::kNoError; } @@ -1677,11 +1677,11 @@ error::Error GLES2DecoderImpl::HandleTexParameterf( GLenum target = static_cast<GLenum>(c.target); GLenum pname = static_cast<GLenum>(c.pname); GLfloat param = static_cast<GLfloat>(c.param); - if (!ValidateGLenumTextureBindTarget(target)) { + if (!validators_->texture_bind_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glTexParameterf: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumTextureParameter(pname)) { + if (!validators_->texture_parameter.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glTexParameterf: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1699,11 +1699,11 @@ error::Error GLES2DecoderImpl::HandleTexParameterfv( } const GLfloat* params = GetSharedMemoryAs<const GLfloat*>( c.params_shm_id, c.params_shm_offset, data_size); - if (!ValidateGLenumTextureBindTarget(target)) { + if (!validators_->texture_bind_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glTexParameterfv: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumTextureParameter(pname)) { + if (!validators_->texture_parameter.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glTexParameterfv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1727,11 +1727,11 @@ error::Error GLES2DecoderImpl::HandleTexParameterfvImmediate( } const GLfloat* params = GetImmediateDataAs<const GLfloat*>( c, data_size, immediate_data_size); - if (!ValidateGLenumTextureBindTarget(target)) { + if (!validators_->texture_bind_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glTexParameterfv: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumTextureParameter(pname)) { + if (!validators_->texture_parameter.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glTexParameterfv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1747,11 +1747,11 @@ error::Error GLES2DecoderImpl::HandleTexParameteri( GLenum target = static_cast<GLenum>(c.target); GLenum pname = static_cast<GLenum>(c.pname); GLint param = static_cast<GLint>(c.param); - if (!ValidateGLenumTextureBindTarget(target)) { + if (!validators_->texture_bind_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glTexParameteri: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumTextureParameter(pname)) { + if (!validators_->texture_parameter.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glTexParameteri: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1769,11 +1769,11 @@ error::Error GLES2DecoderImpl::HandleTexParameteriv( } const GLint* params = GetSharedMemoryAs<const GLint*>( c.params_shm_id, c.params_shm_offset, data_size); - if (!ValidateGLenumTextureBindTarget(target)) { + if (!validators_->texture_bind_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glTexParameteriv: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumTextureParameter(pname)) { + if (!validators_->texture_parameter.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glTexParameteriv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1797,11 +1797,11 @@ error::Error GLES2DecoderImpl::HandleTexParameterivImmediate( } const GLint* params = GetImmediateDataAs<const GLint*>( c, data_size, immediate_data_size); - if (!ValidateGLenumTextureBindTarget(target)) { + if (!validators_->texture_bind_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glTexParameteriv: target GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumTextureParameter(pname)) { + if (!validators_->texture_parameter.IsValid(pname)) { SetGLError(GL_INVALID_ENUM, "glTexParameteriv: pname GL_INVALID_ENUM"); return error::kNoError; } @@ -1829,7 +1829,7 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2D( } const void* pixels = GetSharedMemoryAs<const void*>( c.pixels_shm_id, c.pixels_shm_offset, data_size); - if (!ValidateGLenumTextureTarget(target)) { + if (!validators_->texture_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM"); return error::kNoError; } @@ -1841,11 +1841,11 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2D( SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0"); return error::kNoError; } - if (!ValidateGLenumTextureFormat(format)) { + if (!validators_->texture_format.IsValid(format)) { SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumPixelType(type)) { + if (!validators_->pixel_type.IsValid(type)) { SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM"); return error::kNoError; } @@ -1874,7 +1874,7 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2DImmediate( } const void* pixels = GetImmediateDataAs<const void*>( c, data_size, immediate_data_size); - if (!ValidateGLenumTextureTarget(target)) { + if (!validators_->texture_target.IsValid(target)) { SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: target GL_INVALID_ENUM"); return error::kNoError; } @@ -1886,11 +1886,11 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2DImmediate( SetGLError(GL_INVALID_VALUE, "glTexSubImage2D: height < 0"); return error::kNoError; } - if (!ValidateGLenumTextureFormat(format)) { + if (!validators_->texture_format.IsValid(format)) { SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: format GL_INVALID_ENUM"); return error::kNoError; } - if (!ValidateGLenumPixelType(type)) { + if (!validators_->pixel_type.IsValid(type)) { SetGLError(GL_INVALID_ENUM, "glTexSubImage2D: type GL_INVALID_ENUM"); return error::kNoError; } @@ -2357,7 +2357,7 @@ error::Error GLES2DecoderImpl::HandleUniformMatrix2fv( SetGLError(GL_INVALID_VALUE, "glUniformMatrix2fv: count < 0"); return error::kNoError; } - if (!ValidateGLbooleanFalse(transpose)) { + if (!validators_->false_only.IsValid(transpose)) { SetGLError( GL_INVALID_VALUE, "glUniformMatrix2fv: transpose GL_INVALID_VALUE"); return error::kNoError; @@ -2387,7 +2387,7 @@ error::Error GLES2DecoderImpl::HandleUniformMatrix2fvImmediate( SetGLError(GL_INVALID_VALUE, "glUniformMatrix2fv: count < 0"); return error::kNoError; } - if (!ValidateGLbooleanFalse(transpose)) { + if (!validators_->false_only.IsValid(transpose)) { SetGLError( GL_INVALID_VALUE, "glUniformMatrix2fv: transpose GL_INVALID_VALUE"); return error::kNoError; @@ -2414,7 +2414,7 @@ error::Error GLES2DecoderImpl::HandleUniformMatrix3fv( SetGLError(GL_INVALID_VALUE, "glUniformMatrix3fv: count < 0"); return error::kNoError; } - if (!ValidateGLbooleanFalse(transpose)) { + if (!validators_->false_only.IsValid(transpose)) { SetGLError( GL_INVALID_VALUE, "glUniformMatrix3fv: transpose GL_INVALID_VALUE"); return error::kNoError; @@ -2444,7 +2444,7 @@ error::Error GLES2DecoderImpl::HandleUniformMatrix3fvImmediate( SetGLError(GL_INVALID_VALUE, "glUniformMatrix3fv: count < 0"); return error::kNoError; } - if (!ValidateGLbooleanFalse(transpose)) { + if (!validators_->false_only.IsValid(transpose)) { SetGLError( GL_INVALID_VALUE, "glUniformMatrix3fv: transpose GL_INVALID_VALUE"); return error::kNoError; @@ -2471,7 +2471,7 @@ error::Error GLES2DecoderImpl::HandleUniformMatrix4fv( SetGLError(GL_INVALID_VALUE, "glUniformMatrix4fv: count < 0"); return error::kNoError; } - if (!ValidateGLbooleanFalse(transpose)) { + if (!validators_->false_only.IsValid(transpose)) { SetGLError( GL_INVALID_VALUE, "glUniformMatrix4fv: transpose GL_INVALID_VALUE"); return error::kNoError; @@ -2501,7 +2501,7 @@ error::Error GLES2DecoderImpl::HandleUniformMatrix4fvImmediate( SetGLError(GL_INVALID_VALUE, "glUniformMatrix4fv: count < 0"); return error::kNoError; } - if (!ValidateGLbooleanFalse(transpose)) { + if (!validators_->false_only.IsValid(transpose)) { SetGLError( GL_INVALID_VALUE, "glUniformMatrix4fv: transpose GL_INVALID_VALUE"); return error::kNoError; @@ -2739,7 +2739,7 @@ error::Error GLES2DecoderImpl::HandleGetMaxValueInBuffer( SetGLError(GL_INVALID_VALUE, "glGetMaxValueInBuffer: count < 0"); return error::kNoError; } - if (!ValidateGLenumGetMaxIndexType(type)) { + if (!validators_->get_max_index_type.IsValid(type)) { SetGLError(GL_INVALID_ENUM, "glGetMaxValueInBuffer: type GL_INVALID_ENUM"); return error::kNoError; } diff --git a/gpu/command_buffer/service/gles2_cmd_validation.cc b/gpu/command_buffer/service/gles2_cmd_validation.cc index 84e8a4b..8d4fd71 100644 --- a/gpu/command_buffer/service/gles2_cmd_validation.cc +++ b/gpu/command_buffer/service/gles2_cmd_validation.cc @@ -4,13 +4,10 @@ // Contains various validation functions for the GLES2 service. -// NOTE: We explicitly do NOT include gles2_cmd_validation.h because the -// gl2.h included in here must NOT be the native one. This is because -// some of the GLenum definitions exist only in GLES2 and not in Desktop -// GL. -#include <GLES2/gl2types.h> -#include <GLES2/gl2ext.h> -#include <GLES2/gles2_command_buffer.h> +#include "base/basictypes.h" +#define GLES2_GPU_SERVICE 1 +#include "gpu/command_buffer/service/gles2_cmd_validation.h" +#include "gpu/command_buffer/service/gl_utils.h" namespace gpu { namespace gles2 { diff --git a/gpu/command_buffer/service/gles2_cmd_validation.h b/gpu/command_buffer/service/gles2_cmd_validation.h index b5d4b65..77408a3 100644 --- a/gpu/command_buffer/service/gles2_cmd_validation.h +++ b/gpu/command_buffer/service/gles2_cmd_validation.h @@ -7,12 +7,40 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_H_ #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_H_ +#include <vector> +#define GLES2_GPU_SERVICE 1 #include "gpu/command_buffer/common/gles2_cmd_format.h" namespace gpu { namespace gles2 { +// ValueValidator returns true if a value is valid. +template <typename T> +class ValueValidator { + public: + ValueValidator(const T* valid_values, int num_values) { + for (int ii = 0; ii < num_values; ++ii) { + AddValue(valid_values[ii]); + } + } + + void AddValue(const T value) { + valid_values_.push_back(value); + } + + bool IsValid(const T value) const { + return std::find(valid_values_.begin(), valid_values_.end(), value) != + valid_values_.end(); + } + + private: + std::vector<T> valid_values_; +}; + +struct Validators { + Validators(); #include "gpu/command_buffer/service/gles2_cmd_validation_autogen.h" +}; } // namespace gles2 } // namespace gpu diff --git a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h index f787137..6a617a6 100644 --- a/gpu/command_buffer/service/gles2_cmd_validation_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_validation_autogen.h @@ -7,49 +7,49 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_AUTOGEN_H_ #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_AUTOGEN_H_ -bool ValidateGLenumAttachment(GLenum value); -bool ValidateGLenumBufferParameter(GLenum value); -bool ValidateGLenumBufferTarget(GLenum value); -bool ValidateGLenumBufferUsage(GLenum value); -bool ValidateGLenumCapability(GLenum value); -bool ValidateGLenumCmpFunction(GLenum value); -bool ValidateGLenumCompressedTextureFormat(GLenum value); -bool ValidateGLenumDrawMode(GLenum value); -bool ValidateGLenumDstBlendFactor(GLenum value); -bool ValidateGLenumEquation(GLenum value); -bool ValidateGLenumFaceMode(GLenum value); -bool ValidateGLenumFaceType(GLenum value); -bool ValidateGLbooleanFalse(GLenum value); -bool ValidateGLenumFrameBufferParameter(GLenum value); -bool ValidateGLenumFrameBufferTarget(GLenum value); -bool ValidateGLenumGLState(GLenum value); -bool ValidateGLenumGetMaxIndexType(GLenum value); -bool ValidateGLenumHintMode(GLenum value); -bool ValidateGLenumHintTarget(GLenum value); -bool ValidateGLenumIndexType(GLenum value); -bool ValidateGLenumPixelStore(GLenum value); -bool ValidateGLintPixelStoreAlignment(GLenum value); -bool ValidateGLenumPixelType(GLenum value); -bool ValidateGLenumProgramParameter(GLenum value); -bool ValidateGLenumReadPixelFormat(GLenum value); -bool ValidateGLenumRenderBufferFormat(GLenum value); -bool ValidateGLenumRenderBufferParameter(GLenum value); -bool ValidateGLenumRenderBufferTarget(GLenum value); -bool ValidateGLenumShaderParameter(GLenum value); -bool ValidateGLenumShaderPrecision(GLenum value); -bool ValidateGLenumShaderType(GLenum value); -bool ValidateGLenumSrcBlendFactor(GLenum value); -bool ValidateGLenumStencilOp(GLenum value); -bool ValidateGLenumStringType(GLenum value); -bool ValidateGLenumTextureBindTarget(GLenum value); -bool ValidateGLintTextureBorder(GLenum value); -bool ValidateGLenumTextureFormat(GLenum value); -bool ValidateGLenumTextureParameter(GLenum value); -bool ValidateGLenumTextureTarget(GLenum value); -bool ValidateGLintVertexAttribSize(GLenum value); -bool ValidateGLenumVertexAttribType(GLenum value); -bool ValidateGLenumVertexAttribute(GLenum value); -bool ValidateGLenumVertexPointer(GLenum value); +ValueValidator<GLenum> attachment; +ValueValidator<GLenum> buffer_parameter; +ValueValidator<GLenum> buffer_target; +ValueValidator<GLenum> buffer_usage; +ValueValidator<GLenum> capability; +ValueValidator<GLenum> cmp_function; +ValueValidator<GLenum> compressed_texture_format; +ValueValidator<GLenum> draw_mode; +ValueValidator<GLenum> dst_blend_factor; +ValueValidator<GLenum> equation; +ValueValidator<GLenum> face_mode; +ValueValidator<GLenum> face_type; +ValueValidator<GLboolean> false_only; +ValueValidator<GLenum> frame_buffer_parameter; +ValueValidator<GLenum> frame_buffer_target; +ValueValidator<GLenum> g_l_state; +ValueValidator<GLenum> get_max_index_type; +ValueValidator<GLenum> hint_mode; +ValueValidator<GLenum> hint_target; +ValueValidator<GLenum> index_type; +ValueValidator<GLenum> pixel_store; +ValueValidator<GLint> pixel_store_alignment; +ValueValidator<GLenum> pixel_type; +ValueValidator<GLenum> program_parameter; +ValueValidator<GLenum> read_pixel_format; +ValueValidator<GLenum> render_buffer_format; +ValueValidator<GLenum> render_buffer_parameter; +ValueValidator<GLenum> render_buffer_target; +ValueValidator<GLenum> shader_parameter; +ValueValidator<GLenum> shader_precision; +ValueValidator<GLenum> shader_type; +ValueValidator<GLenum> src_blend_factor; +ValueValidator<GLenum> stencil_op; +ValueValidator<GLenum> string_type; +ValueValidator<GLenum> texture_bind_target; +ValueValidator<GLint> texture_border; +ValueValidator<GLenum> texture_format; +ValueValidator<GLenum> texture_parameter; +ValueValidator<GLenum> texture_target; +ValueValidator<GLint> vertex_attrib_size; +ValueValidator<GLenum> vertex_attrib_type; +ValueValidator<GLenum> vertex_attribute; +ValueValidator<GLenum> vertex_pointer; #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_AUTOGEN_H_ diff --git a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h index 4d3ab19..853f909 100644 --- a/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h +++ b/gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h @@ -7,620 +7,507 @@ #ifndef GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_ // NOLINT #define GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_ // NOLINT -bool ValidateGLenumAttachment(GLenum value) { - switch (value) { - case GL_COLOR_ATTACHMENT0: - case GL_DEPTH_ATTACHMENT: - case GL_STENCIL_ATTACHMENT: - return true; - default: - return false; - } +static GLenum valid_attachment_table[] = { + GL_COLOR_ATTACHMENT0, + GL_DEPTH_ATTACHMENT, + GL_STENCIL_ATTACHMENT, +}; + +static GLenum valid_buffer_parameter_table[] = { + GL_BUFFER_SIZE, + GL_BUFFER_USAGE, +}; + +static GLenum valid_buffer_target_table[] = { + GL_ARRAY_BUFFER, + GL_ELEMENT_ARRAY_BUFFER, +}; + +static GLenum valid_buffer_usage_table[] = { + GL_STREAM_DRAW, + GL_STATIC_DRAW, + GL_DYNAMIC_DRAW, +}; + +static GLenum valid_capability_table[] = { + GL_BLEND, + GL_CULL_FACE, + GL_DEPTH_TEST, + GL_DITHER, + GL_POLYGON_OFFSET_FILL, + GL_SAMPLE_ALPHA_TO_COVERAGE, + GL_SAMPLE_COVERAGE, + GL_SCISSOR_TEST, + GL_STENCIL_TEST, +}; + +static GLenum valid_cmp_function_table[] = { + GL_NEVER, + GL_LESS, + GL_EQUAL, + GL_LEQUAL, + GL_GREATER, + GL_NOTEQUAL, + GL_GEQUAL, + GL_ALWAYS, +}; + +static GLenum valid_compressed_texture_format_table[] = { + GL_COMPRESSED_RGB_S3TC_DXT1_EXT, + GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, +}; + +static GLenum valid_draw_mode_table[] = { + GL_POINTS, + GL_LINE_STRIP, + GL_LINE_LOOP, + GL_LINES, + GL_TRIANGLE_STRIP, + GL_TRIANGLE_FAN, + GL_TRIANGLES, +}; + +static GLenum valid_dst_blend_factor_table[] = { + GL_ZERO, + GL_ONE, + GL_SRC_COLOR, + GL_ONE_MINUS_SRC_COLOR, + GL_DST_COLOR, + GL_ONE_MINUS_DST_COLOR, + GL_SRC_ALPHA, + GL_ONE_MINUS_SRC_ALPHA, + GL_DST_ALPHA, + GL_ONE_MINUS_DST_ALPHA, + GL_CONSTANT_COLOR, + GL_ONE_MINUS_CONSTANT_COLOR, + GL_CONSTANT_ALPHA, + GL_ONE_MINUS_CONSTANT_ALPHA, +}; + +static GLenum valid_equation_table[] = { + GL_FUNC_ADD, + GL_FUNC_SUBTRACT, + GL_FUNC_REVERSE_SUBTRACT, +}; + +static GLenum valid_face_mode_table[] = { + GL_CW, + GL_CCW, +}; + +static GLenum valid_face_type_table[] = { + GL_FRONT, + GL_BACK, + GL_FRONT_AND_BACK, +}; + +static GLboolean valid_false_only_table[] = { + false, +}; + +static GLenum valid_frame_buffer_parameter_table[] = { + GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, + GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL, + GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE, +}; + +static GLenum valid_frame_buffer_target_table[] = { + GL_FRAMEBUFFER, +}; + +static GLenum valid_g_l_state_table[] = { + GL_ACTIVE_TEXTURE, + GL_ALIASED_LINE_WIDTH_RANGE, + GL_ALIASED_POINT_SIZE_RANGE, + GL_ALPHA_BITS, + GL_ARRAY_BUFFER_BINDING, + GL_BLEND, + GL_BLEND_COLOR, + GL_BLEND_DST_ALPHA, + GL_BLEND_DST_RGB, + GL_BLEND_EQUATION_ALPHA, + GL_BLEND_EQUATION_RGB, + GL_BLEND_SRC_ALPHA, + GL_BLEND_SRC_RGB, + GL_BLUE_BITS, + GL_COLOR_CLEAR_VALUE, + GL_COLOR_WRITEMASK, + GL_COMPRESSED_TEXTURE_FORMATS, + GL_CULL_FACE, + GL_CULL_FACE_MODE, + GL_CURRENT_PROGRAM, + GL_DEPTH_BITS, + GL_DEPTH_CLEAR_VALUE, + GL_DEPTH_FUNC, + GL_DEPTH_RANGE, + GL_DEPTH_TEST, + GL_DEPTH_WRITEMASK, + GL_DITHER, + GL_ELEMENT_ARRAY_BUFFER_BINDING, + GL_FRAMEBUFFER_BINDING, + GL_FRONT_FACE, + GL_GENERATE_MIPMAP_HINT, + GL_GREEN_BITS, + GL_IMPLEMENTATION_COLOR_READ_FORMAT, + GL_IMPLEMENTATION_COLOR_READ_TYPE, + GL_LINE_WIDTH, + GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, + GL_MAX_CUBE_MAP_TEXTURE_SIZE, + GL_MAX_FRAGMENT_UNIFORM_VECTORS, + GL_MAX_RENDERBUFFER_SIZE, + GL_MAX_TEXTURE_IMAGE_UNITS, + GL_MAX_TEXTURE_SIZE, + GL_MAX_VARYING_VECTORS, + GL_MAX_VERTEX_ATTRIBS, + GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, + GL_MAX_VERTEX_UNIFORM_VECTORS, + GL_MAX_VIEWPORT_DIMS, + GL_NUM_COMPRESSED_TEXTURE_FORMATS, + GL_NUM_SHADER_BINARY_FORMATS, + GL_PACK_ALIGNMENT, + GL_POLYGON_OFFSET_FACTOR, + GL_POLYGON_OFFSET_FILL, + GL_POLYGON_OFFSET_UNITS, + GL_RED_BITS, + GL_RENDERBUFFER_BINDING, + GL_SAMPLE_BUFFERS, + GL_SAMPLE_COVERAGE_INVERT, + GL_SAMPLE_COVERAGE_VALUE, + GL_SAMPLES, + GL_SCISSOR_BOX, + GL_SCISSOR_TEST, + GL_SHADER_BINARY_FORMATS, + GL_SHADER_COMPILER, + GL_STENCIL_BACK_FAIL, + GL_STENCIL_BACK_FUNC, + GL_STENCIL_BACK_PASS_DEPTH_FAIL, + GL_STENCIL_BACK_PASS_DEPTH_PASS, + GL_STENCIL_BACK_REF, + GL_STENCIL_BACK_VALUE_MASK, + GL_STENCIL_BACK_WRITEMASK, + GL_STENCIL_BITS, + GL_STENCIL_CLEAR_VALUE, + GL_STENCIL_FAIL, + GL_STENCIL_FUNC, + GL_STENCIL_PASS_DEPTH_FAIL, + GL_STENCIL_PASS_DEPTH_PASS, + GL_STENCIL_REF, + GL_STENCIL_TEST, + GL_STENCIL_VALUE_MASK, + GL_STENCIL_WRITEMASK, + GL_SUBPIXEL_BITS, + GL_TEXTURE_BINDING_2D, + GL_TEXTURE_BINDING_CUBE_MAP, + GL_UNPACK_ALIGNMENT, + GL_VIEWPORT, +}; + +static GLenum valid_get_max_index_type_table[] = { + GL_UNSIGNED_BYTE, + GL_UNSIGNED_SHORT, + GL_UNSIGNED_INT, +}; + +static GLenum valid_hint_mode_table[] = { + GL_FASTEST, + GL_NICEST, + GL_DONT_CARE, +}; + +static GLenum valid_hint_target_table[] = { + GL_GENERATE_MIPMAP_HINT, +}; + +static GLenum valid_index_type_table[] = { + GL_UNSIGNED_BYTE, + GL_UNSIGNED_SHORT, +}; + +static GLenum valid_pixel_store_table[] = { + GL_PACK_ALIGNMENT, + GL_UNPACK_ALIGNMENT, +}; + +static GLint valid_pixel_store_alignment_table[] = { + 1, + 2, + 4, + 8, +}; + +static GLenum valid_pixel_type_table[] = { + GL_UNSIGNED_BYTE, + GL_UNSIGNED_SHORT_5_6_5, + GL_UNSIGNED_SHORT_4_4_4_4, + GL_UNSIGNED_SHORT_5_5_5_1, +}; + +static GLenum valid_program_parameter_table[] = { + GL_DELETE_STATUS, + GL_LINK_STATUS, + GL_VALIDATE_STATUS, + GL_INFO_LOG_LENGTH, + GL_ATTACHED_SHADERS, + GL_ACTIVE_ATTRIBUTES, + GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, + GL_ACTIVE_UNIFORMS, + GL_ACTIVE_UNIFORM_MAX_LENGTH, +}; + +static GLenum valid_read_pixel_format_table[] = { + GL_ALPHA, + GL_RGB, + GL_RGBA, +}; + +static GLenum valid_render_buffer_format_table[] = { + GL_RGBA4, + GL_RGB565, + GL_RGB5_A1, + GL_DEPTH_COMPONENT16, + GL_STENCIL_INDEX8, +}; + +static GLenum valid_render_buffer_parameter_table[] = { + GL_RENDERBUFFER_WIDTH, + GL_RENDERBUFFER_HEIGHT, + GL_RENDERBUFFER_INTERNAL_FORMAT, + GL_RENDERBUFFER_RED_SIZE, + GL_RENDERBUFFER_GREEN_SIZE, + GL_RENDERBUFFER_BLUE_SIZE, + GL_RENDERBUFFER_ALPHA_SIZE, + GL_RENDERBUFFER_DEPTH_SIZE, + GL_RENDERBUFFER_STENCIL_SIZE, +}; + +static GLenum valid_render_buffer_target_table[] = { + GL_RENDERBUFFER, +}; + +static GLenum valid_shader_parameter_table[] = { + GL_SHADER_TYPE, + GL_DELETE_STATUS, + GL_COMPILE_STATUS, + GL_INFO_LOG_LENGTH, + GL_SHADER_SOURCE_LENGTH, +}; + +static GLenum valid_shader_precision_table[] = { + GL_LOW_FLOAT, + GL_MEDIUM_FLOAT, + GL_HIGH_FLOAT, + GL_LOW_INT, + GL_MEDIUM_INT, + GL_HIGH_INT, +}; + +static GLenum valid_shader_type_table[] = { + GL_VERTEX_SHADER, + GL_FRAGMENT_SHADER, +}; + +static GLenum valid_src_blend_factor_table[] = { + GL_ZERO, + GL_ONE, + GL_SRC_COLOR, + GL_ONE_MINUS_SRC_COLOR, + GL_DST_COLOR, + GL_ONE_MINUS_DST_COLOR, + GL_SRC_ALPHA, + GL_ONE_MINUS_SRC_ALPHA, + GL_DST_ALPHA, + GL_ONE_MINUS_DST_ALPHA, + GL_CONSTANT_COLOR, + GL_ONE_MINUS_CONSTANT_COLOR, + GL_CONSTANT_ALPHA, + GL_ONE_MINUS_CONSTANT_ALPHA, + GL_SRC_ALPHA_SATURATE, +}; + +static GLenum valid_stencil_op_table[] = { + GL_KEEP, + GL_ZERO, + GL_REPLACE, + GL_INCR, + GL_INCR_WRAP, + GL_DECR, + GL_DECR_WRAP, + GL_INVERT, +}; + +static GLenum valid_string_type_table[] = { + GL_VENDOR, + GL_RENDERER, + GL_VERSION, + GL_SHADING_LANGUAGE_VERSION, + GL_EXTENSIONS, +}; + +static GLenum valid_texture_bind_target_table[] = { + GL_TEXTURE_2D, + GL_TEXTURE_CUBE_MAP, +}; + +static GLint valid_texture_border_table[] = { + 0, +}; + +static GLenum valid_texture_format_table[] = { + GL_ALPHA, + GL_LUMINANCE, + GL_LUMINANCE_ALPHA, + GL_RGB, + GL_RGBA, +}; + +static GLenum valid_texture_parameter_table[] = { + GL_TEXTURE_MAG_FILTER, + GL_TEXTURE_MIN_FILTER, + GL_TEXTURE_WRAP_S, + GL_TEXTURE_WRAP_T, +}; + +static GLenum valid_texture_target_table[] = { + GL_TEXTURE_2D, + GL_TEXTURE_CUBE_MAP_POSITIVE_X, + GL_TEXTURE_CUBE_MAP_NEGATIVE_X, + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, + GL_TEXTURE_CUBE_MAP_POSITIVE_Z, + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, +}; + +static GLint valid_vertex_attrib_size_table[] = { + 1, + 2, + 3, + 4, +}; + +static GLenum valid_vertex_attrib_type_table[] = { + GL_BYTE, + GL_UNSIGNED_BYTE, + GL_SHORT, + GL_UNSIGNED_SHORT, + GL_FLOAT, +}; + +static GLenum valid_vertex_attribute_table[] = { + GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, + GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, + GL_VERTEX_ATTRIB_ARRAY_ENABLED, + GL_VERTEX_ATTRIB_ARRAY_SIZE, + GL_VERTEX_ATTRIB_ARRAY_STRIDE, + GL_VERTEX_ATTRIB_ARRAY_TYPE, + GL_CURRENT_VERTEX_ATTRIB, +}; + +static GLenum valid_vertex_pointer_table[] = { + GL_VERTEX_ATTRIB_ARRAY_POINTER, +}; + +Validators::Validators() + : attachment( + valid_attachment_table, arraysize(valid_attachment_table)), + buffer_parameter( + valid_buffer_parameter_table, arraysize(valid_buffer_parameter_table)), + buffer_target( + valid_buffer_target_table, arraysize(valid_buffer_target_table)), + buffer_usage( + valid_buffer_usage_table, arraysize(valid_buffer_usage_table)), + capability( + valid_capability_table, arraysize(valid_capability_table)), + cmp_function( + valid_cmp_function_table, arraysize(valid_cmp_function_table)), + compressed_texture_format( + valid_compressed_texture_format_table, arraysize( + valid_compressed_texture_format_table)), + draw_mode( + valid_draw_mode_table, arraysize(valid_draw_mode_table)), + dst_blend_factor( + valid_dst_blend_factor_table, arraysize(valid_dst_blend_factor_table)), + equation( + valid_equation_table, arraysize(valid_equation_table)), + face_mode( + valid_face_mode_table, arraysize(valid_face_mode_table)), + face_type( + valid_face_type_table, arraysize(valid_face_type_table)), + false_only( + valid_false_only_table, arraysize(valid_false_only_table)), + frame_buffer_parameter( + valid_frame_buffer_parameter_table, arraysize( + valid_frame_buffer_parameter_table)), + frame_buffer_target( + valid_frame_buffer_target_table, arraysize( + valid_frame_buffer_target_table)), + g_l_state( + valid_g_l_state_table, arraysize(valid_g_l_state_table)), + get_max_index_type( + valid_get_max_index_type_table, arraysize( + valid_get_max_index_type_table)), + hint_mode( + valid_hint_mode_table, arraysize(valid_hint_mode_table)), + hint_target( + valid_hint_target_table, arraysize(valid_hint_target_table)), + index_type( + valid_index_type_table, arraysize(valid_index_type_table)), + pixel_store( + valid_pixel_store_table, arraysize(valid_pixel_store_table)), + pixel_store_alignment( + valid_pixel_store_alignment_table, arraysize( + valid_pixel_store_alignment_table)), + pixel_type( + valid_pixel_type_table, arraysize(valid_pixel_type_table)), + program_parameter( + valid_program_parameter_table, arraysize( + valid_program_parameter_table)), + read_pixel_format( + valid_read_pixel_format_table, arraysize( + valid_read_pixel_format_table)), + render_buffer_format( + valid_render_buffer_format_table, arraysize( + valid_render_buffer_format_table)), + render_buffer_parameter( + valid_render_buffer_parameter_table, arraysize( + valid_render_buffer_parameter_table)), + render_buffer_target( + valid_render_buffer_target_table, arraysize( + valid_render_buffer_target_table)), + shader_parameter( + valid_shader_parameter_table, arraysize(valid_shader_parameter_table)), + shader_precision( + valid_shader_precision_table, arraysize(valid_shader_precision_table)), + shader_type( + valid_shader_type_table, arraysize(valid_shader_type_table)), + src_blend_factor( + valid_src_blend_factor_table, arraysize(valid_src_blend_factor_table)), + stencil_op( + valid_stencil_op_table, arraysize(valid_stencil_op_table)), + string_type( + valid_string_type_table, arraysize(valid_string_type_table)), + texture_bind_target( + valid_texture_bind_target_table, arraysize( + valid_texture_bind_target_table)), + texture_border( + valid_texture_border_table, arraysize(valid_texture_border_table)), + texture_format( + valid_texture_format_table, arraysize(valid_texture_format_table)), + texture_parameter( + valid_texture_parameter_table, arraysize( + valid_texture_parameter_table)), + texture_target( + valid_texture_target_table, arraysize(valid_texture_target_table)), + vertex_attrib_size( + valid_vertex_attrib_size_table, arraysize( + valid_vertex_attrib_size_table)), + vertex_attrib_type( + valid_vertex_attrib_type_table, arraysize( + valid_vertex_attrib_type_table)), + vertex_attribute( + valid_vertex_attribute_table, arraysize(valid_vertex_attribute_table)), + vertex_pointer( + valid_vertex_pointer_table, arraysize(valid_vertex_pointer_table)) { } - -bool ValidateGLenumBufferParameter(GLenum value) { - switch (value) { - case GL_BUFFER_SIZE: - case GL_BUFFER_USAGE: - return true; - default: - return false; - } -} - -bool ValidateGLenumBufferTarget(GLenum value) { - switch (value) { - case GL_ARRAY_BUFFER: - case GL_ELEMENT_ARRAY_BUFFER: - return true; - default: - return false; - } -} - -bool ValidateGLenumBufferUsage(GLenum value) { - switch (value) { - case GL_STREAM_DRAW: - case GL_STATIC_DRAW: - case GL_DYNAMIC_DRAW: - return true; - default: - return false; - } -} - -bool ValidateGLenumCapability(GLenum value) { - switch (value) { - case GL_BLEND: - case GL_CULL_FACE: - case GL_DEPTH_TEST: - case GL_DITHER: - case GL_POLYGON_OFFSET_FILL: - case GL_SAMPLE_ALPHA_TO_COVERAGE: - case GL_SAMPLE_COVERAGE: - case GL_SCISSOR_TEST: - case GL_STENCIL_TEST: - return true; - default: - return false; - } -} - -bool ValidateGLenumCmpFunction(GLenum value) { - switch (value) { - case GL_NEVER: - case GL_LESS: - case GL_EQUAL: - case GL_LEQUAL: - case GL_GREATER: - case GL_NOTEQUAL: - case GL_GEQUAL: - case GL_ALWAYS: - return true; - default: - return false; - } -} - -bool ValidateGLenumCompressedTextureFormat(GLenum value) { - switch (value) { - case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: - return true; - default: - return false; - } -} - -bool ValidateGLenumDrawMode(GLenum value) { - switch (value) { - case GL_POINTS: - case GL_LINE_STRIP: - case GL_LINE_LOOP: - case GL_LINES: - case GL_TRIANGLE_STRIP: - case GL_TRIANGLE_FAN: - case GL_TRIANGLES: - return true; - default: - return false; - } -} - -bool ValidateGLenumDstBlendFactor(GLenum value) { - switch (value) { - case GL_ZERO: - case GL_ONE: - case GL_SRC_COLOR: - case GL_ONE_MINUS_SRC_COLOR: - case GL_DST_COLOR: - case GL_ONE_MINUS_DST_COLOR: - case GL_SRC_ALPHA: - case GL_ONE_MINUS_SRC_ALPHA: - case GL_DST_ALPHA: - case GL_ONE_MINUS_DST_ALPHA: - case GL_CONSTANT_COLOR: - case GL_ONE_MINUS_CONSTANT_COLOR: - case GL_CONSTANT_ALPHA: - case GL_ONE_MINUS_CONSTANT_ALPHA: - return true; - default: - return false; - } -} - -bool ValidateGLenumEquation(GLenum value) { - switch (value) { - case GL_FUNC_ADD: - case GL_FUNC_SUBTRACT: - case GL_FUNC_REVERSE_SUBTRACT: - return true; - default: - return false; - } -} - -bool ValidateGLenumFaceMode(GLenum value) { - switch (value) { - case GL_CW: - case GL_CCW: - return true; - default: - return false; - } -} - -bool ValidateGLenumFaceType(GLenum value) { - switch (value) { - case GL_FRONT: - case GL_BACK: - case GL_FRONT_AND_BACK: - return true; - default: - return false; - } -} - -bool ValidateGLbooleanFalse(GLenum value) { - switch (value) { - case false: - return true; - default: - return false; - } -} - -bool ValidateGLenumFrameBufferParameter(GLenum value) { - switch (value) { - case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: - case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: - case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: - case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: - return true; - default: - return false; - } -} - -bool ValidateGLenumFrameBufferTarget(GLenum value) { - switch (value) { - case GL_FRAMEBUFFER: - return true; - default: - return false; - } -} - -bool ValidateGLenumGLState(GLenum value) { - switch (value) { - case GL_ACTIVE_TEXTURE: - case GL_ALIASED_LINE_WIDTH_RANGE: - case GL_ALIASED_POINT_SIZE_RANGE: - case GL_ALPHA_BITS: - case GL_ARRAY_BUFFER_BINDING: - case GL_BLEND: - case GL_BLEND_COLOR: - case GL_BLEND_DST_ALPHA: - case GL_BLEND_DST_RGB: - case GL_BLEND_EQUATION_ALPHA: - case GL_BLEND_EQUATION_RGB: - case GL_BLEND_SRC_ALPHA: - case GL_BLEND_SRC_RGB: - case GL_BLUE_BITS: - case GL_COLOR_CLEAR_VALUE: - case GL_COLOR_WRITEMASK: - case GL_COMPRESSED_TEXTURE_FORMATS: - case GL_CULL_FACE: - case GL_CULL_FACE_MODE: - case GL_CURRENT_PROGRAM: - case GL_DEPTH_BITS: - case GL_DEPTH_CLEAR_VALUE: - case GL_DEPTH_FUNC: - case GL_DEPTH_RANGE: - case GL_DEPTH_TEST: - case GL_DEPTH_WRITEMASK: - case GL_DITHER: - case GL_ELEMENT_ARRAY_BUFFER_BINDING: - case GL_FRAMEBUFFER_BINDING: - case GL_FRONT_FACE: - case GL_GENERATE_MIPMAP_HINT: - case GL_GREEN_BITS: - case GL_IMPLEMENTATION_COLOR_READ_FORMAT: - case GL_IMPLEMENTATION_COLOR_READ_TYPE: - case GL_LINE_WIDTH: - case GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: - case GL_MAX_CUBE_MAP_TEXTURE_SIZE: - case GL_MAX_FRAGMENT_UNIFORM_VECTORS: - case GL_MAX_RENDERBUFFER_SIZE: - case GL_MAX_TEXTURE_IMAGE_UNITS: - case GL_MAX_TEXTURE_SIZE: - case GL_MAX_VARYING_VECTORS: - case GL_MAX_VERTEX_ATTRIBS: - case GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: - case GL_MAX_VERTEX_UNIFORM_VECTORS: - case GL_MAX_VIEWPORT_DIMS: - case GL_NUM_COMPRESSED_TEXTURE_FORMATS: - case GL_NUM_SHADER_BINARY_FORMATS: - case GL_PACK_ALIGNMENT: - case GL_POLYGON_OFFSET_FACTOR: - case GL_POLYGON_OFFSET_FILL: - case GL_POLYGON_OFFSET_UNITS: - case GL_RED_BITS: - case GL_RENDERBUFFER_BINDING: - case GL_SAMPLE_BUFFERS: - case GL_SAMPLE_COVERAGE_INVERT: - case GL_SAMPLE_COVERAGE_VALUE: - case GL_SAMPLES: - case GL_SCISSOR_BOX: - case GL_SCISSOR_TEST: - case GL_SHADER_BINARY_FORMATS: - case GL_SHADER_COMPILER: - case GL_STENCIL_BACK_FAIL: - case GL_STENCIL_BACK_FUNC: - case GL_STENCIL_BACK_PASS_DEPTH_FAIL: - case GL_STENCIL_BACK_PASS_DEPTH_PASS: - case GL_STENCIL_BACK_REF: - case GL_STENCIL_BACK_VALUE_MASK: - case GL_STENCIL_BACK_WRITEMASK: - case GL_STENCIL_BITS: - case GL_STENCIL_CLEAR_VALUE: - case GL_STENCIL_FAIL: - case GL_STENCIL_FUNC: - case GL_STENCIL_PASS_DEPTH_FAIL: - case GL_STENCIL_PASS_DEPTH_PASS: - case GL_STENCIL_REF: - case GL_STENCIL_TEST: - case GL_STENCIL_VALUE_MASK: - case GL_STENCIL_WRITEMASK: - case GL_SUBPIXEL_BITS: - case GL_TEXTURE_BINDING_2D: - case GL_TEXTURE_BINDING_CUBE_MAP: - case GL_UNPACK_ALIGNMENT: - case GL_VIEWPORT: - return true; - default: - return false; - } -} - -bool ValidateGLenumGetMaxIndexType(GLenum value) { - switch (value) { - case GL_UNSIGNED_BYTE: - case GL_UNSIGNED_SHORT: - case GL_UNSIGNED_INT: - return true; - default: - return false; - } -} - -bool ValidateGLenumHintMode(GLenum value) { - switch (value) { - case GL_FASTEST: - case GL_NICEST: - case GL_DONT_CARE: - return true; - default: - return false; - } -} - -bool ValidateGLenumHintTarget(GLenum value) { - switch (value) { - case GL_GENERATE_MIPMAP_HINT: - return true; - default: - return false; - } -} - -bool ValidateGLenumIndexType(GLenum value) { - switch (value) { - case GL_UNSIGNED_BYTE: - case GL_UNSIGNED_SHORT: - return true; - default: - return false; - } -} - -bool ValidateGLenumPixelStore(GLenum value) { - switch (value) { - case GL_PACK_ALIGNMENT: - case GL_UNPACK_ALIGNMENT: - return true; - default: - return false; - } -} - -bool ValidateGLintPixelStoreAlignment(GLenum value) { - switch (value) { - case 1: - case 2: - case 4: - case 8: - return true; - default: - return false; - } -} - -bool ValidateGLenumPixelType(GLenum value) { - switch (value) { - case GL_UNSIGNED_BYTE: - case GL_UNSIGNED_SHORT_5_6_5: - case GL_UNSIGNED_SHORT_4_4_4_4: - case GL_UNSIGNED_SHORT_5_5_5_1: - return true; - default: - return false; - } -} - -bool ValidateGLenumProgramParameter(GLenum value) { - switch (value) { - case GL_DELETE_STATUS: - case GL_LINK_STATUS: - case GL_VALIDATE_STATUS: - case GL_INFO_LOG_LENGTH: - case GL_ATTACHED_SHADERS: - case GL_ACTIVE_ATTRIBUTES: - case GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: - case GL_ACTIVE_UNIFORMS: - case GL_ACTIVE_UNIFORM_MAX_LENGTH: - return true; - default: - return false; - } -} - -bool ValidateGLenumReadPixelFormat(GLenum value) { - switch (value) { - case GL_ALPHA: - case GL_RGB: - case GL_RGBA: - return true; - default: - return false; - } -} - -bool ValidateGLenumRenderBufferFormat(GLenum value) { - switch (value) { - case GL_RGBA4: - case GL_RGB565: - case GL_RGB5_A1: - case GL_DEPTH_COMPONENT16: - case GL_STENCIL_INDEX8: - return true; - default: - return false; - } -} - -bool ValidateGLenumRenderBufferParameter(GLenum value) { - switch (value) { - case GL_RENDERBUFFER_WIDTH: - case GL_RENDERBUFFER_HEIGHT: - case GL_RENDERBUFFER_INTERNAL_FORMAT: - case GL_RENDERBUFFER_RED_SIZE: - case GL_RENDERBUFFER_GREEN_SIZE: - case GL_RENDERBUFFER_BLUE_SIZE: - case GL_RENDERBUFFER_ALPHA_SIZE: - case GL_RENDERBUFFER_DEPTH_SIZE: - case GL_RENDERBUFFER_STENCIL_SIZE: - return true; - default: - return false; - } -} - -bool ValidateGLenumRenderBufferTarget(GLenum value) { - switch (value) { - case GL_RENDERBUFFER: - return true; - default: - return false; - } -} - -bool ValidateGLenumShaderParameter(GLenum value) { - switch (value) { - case GL_SHADER_TYPE: - case GL_DELETE_STATUS: - case GL_COMPILE_STATUS: - case GL_INFO_LOG_LENGTH: - case GL_SHADER_SOURCE_LENGTH: - return true; - default: - return false; - } -} - -bool ValidateGLenumShaderPrecision(GLenum value) { - switch (value) { - case GL_LOW_FLOAT: - case GL_MEDIUM_FLOAT: - case GL_HIGH_FLOAT: - case GL_LOW_INT: - case GL_MEDIUM_INT: - case GL_HIGH_INT: - return true; - default: - return false; - } -} - -bool ValidateGLenumShaderType(GLenum value) { - switch (value) { - case GL_VERTEX_SHADER: - case GL_FRAGMENT_SHADER: - return true; - default: - return false; - } -} - -bool ValidateGLenumSrcBlendFactor(GLenum value) { - switch (value) { - case GL_ZERO: - case GL_ONE: - case GL_SRC_COLOR: - case GL_ONE_MINUS_SRC_COLOR: - case GL_DST_COLOR: - case GL_ONE_MINUS_DST_COLOR: - case GL_SRC_ALPHA: - case GL_ONE_MINUS_SRC_ALPHA: - case GL_DST_ALPHA: - case GL_ONE_MINUS_DST_ALPHA: - case GL_CONSTANT_COLOR: - case GL_ONE_MINUS_CONSTANT_COLOR: - case GL_CONSTANT_ALPHA: - case GL_ONE_MINUS_CONSTANT_ALPHA: - case GL_SRC_ALPHA_SATURATE: - return true; - default: - return false; - } -} - -bool ValidateGLenumStencilOp(GLenum value) { - switch (value) { - case GL_KEEP: - case GL_ZERO: - case GL_REPLACE: - case GL_INCR: - case GL_INCR_WRAP: - case GL_DECR: - case GL_DECR_WRAP: - case GL_INVERT: - return true; - default: - return false; - } -} - -bool ValidateGLenumStringType(GLenum value) { - switch (value) { - case GL_VENDOR: - case GL_RENDERER: - case GL_VERSION: - case GL_SHADING_LANGUAGE_VERSION: - case GL_EXTENSIONS: - return true; - default: - return false; - } -} - -bool ValidateGLenumTextureBindTarget(GLenum value) { - switch (value) { - case GL_TEXTURE_2D: - case GL_TEXTURE_CUBE_MAP: - return true; - default: - return false; - } -} - -bool ValidateGLintTextureBorder(GLenum value) { - switch (value) { - case 0: - return true; - default: - return false; - } -} - -bool ValidateGLenumTextureFormat(GLenum value) { - switch (value) { - case GL_ALPHA: - case GL_LUMINANCE: - case GL_LUMINANCE_ALPHA: - case GL_RGB: - case GL_RGBA: - return true; - default: - return false; - } -} - -bool ValidateGLenumTextureParameter(GLenum value) { - switch (value) { - case GL_TEXTURE_MAG_FILTER: - case GL_TEXTURE_MIN_FILTER: - case GL_TEXTURE_WRAP_S: - case GL_TEXTURE_WRAP_T: - return true; - default: - return false; - } -} - -bool ValidateGLenumTextureTarget(GLenum value) { - switch (value) { - case GL_TEXTURE_2D: - case GL_TEXTURE_CUBE_MAP_POSITIVE_X: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_X: - case GL_TEXTURE_CUBE_MAP_POSITIVE_Y: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: - case GL_TEXTURE_CUBE_MAP_POSITIVE_Z: - case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: - return true; - default: - return false; - } -} - -bool ValidateGLintVertexAttribSize(GLenum value) { - switch (value) { - case 1: - case 2: - case 3: - case 4: - return true; - default: - return false; - } -} - -bool ValidateGLenumVertexAttribType(GLenum value) { - switch (value) { - case GL_BYTE: - case GL_UNSIGNED_BYTE: - case GL_SHORT: - case GL_UNSIGNED_SHORT: - case GL_FLOAT: - return true; - default: - return false; - } -} - -bool ValidateGLenumVertexAttribute(GLenum value) { - switch (value) { - case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: - case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: - case GL_VERTEX_ATTRIB_ARRAY_ENABLED: - case GL_VERTEX_ATTRIB_ARRAY_SIZE: - case GL_VERTEX_ATTRIB_ARRAY_STRIDE: - case GL_VERTEX_ATTRIB_ARRAY_TYPE: - case GL_CURRENT_VERTEX_ATTRIB: - return true; - default: - return false; - } -} - -bool ValidateGLenumVertexPointer(GLenum value) { - switch (value) { - case GL_VERTEX_ATTRIB_ARRAY_POINTER: - return true; - default: - return false; - } -} - #endif // GPU_COMMAND_BUFFER_SERVICE_GLES2_CMD_VALIDATION_IMPLEMENTATION_AUTOGEN_H_ // NOLINT |