summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-15 22:55:05 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-15 22:55:05 +0000
commit9438b01d71983b665a9490fc5255712137f6c238 (patch)
treef3b56482b064e294aad7fae1cae8bb949d56ed69 /gpu
parent5e1a06af1598eec1daea4689c93b719d9ea5200f (diff)
downloadchromium_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-xgpu/command_buffer/build_gles2_cmd_buffer.py89
-rw-r--r--gpu/command_buffer/service/context_group.h7
-rw-r--r--gpu/command_buffer/service/gl_utils.h1
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc61
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder_autogen.h190
-rw-r--r--gpu/command_buffer/service/gles2_cmd_validation.cc11
-rw-r--r--gpu/command_buffer/service/gles2_cmd_validation.h28
-rw-r--r--gpu/command_buffer/service/gles2_cmd_validation_autogen.h86
-rw-r--r--gpu/command_buffer/service/gles2_cmd_validation_implementation_autogen.h1115
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