Skip to content

Commit

Permalink
automate more GL state handling
Browse files Browse the repository at this point in the history
BUG=155557


Review URL: https://chromiumcodereview.appspot.com/11301006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@164798 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
gman@chromium.org committed Oct 30, 2012
1 parent 56b347a commit f731b94
Show file tree
Hide file tree
Showing 17 changed files with 1,638 additions and 807 deletions.
942 changes: 744 additions & 198 deletions gpu/command_buffer/build_gles2_cmd_buffer.py

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -371,9 +371,9 @@ TEST_F(GLES2ImplementationTest, Disable) {
Disable cmd;
};
Cmds expected;
expected.cmd.Init(GL_DITHER);
expected.cmd.Init(GL_BLEND);

gl_->Disable(GL_DITHER);
gl_->Disable(GL_BLEND);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}

Expand Down Expand Up @@ -404,9 +404,9 @@ TEST_F(GLES2ImplementationTest, Enable) {
Enable cmd;
};
Cmds expected;
expected.cmd.Init(GL_DITHER);
expected.cmd.Init(GL_BLEND);

gl_->Enable(GL_DITHER);
gl_->Enable(GL_BLEND);
EXPECT_EQ(0, memcmp(&expected, commands_, sizeof(expected)));
}

Expand Down
89 changes: 48 additions & 41 deletions gpu/command_buffer/common/gles2_cmd_utils_implementation_autogen.h
Original file line number Diff line number Diff line change
Expand Up @@ -627,10 +627,10 @@ std::string GLES2Util::GetStringBufferUsage(uint32 value) {

std::string GLES2Util::GetStringCapability(uint32 value) {
static EnumToString string_table[] = {
{ GL_DITHER, "GL_DITHER" },
{ GL_BLEND, "GL_BLEND" },
{ GL_CULL_FACE, "GL_CULL_FACE" },
{ GL_DEPTH_TEST, "GL_DEPTH_TEST" },
{ GL_DITHER, "GL_DITHER" },
{ GL_POLYGON_OFFSET_FILL, "GL_POLYGON_OFFSET_FILL" },
{ GL_SAMPLE_ALPHA_TO_COVERAGE, "GL_SAMPLE_ALPHA_TO_COVERAGE" },
{ GL_SAMPLE_COVERAGE, "GL_SAMPLE_COVERAGE" },
Expand Down Expand Up @@ -755,37 +755,18 @@ std::string GLES2Util::GetStringGLState(uint32 value) {
{ GL_ALIASED_POINT_SIZE_RANGE, "GL_ALIASED_POINT_SIZE_RANGE" },
{ GL_ALPHA_BITS, "GL_ALPHA_BITS" },
{ GL_ARRAY_BUFFER_BINDING, "GL_ARRAY_BUFFER_BINDING" },
{ GL_BLEND, "GL_BLEND" },
{ GL_BLEND_COLOR, "GL_BLEND_COLOR" },
{ GL_BLEND_DST_ALPHA, "GL_BLEND_DST_ALPHA" },
{ GL_BLEND_DST_RGB, "GL_BLEND_DST_RGB" },
{ GL_BLEND_EQUATION_ALPHA, "GL_BLEND_EQUATION_ALPHA" },
{ GL_BLEND_EQUATION_RGB, "GL_BLEND_EQUATION_RGB" },
{ GL_BLEND_SRC_ALPHA, "GL_BLEND_SRC_ALPHA" },
{ GL_BLEND_SRC_RGB, "GL_BLEND_SRC_RGB" },
{ GL_BLUE_BITS, "GL_BLUE_BITS" },
{ GL_COLOR_CLEAR_VALUE, "GL_COLOR_CLEAR_VALUE" },
{ GL_COLOR_WRITEMASK, "GL_COLOR_WRITEMASK" },
{ GL_COMPRESSED_TEXTURE_FORMATS, "GL_COMPRESSED_TEXTURE_FORMATS" },
{ GL_CULL_FACE, "GL_CULL_FACE" },
{ GL_CULL_FACE_MODE, "GL_CULL_FACE_MODE" },
{ GL_CURRENT_PROGRAM, "GL_CURRENT_PROGRAM" },
{ GL_DEPTH_BITS, "GL_DEPTH_BITS" },
{ GL_DEPTH_CLEAR_VALUE, "GL_DEPTH_CLEAR_VALUE" },
{ GL_DEPTH_FUNC, "GL_DEPTH_FUNC" },
{ GL_DEPTH_RANGE, "GL_DEPTH_RANGE" },
{ GL_DEPTH_TEST, "GL_DEPTH_TEST" },
{ GL_DEPTH_WRITEMASK, "GL_DEPTH_WRITEMASK" },
{ GL_DITHER, "GL_DITHER" },
{ GL_ELEMENT_ARRAY_BUFFER_BINDING, "GL_ELEMENT_ARRAY_BUFFER_BINDING" },
{ GL_FRAMEBUFFER_BINDING, "GL_FRAMEBUFFER_BINDING" },
{ GL_FRONT_FACE, "GL_FRONT_FACE" },
{ GL_GENERATE_MIPMAP_HINT, "GL_GENERATE_MIPMAP_HINT" },
{ GL_GREEN_BITS, "GL_GREEN_BITS" },
{ GL_IMPLEMENTATION_COLOR_READ_FORMAT,
"GL_IMPLEMENTATION_COLOR_READ_FORMAT" },
{ GL_IMPLEMENTATION_COLOR_READ_TYPE, "GL_IMPLEMENTATION_COLOR_READ_TYPE" },
{ GL_LINE_WIDTH, "GL_LINE_WIDTH" },
{ GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,
"GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS" },
{ GL_MAX_CUBE_MAP_TEXTURE_SIZE, "GL_MAX_CUBE_MAP_TEXTURE_SIZE" },
Expand All @@ -801,37 +782,17 @@ std::string GLES2Util::GetStringGLState(uint32 value) {
{ GL_NUM_COMPRESSED_TEXTURE_FORMATS, "GL_NUM_COMPRESSED_TEXTURE_FORMATS" },
{ GL_NUM_SHADER_BINARY_FORMATS, "GL_NUM_SHADER_BINARY_FORMATS" },
{ GL_PACK_ALIGNMENT, "GL_PACK_ALIGNMENT" },
{ GL_POLYGON_OFFSET_FACTOR, "GL_POLYGON_OFFSET_FACTOR" },
{ GL_POLYGON_OFFSET_FILL, "GL_POLYGON_OFFSET_FILL" },
{ GL_POLYGON_OFFSET_UNITS, "GL_POLYGON_OFFSET_UNITS" },
{ GL_RED_BITS, "GL_RED_BITS" },
{ GL_RENDERBUFFER_BINDING, "GL_RENDERBUFFER_BINDING" },
{ GL_SAMPLE_BUFFERS, "GL_SAMPLE_BUFFERS" },
{ GL_SAMPLE_COVERAGE_INVERT, "GL_SAMPLE_COVERAGE_INVERT" },
{ GL_SAMPLE_COVERAGE_VALUE, "GL_SAMPLE_COVERAGE_VALUE" },
{ GL_SAMPLES, "GL_SAMPLES" },
{ GL_SCISSOR_BOX, "GL_SCISSOR_BOX" },
{ GL_SCISSOR_TEST, "GL_SCISSOR_TEST" },
{ GL_SHADER_BINARY_FORMATS, "GL_SHADER_BINARY_FORMATS" },
{ GL_SHADER_COMPILER, "GL_SHADER_COMPILER" },
{ GL_STENCIL_BACK_FAIL, "GL_STENCIL_BACK_FAIL" },
{ GL_STENCIL_BACK_FUNC, "GL_STENCIL_BACK_FUNC" },
{ GL_STENCIL_BACK_PASS_DEPTH_FAIL, "GL_STENCIL_BACK_PASS_DEPTH_FAIL" },
{ GL_STENCIL_BACK_PASS_DEPTH_PASS, "GL_STENCIL_BACK_PASS_DEPTH_PASS" },
{ GL_STENCIL_BACK_REF, "GL_STENCIL_BACK_REF" },
{ GL_STENCIL_BACK_VALUE_MASK, "GL_STENCIL_BACK_VALUE_MASK" },
{ GL_STENCIL_BACK_WRITEMASK, "GL_STENCIL_BACK_WRITEMASK" },
{ GL_STENCIL_BITS, "GL_STENCIL_BITS" },
{ GL_STENCIL_CLEAR_VALUE, "GL_STENCIL_CLEAR_VALUE" },
{ GL_STENCIL_FAIL, "GL_STENCIL_FAIL" },
{ GL_STENCIL_FUNC, "GL_STENCIL_FUNC" },
{ GL_STENCIL_PASS_DEPTH_FAIL, "GL_STENCIL_PASS_DEPTH_FAIL" },
{ GL_STENCIL_PASS_DEPTH_PASS, "GL_STENCIL_PASS_DEPTH_PASS" },
{ GL_STENCIL_REF, "GL_STENCIL_REF" },
{ GL_STENCIL_TEST, "GL_STENCIL_TEST" },
{ GL_STENCIL_VALUE_MASK, "GL_STENCIL_VALUE_MASK" },
{ GL_STENCIL_WRITEMASK, "GL_STENCIL_WRITEMASK" },
{ GL_SUBPIXEL_BITS, "GL_SUBPIXEL_BITS" },
{ GL_STENCIL_BITS, "GL_STENCIL_BITS" },
{ GL_TEXTURE_BINDING_2D, "GL_TEXTURE_BINDING_2D" },
{ GL_TEXTURE_BINDING_CUBE_MAP, "GL_TEXTURE_BINDING_CUBE_MAP" },
{ GL_UNPACK_ALIGNMENT, "GL_UNPACK_ALIGNMENT" },
Expand All @@ -841,6 +802,52 @@ std::string GLES2Util::GetStringGLState(uint32 value) {
{ GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM,
"GL_UNPACK_UNPREMULTIPLY_ALPHA_CHROMIUM" },
{ GL_VIEWPORT, "GL_VIEWPORT" },
{ GL_BLEND_COLOR, "GL_BLEND_COLOR" },
{ GL_BLEND_EQUATION_RGB, "GL_BLEND_EQUATION_RGB" },
{ GL_BLEND_EQUATION_ALPHA, "GL_BLEND_EQUATION_ALPHA" },
{ GL_BLEND_SRC_RGB, "GL_BLEND_SRC_RGB" },
{ GL_BLEND_DST_RGB, "GL_BLEND_DST_RGB" },
{ GL_BLEND_SRC_ALPHA, "GL_BLEND_SRC_ALPHA" },
{ GL_BLEND_DST_ALPHA, "GL_BLEND_DST_ALPHA" },
{ GL_COLOR_CLEAR_VALUE, "GL_COLOR_CLEAR_VALUE" },
{ GL_DEPTH_CLEAR_VALUE, "GL_DEPTH_CLEAR_VALUE" },
{ GL_STENCIL_CLEAR_VALUE, "GL_STENCIL_CLEAR_VALUE" },
{ GL_COLOR_WRITEMASK, "GL_COLOR_WRITEMASK" },
{ GL_CULL_FACE_MODE, "GL_CULL_FACE_MODE" },
{ GL_DEPTH_FUNC, "GL_DEPTH_FUNC" },
{ GL_DEPTH_WRITEMASK, "GL_DEPTH_WRITEMASK" },
{ GL_DEPTH_RANGE, "GL_DEPTH_RANGE" },
{ GL_FRONT_FACE, "GL_FRONT_FACE" },
{ GL_LINE_WIDTH, "GL_LINE_WIDTH" },
{ GL_POLYGON_OFFSET_FACTOR, "GL_POLYGON_OFFSET_FACTOR" },
{ GL_POLYGON_OFFSET_UNITS, "GL_POLYGON_OFFSET_UNITS" },
{ GL_SAMPLE_COVERAGE_VALUE, "GL_SAMPLE_COVERAGE_VALUE" },
{ GL_SAMPLE_COVERAGE_INVERT, "GL_SAMPLE_COVERAGE_INVERT" },
{ GL_SCISSOR_BOX, "GL_SCISSOR_BOX" },
{ GL_STENCIL_FUNC, "GL_STENCIL_FUNC" },
{ GL_STENCIL_REF, "GL_STENCIL_REF" },
{ GL_STENCIL_VALUE_MASK, "GL_STENCIL_VALUE_MASK" },
{ GL_STENCIL_BACK_FUNC, "GL_STENCIL_BACK_FUNC" },
{ GL_STENCIL_BACK_REF, "GL_STENCIL_BACK_REF" },
{ GL_STENCIL_BACK_VALUE_MASK, "GL_STENCIL_BACK_VALUE_MASK" },
{ GL_STENCIL_WRITEMASK, "GL_STENCIL_WRITEMASK" },
{ GL_STENCIL_BACK_WRITEMASK, "GL_STENCIL_BACK_WRITEMASK" },
{ GL_STENCIL_FAIL, "GL_STENCIL_FAIL" },
{ GL_STENCIL_PASS_DEPTH_FAIL, "GL_STENCIL_PASS_DEPTH_FAIL" },
{ GL_STENCIL_PASS_DEPTH_PASS, "GL_STENCIL_PASS_DEPTH_PASS" },
{ GL_STENCIL_BACK_FAIL, "GL_STENCIL_BACK_FAIL" },
{ GL_STENCIL_BACK_PASS_DEPTH_FAIL, "GL_STENCIL_BACK_PASS_DEPTH_FAIL" },
{ GL_STENCIL_BACK_PASS_DEPTH_PASS, "GL_STENCIL_BACK_PASS_DEPTH_PASS" },
{ GL_VIEWPORT, "GL_VIEWPORT" },
{ GL_BLEND, "GL_BLEND" },
{ GL_CULL_FACE, "GL_CULL_FACE" },
{ GL_DEPTH_TEST, "GL_DEPTH_TEST" },
{ GL_DITHER, "GL_DITHER" },
{ GL_POLYGON_OFFSET_FILL, "GL_POLYGON_OFFSET_FILL" },
{ GL_SAMPLE_ALPHA_TO_COVERAGE, "GL_SAMPLE_ALPHA_TO_COVERAGE" },
{ GL_SAMPLE_COVERAGE, "GL_SAMPLE_COVERAGE" },
{ GL_SCISSOR_TEST, "GL_SCISSOR_TEST" },
{ GL_STENCIL_TEST, "GL_STENCIL_TEST" },
};
return GLES2Util::GetQualifiedEnumString(
string_table, arraysize(string_table), value);
Expand Down
82 changes: 20 additions & 62 deletions gpu/command_buffer/service/context_state.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,23 @@

#include "gpu/command_buffer/service/context_state.h"

#include "gpu/command_buffer/common/gles2_cmd_utils.h"

namespace gpu {
namespace gles2 {

namespace {

void EnableDisable(GLenum pname, bool enable) {
if (enable) {
glEnable(pname);
} else {
glDisable(pname);
}
}

} // anonymous namespace.

TextureUnit::TextureUnit()
: bind_target(GL_TEXTURE_2D) {
}
Expand All @@ -18,78 +32,22 @@ ContextState::ContextState()
: pack_alignment(4),
unpack_alignment(4),
active_texture_unit(0),
color_clear_red(0),
color_clear_green(0),
color_clear_blue(0),
color_clear_alpha(0),
color_mask_red(true),
color_mask_green(true),
color_mask_blue(true),
color_mask_alpha(true),
depth_clear(1.0f),
depth_mask(true),
depth_func(GL_LESS),
z_near(0.0f),
z_far(1.0f),
enable_blend(false),
enable_cull_face(false),
enable_scissor_test(false),
enable_depth_test(false),
enable_stencil_test(false),
enable_polygon_offset_fill(false),
enable_dither(true),
enable_sample_alpha_to_coverage(false),
enable_sample_coverage(false),
viewport_x(0),
viewport_y(0),
viewport_width(0),
viewport_height(0),
viewport_max_width(0),
viewport_max_height(0),
scissor_x(0),
scissor_y(0),
scissor_width(0),
scissor_height(0),
cull_mode(GL_BACK),
front_face(GL_CCW),
blend_source_rgb(GL_ONE),
blend_dest_rgb(GL_ZERO),
blend_source_alpha(GL_ONE),
blend_dest_alpha(GL_ZERO),
blend_equation_rgb(GL_FUNC_ADD),
blend_equation_alpha(GL_FUNC_ADD),
blend_color_red(0),
blend_color_green(0),
blend_color_blue(0),
blend_color_alpha(0),
stencil_clear(0),
stencil_front_writemask(0xFFFFFFFFU),
stencil_front_func(GL_ALWAYS),
stencil_front_ref(0),
stencil_front_mask(0xFFFFFFFFU),
stencil_front_fail_op(GL_KEEP),
stencil_front_z_fail_op(GL_KEEP),
stencil_front_z_pass_op(GL_KEEP),
stencil_back_writemask(0xFFFFFFFFU),
stencil_back_func(GL_ALWAYS),
stencil_back_ref(0),
stencil_back_mask(0xFFFFFFFFU),
stencil_back_fail_op(GL_KEEP),
stencil_back_z_fail_op(GL_KEEP),
stencil_back_z_pass_op(GL_KEEP),
polygon_offset_factor(0.0f),
polygon_offset_units(0.0f),
sample_coverage_value(1.0f),
sample_coverage_invert(false),
line_width(1.0),
hint_generate_mipmap(GL_DONT_CARE),
hint_fragment_shader_derivative(GL_DONT_CARE),
pack_reverse_row_order(false) {
Initialize();
}

ContextState::~ContextState() {
}

// Include the auto-generated part of this file. We split this because it means
// we can easily edit the non-auto generated parts right here in this file
// instead of having to edit some template or the code generator.
#include "gpu/command_buffer/service/context_state_impl_autogen.h"

} // namespace gles2
} // namespace gpu

Expand Down
81 changes: 9 additions & 72 deletions gpu/command_buffer/service/context_state.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,15 @@ struct GPU_EXPORT ContextState {
ContextState();
~ContextState();

void Initialize();

void InitCapabilities();
void InitState();

#include "gpu/command_buffer/service/context_state_autogen.h"

EnableFlags enable_flags;

// pack alignment as last set by glPixelStorei
GLint pack_alignment;

Expand All @@ -92,44 +101,10 @@ struct GPU_EXPORT ContextState {
// be 2.
GLuint active_texture_unit;

GLfloat color_clear_red;
GLfloat color_clear_green;
GLfloat color_clear_blue;
GLfloat color_clear_alpha;
GLboolean color_mask_red;
GLboolean color_mask_green;
GLboolean color_mask_blue;
GLboolean color_mask_alpha;

GLclampf depth_clear;
GLboolean depth_mask;
GLenum depth_func;
float z_near;
float z_far;

bool enable_blend;
bool enable_cull_face;
bool enable_scissor_test;
bool enable_depth_test;
bool enable_stencil_test;
bool enable_polygon_offset_fill;
bool enable_dither;
bool enable_sample_alpha_to_coverage;
bool enable_sample_coverage;

// Cached values of the currently assigned viewport dimensions.
GLint viewport_x;
GLint viewport_y;
GLsizei viewport_width;
GLsizei viewport_height;
GLsizei viewport_max_width;
GLsizei viewport_max_height;

GLint scissor_x;
GLint scissor_y;
GLsizei scissor_width;
GLsizei scissor_height;

// The currently bound array buffer. If this is 0 it is illegal to call
// glVertexAttribPointer.
BufferManager::BufferInfo::Ref bound_array_buffer;
Expand All @@ -152,44 +127,6 @@ struct GPU_EXPORT ContextState {

QueryManager::Query::Ref current_query;

GLenum cull_mode;
GLenum front_face;

GLenum blend_source_rgb;
GLenum blend_dest_rgb;
GLenum blend_source_alpha;
GLenum blend_dest_alpha;
GLenum blend_equation_rgb;
GLenum blend_equation_alpha;
GLfloat blend_color_red;
GLfloat blend_color_green;
GLfloat blend_color_blue;
GLfloat blend_color_alpha;

GLint stencil_clear;
GLuint stencil_front_writemask;
GLenum stencil_front_func;
GLint stencil_front_ref;
GLuint stencil_front_mask;
GLenum stencil_front_fail_op;
GLenum stencil_front_z_fail_op;
GLenum stencil_front_z_pass_op;
GLuint stencil_back_writemask;
GLenum stencil_back_func;
GLint stencil_back_ref;
GLuint stencil_back_mask;
GLenum stencil_back_fail_op;
GLenum stencil_back_z_fail_op;
GLenum stencil_back_z_pass_op;

GLfloat polygon_offset_factor;
GLfloat polygon_offset_units;

GLclampf sample_coverage_value;
bool sample_coverage_invert;

GLfloat line_width;

GLenum hint_generate_mipmap;
GLenum hint_fragment_shader_derivative;

Expand Down
Loading

0 comments on commit f731b94

Please sign in to comment.