Index: gpu/command_buffer/service/gles2_cmd_decoder.cc |
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
index 1159ba425a8f52a0acd9d0ad7bc534900c242432..748eb21cd1256913dc7f711e1930f6a834f87d12 100644 |
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc |
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc |
@@ -32,6 +32,7 @@ |
#include "gpu/command_buffer/service/buffer_manager.h" |
#include "gpu/command_buffer/service/cmd_buffer_engine.h" |
#include "gpu/command_buffer/service/context_group.h" |
+#include "gpu/command_buffer/service/context_state.h" |
#include "gpu/command_buffer/service/feature_info.h" |
#include "gpu/command_buffer/service/framebuffer_manager.h" |
#include "gpu/command_buffer/service/gl_utils.h" |
@@ -567,59 +568,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
friend class RenderBuffer; |
friend class FrameBuffer; |
- // State associated with each texture unit. |
- struct TextureUnit { |
- TextureUnit() : bind_target(GL_TEXTURE_2D) { } |
- |
- // The last target that was bound to this texture unit. |
- GLenum bind_target; |
- |
- // texture currently bound to this unit's GL_TEXTURE_2D with glBindTexture |
- TextureManager::TextureInfo::Ref bound_texture_2d; |
- |
- // texture currently bound to this unit's GL_TEXTURE_CUBE_MAP with |
- // glBindTexture |
- TextureManager::TextureInfo::Ref bound_texture_cube_map; |
- |
- // texture currently bound to this unit's GL_TEXTURE_EXTERNAL_OES with |
- // glBindTexture |
- TextureManager::TextureInfo::Ref bound_texture_external_oes; |
- |
- // texture currently bound to this unit's GL_TEXTURE_RECTANGLE_ARB with |
- // glBindTexture |
- TextureManager::TextureInfo::Ref bound_texture_rectangle_arb; |
- |
- TextureManager::TextureInfo::Ref GetInfoForSamplerType(GLenum type) { |
- DCHECK(type == GL_SAMPLER_2D || type == GL_SAMPLER_CUBE || |
- type == GL_SAMPLER_EXTERNAL_OES || type == GL_SAMPLER_2D_RECT_ARB); |
- switch (type) { |
- case GL_SAMPLER_2D: |
- return bound_texture_2d; |
- case GL_SAMPLER_CUBE: |
- return bound_texture_cube_map; |
- case GL_SAMPLER_EXTERNAL_OES: |
- return bound_texture_external_oes; |
- case GL_SAMPLER_2D_RECT_ARB: |
- return bound_texture_rectangle_arb; |
- } |
- |
- NOTREACHED(); |
- return NULL; |
- } |
- |
- void Unbind(TextureManager::TextureInfo* texture) { |
- if (bound_texture_2d == texture) { |
- bound_texture_2d = NULL; |
- } |
- if (bound_texture_cube_map == texture) { |
- bound_texture_cube_map = NULL; |
- } |
- if (bound_texture_external_oes == texture) { |
- bound_texture_external_oes = NULL; |
- } |
- } |
- }; |
- |
// Initialize or re-initialize the shader translator. |
bool InitializeShaderTranslator(); |
@@ -1284,15 +1232,15 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
BufferManager::BufferInfo* GetBufferInfoForTarget(GLenum target) { |
DCHECK(target == GL_ARRAY_BUFFER || target == GL_ELEMENT_ARRAY_BUFFER); |
if (target == GL_ARRAY_BUFFER) { |
- return bound_array_buffer_; |
+ return state_.bound_array_buffer; |
} else { |
- return vertex_attrib_manager_->element_array_buffer(); |
+ return state_.vertex_attrib_manager->element_array_buffer(); |
} |
} |
// Gets the texture id for a given target. |
TextureManager::TextureInfo* GetTextureInfoForTarget(GLenum target) { |
- TextureUnit& unit = texture_units_[active_texture_unit_]; |
+ TextureUnit& unit = state_.texture_units[state_.active_texture_unit]; |
TextureManager::TextureInfo* info = NULL; |
switch (target) { |
case GL_TEXTURE_2D: |
@@ -1345,10 +1293,10 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
switch (target) { |
case GL_FRAMEBUFFER: |
case GL_DRAW_FRAMEBUFFER_EXT: |
- info = bound_draw_framebuffer_; |
+ info = state_.bound_draw_framebuffer; |
break; |
case GL_READ_FRAMEBUFFER_EXT: |
- info = bound_read_framebuffer_; |
+ info = state_.bound_read_framebuffer; |
break; |
default: |
NOTREACHED(); |
@@ -1362,7 +1310,7 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
RenderbufferManager::RenderbufferInfo* info = NULL; |
switch (target) { |
case GL_RENDERBUFFER: |
- info = bound_renderbuffer_; |
+ info = state_.bound_renderbuffer; |
break; |
default: |
NOTREACHED(); |
@@ -1417,7 +1365,7 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
bool ShouldDeferDraws() { |
return !offscreen_target_frame_buffer_.get() && |
- bound_draw_framebuffer_ == NULL && |
+ state_.bound_draw_framebuffer == NULL && |
surface_->DeferDraws(); |
} |
@@ -1441,6 +1389,9 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
// The ContextGroup for this decoder uses to track resources. |
ContextGroup::Ref group_; |
+ // All the state for this context. |
+ ContextState state_; |
+ |
// A parent decoder can access this decoders saved offscreen frame buffer. |
// The parent pointer is reset if the parent is destroyed. |
base::WeakPtr<GLES2DecoderImpl> parent_; |
@@ -1454,12 +1405,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
// Util to help with GL. |
GLES2Util util_; |
- // pack alignment as last set by glPixelStorei |
- GLint pack_alignment_; |
- |
- // unpack alignment as last set by glPixelStorei |
- GLint unpack_alignment_; |
- |
// unpack flip y as last set by glPixelStorei |
bool unpack_flip_y_; |
@@ -1467,13 +1412,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
bool unpack_premultiply_alpha_; |
bool unpack_unpremultiply_alpha_; |
- // The currently bound array buffer. If this is 0 it is illegal to call |
- // glVertexAttribPointer. |
- BufferManager::BufferInfo::Ref bound_array_buffer_; |
- |
- // Class that manages vertex attribs. |
- VertexAttribManager::Ref vertex_attrib_manager_; |
- |
// Default vertex attribs manager, used when no VAOs are bound. |
VertexAttribManager::Ref default_vertex_attrib_manager_; |
bajones
2012/10/12 21:02:54
I think the default_vertex_attrib_manager_ should
greggman
2012/10/12 21:14:04
It seems like GLES2CmdDecoder assigns default_vert
|
@@ -1495,46 +1433,10 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
// The size of fiixed attrib buffer. |
GLsizei fixed_attrib_buffer_size_; |
- // Current active texture by 0 - n index. |
- // In other words, if we call glActiveTexture(GL_TEXTURE2) this value would |
- // be 2. |
- GLuint active_texture_unit_; |
- |
- // Which textures are bound to texture units through glActiveTexture. |
- scoped_array<TextureUnit> texture_units_; |
- |
// state saved for clearing so we can clear render buffers and then |
// restore to these values. |
- GLclampf clear_red_; |
- GLclampf clear_green_; |
- GLclampf clear_blue_; |
- GLclampf clear_alpha_; |
- GLboolean mask_red_; |
- GLboolean mask_green_; |
- GLboolean mask_blue_; |
- GLboolean mask_alpha_; |
- GLint clear_stencil_; |
- GLuint mask_stencil_front_; |
- GLuint mask_stencil_back_; |
- GLclampf clear_depth_; |
- GLboolean mask_depth_; |
- bool enable_blend_; |
- bool enable_cull_face_; |
- bool enable_scissor_test_; |
- bool enable_depth_test_; |
- bool enable_stencil_test_; |
bool state_dirty_; |
- // The program in use by glUseProgram |
- ProgramManager::ProgramInfo::Ref current_program_; |
- |
- // The currently bound framebuffers |
- FramebufferManager::FramebufferInfo::Ref bound_read_framebuffer_; |
- FramebufferManager::FramebufferInfo::Ref bound_draw_framebuffer_; |
- |
- // The currently bound renderbuffer |
- RenderbufferManager::RenderbufferInfo::Ref bound_renderbuffer_; |
- |
// The offscreen frame buffer that the client renders to. With EGL, the |
// depth and stencil buffers are separate. With regular GL there is a single |
// packed depth stencil buffer in offscreen_target_depth_render_buffer_. |
@@ -1561,7 +1463,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
GLenum offscreen_saved_color_format_; |
scoped_ptr<QueryManager> query_manager_; |
- QueryManager::Query::Ref current_query_; |
scoped_ptr<VertexArrayManager> vertex_array_manager_; |
@@ -1631,11 +1532,6 @@ class GLES2DecoderImpl : public base::SupportsWeakPtr<GLES2DecoderImpl>, |
scoped_ptr<CopyTextureCHROMIUMResourceManager> copy_texture_CHROMIUM_; |
- // Cached values of the currently assigned viewport dimensions. |
- GLint viewport_x_, viewport_y_; |
- GLsizei viewport_width_, viewport_height_; |
- GLsizei viewport_max_width_, viewport_max_height_; |
- |
// Command buffer stats. |
int texture_upload_count_; |
base::TimeDelta total_texture_upload_time_; |
@@ -1698,7 +1594,7 @@ ScopedResolvedFrameBufferBinder::ScopedResolvedFrameBufferBinder( |
: decoder_(decoder) { |
resolve_and_bind_ = (decoder_->offscreen_target_frame_buffer_.get() && |
decoder_->IsOffscreenBufferMultisampled() && |
- (!decoder_->bound_read_framebuffer_.get() || |
+ (!decoder_->state_.bound_read_framebuffer.get() || |
enforce_internal_framebuffer)); |
if (!resolve_and_bind_) |
return; |
@@ -1751,7 +1647,7 @@ ScopedResolvedFrameBufferBinder::~ScopedResolvedFrameBufferBinder() { |
ScopedGLErrorSuppressor suppressor(decoder_); |
decoder_->RestoreCurrentFramebufferBindings(); |
- if (decoder_->enable_scissor_test_) { |
+ if (decoder_->state_.enable_scissor_test) { |
glEnable(GL_SCISSOR_TEST); |
} |
} |
@@ -1989,8 +1885,6 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group) |
: GLES2Decoder(), |
group_(group), |
error_bits_(0), |
- pack_alignment_(4), |
- unpack_alignment_(4), |
unpack_flip_y_(false), |
unpack_premultiply_alpha_(false), |
unpack_unpremultiply_alpha_(false), |
@@ -1999,25 +1893,6 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group) |
attrib_0_size_(0), |
fixed_attrib_buffer_id_(0), |
fixed_attrib_buffer_size_(0), |
- active_texture_unit_(0), |
- clear_red_(0), |
- clear_green_(0), |
- clear_blue_(0), |
- clear_alpha_(0), |
- mask_red_(true), |
- mask_green_(true), |
- mask_blue_(true), |
- mask_alpha_(true), |
- clear_stencil_(0), |
- mask_stencil_front_(-1), |
- mask_stencil_back_(-1), |
- clear_depth_(1.0f), |
- mask_depth_(true), |
- enable_blend_(false), |
- enable_cull_face_(false), |
- enable_scissor_test_(false), |
- enable_depth_test_(false), |
- enable_stencil_test_(false), |
state_dirty_(true), |
offscreen_target_color_format_(0), |
offscreen_target_depth_format_(0), |
@@ -2044,12 +1919,6 @@ GLES2DecoderImpl::GLES2DecoderImpl(ContextGroup* group) |
force_webgl_glsl_validation_(false), |
derivatives_explicitly_enabled_(false), |
compile_shader_always_succeeds_(false), |
- viewport_x_(0), |
- viewport_y_(0), |
- viewport_width_(0), |
- viewport_height_(0), |
- viewport_max_width_(0), |
- viewport_max_height_(0), |
texture_upload_count_(0) { |
DCHECK(group); |
@@ -2151,7 +2020,7 @@ bool GLES2DecoderImpl::Initialize( |
glBindBuffer(GL_ARRAY_BUFFER, 0); |
glGenBuffersARB(1, &fixed_attrib_buffer_id_); |
- texture_units_.reset( |
+ state_.texture_units.reset( |
new TextureUnit[group_->max_texture_units()]); |
for (uint32 tt = 0; tt < group_->max_texture_units(); ++tt) { |
glActiveTexture(GL_TEXTURE0 + tt); |
@@ -2159,19 +2028,19 @@ bool GLES2DecoderImpl::Initialize( |
TextureManager::TextureInfo* info; |
if (feature_info_->feature_flags().oes_egl_image_external) { |
info = texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_EXTERNAL_OES); |
- texture_units_[tt].bound_texture_external_oes = info; |
+ state_.texture_units[tt].bound_texture_external_oes = info; |
glBindTexture(GL_TEXTURE_EXTERNAL_OES, info->service_id()); |
} |
if (feature_info_->feature_flags().arb_texture_rectangle) { |
info = texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_RECTANGLE_ARB); |
- texture_units_[tt].bound_texture_rectangle_arb = info; |
+ state_.texture_units[tt].bound_texture_rectangle_arb = info; |
glBindTexture(GL_TEXTURE_RECTANGLE_ARB, info->service_id()); |
} |
info = texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_CUBE_MAP); |
- texture_units_[tt].bound_texture_cube_map = info; |
+ state_.texture_units[tt].bound_texture_cube_map = info; |
glBindTexture(GL_TEXTURE_CUBE_MAP, info->service_id()); |
info = texture_manager()->GetDefaultTextureInfo(GL_TEXTURE_2D); |
- texture_units_[tt].bound_texture_2d = info; |
+ state_.texture_units[tt].bound_texture_2d = info; |
glBindTexture(GL_TEXTURE_2D, info->service_id()); |
} |
glActiveTexture(GL_TEXTURE0); |
@@ -2348,48 +2217,56 @@ bool GLES2DecoderImpl::Initialize( |
return false; |
} |
- viewport_width_ = size.width(); |
- viewport_height_ = size.height(); |
- glViewport(viewport_x_, viewport_y_, viewport_width_, viewport_height_); |
+ state_.viewport_width = size.width(); |
+ state_.viewport_height = size.height(); |
+ glViewport( |
+ state_.viewport_x, state_.viewport_y, |
+ state_.viewport_width, state_.viewport_height); |
GLint viewport_params[4] = { 0 }; |
glGetIntegerv(GL_MAX_VIEWPORT_DIMS, viewport_params); |
- viewport_max_width_ = viewport_params[0]; |
- viewport_max_height_ = viewport_params[1]; |
+ state_.viewport_max_width = viewport_params[0]; |
+ state_.viewport_max_height = viewport_params[1]; |
// Set all the default state because some GL drivers get it wrong. |
- glActiveTexture(GL_TEXTURE0 + active_texture_unit_); |
+ glActiveTexture(GL_TEXTURE0 + state_.active_texture_unit); |
glLineWidth(1.0); |
- EnableDisable(GL_BLEND, enable_blend_); |
+ EnableDisable(GL_BLEND, state_.enable_blend); |
glBlendColor(0.0f, 0.0, 0.0f, 0.0f); |
glBlendFunc(GL_ONE, GL_ZERO); |
glBlendEquation(GL_FUNC_ADD); |
glBlendFuncSeparate(GL_ONE, GL_ZERO, GL_ONE, GL_ZERO); |
- glClearColor(clear_red_, clear_green_, clear_blue_, clear_alpha_); |
- glColorMask(mask_red_, mask_green_, mask_blue_, mask_alpha_); |
- EnableDisable(GL_CULL_FACE, enable_cull_face_); |
+ glClearColor( |
+ state_.color_clear_red, state_.color_clear_green, state_.color_clear_blue, |
+ state_.color_clear_alpha); |
+ glColorMask( |
+ state_.color_mask_red, state_.color_mask_green, state_.color_mask_blue, |
+ state_.color_mask_alpha); |
+ EnableDisable(GL_CULL_FACE, state_.enable_cull_face); |
glCullFace(GL_BACK); |
- glClearDepth(clear_depth_); |
+ glClearDepth(state_.depth_clear); |
glDepthFunc(GL_LESS); |
glDepthRange(0.0f, 1.0f); |
- EnableDisable(GL_DEPTH_TEST, enable_depth_test_); |
+ EnableDisable(GL_DEPTH_TEST, state_.enable_depth_test); |
glEnable(GL_DITHER); |
glFrontFace(GL_CCW); |
glHint(GL_GENERATE_MIPMAP_HINT, GL_DONT_CARE); |
glLineWidth(1.0f); |
- glPixelStorei(GL_PACK_ALIGNMENT, pack_alignment_); |
+ glPixelStorei(GL_PACK_ALIGNMENT, state_.pack_alignment); |
glPolygonOffset(0.0f, 0.0f); |
glDisable(GL_POLYGON_OFFSET_FILL); |
glSampleCoverage(1.0, false); |
- glScissor(viewport_x_, viewport_y_, viewport_width_, viewport_height_); |
- EnableDisable(GL_SCISSOR_TEST, enable_scissor_test_); |
- EnableDisable(GL_STENCIL_TEST, enable_stencil_test_); |
- glClearStencil(clear_stencil_); |
+ glScissor( |
+ state_.viewport_x, state_.viewport_y, |
+ state_.viewport_width, state_.viewport_height); |
+ EnableDisable(GL_SCISSOR_TEST, state_.enable_scissor_test); |
+ EnableDisable(GL_STENCIL_TEST, state_.enable_stencil_test); |
+ glClearStencil(state_.stencil_clear); |
glStencilFunc(GL_ALWAYS, 0, 0xFFFFFFFFU); |
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); |
- glStencilMaskSeparate(GL_FRONT, mask_stencil_front_); |
- glStencilMaskSeparate(GL_BACK, mask_stencil_back_); |
- glPixelStorei(GL_UNPACK_ALIGNMENT, unpack_alignment_); |
+ glStencilMaskSeparate(GL_FRONT, state_.stencil_mask_front); |
+ glStencilMaskSeparate(GL_BACK, state_.stencil_mask_back); |
+ glPixelStorei(GL_UNPACK_ALIGNMENT, state_.unpack_alignment); |
DoBindBuffer(GL_ARRAY_BUFFER, 0); |
DoBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); |
@@ -2551,9 +2428,9 @@ void GLES2DecoderImpl::DeleteBuffersHelper( |
for (GLsizei ii = 0; ii < n; ++ii) { |
BufferManager::BufferInfo* buffer = GetBufferInfo(client_ids[ii]); |
if (buffer && !buffer->IsDeleted()) { |
- vertex_attrib_manager_->Unbind(buffer); |
- if (bound_array_buffer_ == buffer) { |
- bound_array_buffer_ = NULL; |
+ state_.vertex_attrib_manager->Unbind(buffer); |
+ if (state_.bound_array_buffer == buffer) { |
+ state_.bound_array_buffer = NULL; |
} |
RemoveBufferInfo(client_ids[ii]); |
} |
@@ -2569,15 +2446,15 @@ void GLES2DecoderImpl::DeleteFramebuffersHelper( |
FramebufferManager::FramebufferInfo* framebuffer = |
GetFramebufferInfo(client_ids[ii]); |
if (framebuffer && !framebuffer->IsDeleted()) { |
- if (framebuffer == bound_draw_framebuffer_) { |
- bound_draw_framebuffer_ = NULL; |
+ if (framebuffer == state_.bound_draw_framebuffer) { |
+ state_.bound_draw_framebuffer = NULL; |
state_dirty_ = true; |
GLenum target = supports_separate_framebuffer_binds ? |
GL_DRAW_FRAMEBUFFER_EXT : GL_FRAMEBUFFER; |
glBindFramebufferEXT(target, GetBackbufferServiceId()); |
} |
- if (framebuffer == bound_read_framebuffer_) { |
- bound_read_framebuffer_ = NULL; |
+ if (framebuffer == state_.bound_read_framebuffer) { |
+ state_.bound_read_framebuffer = NULL; |
GLenum target = supports_separate_framebuffer_binds ? |
GL_READ_FRAMEBUFFER_EXT : GL_FRAMEBUFFER; |
glBindFramebufferEXT(target, GetBackbufferServiceId()); |
@@ -2595,22 +2472,22 @@ void GLES2DecoderImpl::DeleteRenderbuffersHelper( |
RenderbufferManager::RenderbufferInfo* renderbuffer = |
GetRenderbufferInfo(client_ids[ii]); |
if (renderbuffer && !renderbuffer->IsDeleted()) { |
- if (bound_renderbuffer_ == renderbuffer) { |
- bound_renderbuffer_ = NULL; |
+ if (state_.bound_renderbuffer == renderbuffer) { |
+ state_.bound_renderbuffer = NULL; |
} |
// Unbind from current framebuffers. |
if (supports_separate_framebuffer_binds) { |
- if (bound_read_framebuffer_) { |
- bound_read_framebuffer_->UnbindRenderbuffer( |
+ if (state_.bound_read_framebuffer) { |
+ state_.bound_read_framebuffer->UnbindRenderbuffer( |
GL_READ_FRAMEBUFFER_EXT, renderbuffer); |
} |
- if (bound_draw_framebuffer_) { |
- bound_draw_framebuffer_->UnbindRenderbuffer( |
+ if (state_.bound_draw_framebuffer) { |
+ state_.bound_draw_framebuffer->UnbindRenderbuffer( |
GL_DRAW_FRAMEBUFFER_EXT, renderbuffer); |
} |
} else { |
- if (bound_draw_framebuffer_) { |
- bound_draw_framebuffer_->UnbindRenderbuffer( |
+ if (state_.bound_draw_framebuffer) { |
+ state_.bound_draw_framebuffer->UnbindRenderbuffer( |
GL_FRAMEBUFFER, renderbuffer); |
} |
} |
@@ -2632,21 +2509,21 @@ void GLES2DecoderImpl::DeleteTexturesHelper( |
} |
// Unbind texture from texture units. |
for (size_t jj = 0; jj < group_->max_texture_units(); ++jj) { |
- texture_units_[jj].Unbind(texture); |
+ state_.texture_units[jj].Unbind(texture); |
} |
// Unbind from current framebuffers. |
if (supports_separate_framebuffer_binds) { |
- if (bound_read_framebuffer_) { |
- bound_read_framebuffer_->UnbindTexture( |
+ if (state_.bound_read_framebuffer) { |
+ state_.bound_read_framebuffer->UnbindTexture( |
GL_READ_FRAMEBUFFER_EXT, texture); |
} |
- if (bound_draw_framebuffer_) { |
- bound_draw_framebuffer_->UnbindTexture( |
+ if (state_.bound_draw_framebuffer) { |
+ state_.bound_draw_framebuffer->UnbindTexture( |
GL_DRAW_FRAMEBUFFER_EXT, texture); |
} |
} else { |
- if (bound_draw_framebuffer_) { |
- bound_draw_framebuffer_->UnbindTexture(GL_FRAMEBUFFER, texture); |
+ if (state_.bound_draw_framebuffer) { |
+ state_.bound_draw_framebuffer->UnbindTexture(GL_FRAMEBUFFER, texture); |
} |
} |
GLuint service_id = texture->service_id(); |
@@ -2708,22 +2585,22 @@ void GLES2DecoderImpl::RestoreCurrentFramebufferBindings() { |
if (!feature_info_->feature_flags().chromium_framebuffer_multisample) { |
RebindCurrentFramebuffer( |
GL_FRAMEBUFFER, |
- bound_draw_framebuffer_.get(), |
+ state_.bound_draw_framebuffer.get(), |
GetBackbufferServiceId()); |
} else { |
RebindCurrentFramebuffer( |
GL_READ_FRAMEBUFFER_EXT, |
- bound_read_framebuffer_.get(), |
+ state_.bound_read_framebuffer.get(), |
GetBackbufferServiceId()); |
RebindCurrentFramebuffer( |
GL_DRAW_FRAMEBUFFER_EXT, |
- bound_draw_framebuffer_.get(), |
+ state_.bound_draw_framebuffer.get(), |
GetBackbufferServiceId()); |
} |
} |
void GLES2DecoderImpl::RestoreCurrentTexture2DBindings() { |
- GLES2DecoderImpl::TextureUnit& info = texture_units_[0]; |
+ TextureUnit& info = state_.texture_units[0]; |
GLuint last_id; |
if (info.bound_texture_2d) { |
last_id = info.bound_texture_2d->service_id(); |
@@ -2732,7 +2609,7 @@ void GLES2DecoderImpl::RestoreCurrentTexture2DBindings() { |
} |
glBindTexture(GL_TEXTURE_2D, last_id); |
- glActiveTexture(GL_TEXTURE0 + active_texture_unit_); |
+ glActiveTexture(GL_TEXTURE0 + state_.active_texture_unit); |
} |
bool GLES2DecoderImpl::CheckFramebufferValid( |
@@ -2786,12 +2663,14 @@ bool GLES2DecoderImpl::CheckFramebufferValid( |
bool GLES2DecoderImpl::CheckBoundFramebuffersValid(const char* func_name) { |
if (!feature_info_->feature_flags().chromium_framebuffer_multisample) { |
return CheckFramebufferValid( |
- bound_draw_framebuffer_, GL_FRAMEBUFFER_EXT, func_name); |
+ state_.bound_draw_framebuffer, GL_FRAMEBUFFER_EXT, func_name); |
} |
return CheckFramebufferValid( |
- bound_draw_framebuffer_, GL_DRAW_FRAMEBUFFER_EXT, func_name) && |
+ state_.bound_draw_framebuffer, |
+ GL_DRAW_FRAMEBUFFER_EXT, func_name) && |
CheckFramebufferValid( |
- bound_read_framebuffer_, GL_READ_FRAMEBUFFER_EXT, func_name); |
+ state_.bound_read_framebuffer, |
+ GL_READ_FRAMEBUFFER_EXT, func_name); |
} |
gfx::Size GLES2DecoderImpl::GetBoundReadFrameBufferSize() { |
@@ -2924,15 +2803,15 @@ void GLES2DecoderImpl::Destroy(bool have_context) { |
SetParent(NULL, 0); |
// Unbind everything. |
- vertex_attrib_manager_ = NULL; |
+ state_.vertex_attrib_manager = NULL; |
default_vertex_attrib_manager_ = NULL; |
- texture_units_.reset(); |
- bound_array_buffer_ = NULL; |
- current_query_ = NULL; |
- current_program_ = NULL; |
- bound_read_framebuffer_ = NULL; |
- bound_draw_framebuffer_ = NULL; |
- bound_renderbuffer_ = NULL; |
+ state_.texture_units.reset(); |
+ state_.bound_array_buffer = NULL; |
+ state_.current_query = NULL; |
+ state_.current_program = NULL; |
+ state_.bound_read_framebuffer = NULL; |
+ state_.bound_draw_framebuffer = NULL; |
+ state_.bound_renderbuffer = NULL; |
if (have_context) { |
if (copy_texture_CHROMIUM_.get()) { |
@@ -2940,9 +2819,9 @@ void GLES2DecoderImpl::Destroy(bool have_context) { |
copy_texture_CHROMIUM_.reset(); |
} |
- if (current_program_) { |
- program_manager()->UnuseProgram(shader_manager(), current_program_); |
- current_program_ = NULL; |
+ if (state_.current_program) { |
+ program_manager()->UnuseProgram(shader_manager(), state_.current_program); |
+ state_.current_program = NULL; |
} |
if (attrib_0_buffer_id_) { |
@@ -3386,7 +3265,7 @@ void GLES2DecoderImpl::DoActiveTexture(GLenum texture_unit) { |
"glActiveTexture", texture_unit, "texture_unit"); |
return; |
} |
- active_texture_unit_ = texture_index; |
+ state_.active_texture_unit = texture_index; |
glActiveTexture(texture_unit); |
} |
@@ -3421,10 +3300,10 @@ void GLES2DecoderImpl::DoBindBuffer(GLenum target, GLuint client_id) { |
} |
switch (target) { |
case GL_ARRAY_BUFFER: |
- bound_array_buffer_ = info; |
+ state_.bound_array_buffer = info; |
break; |
case GL_ELEMENT_ARRAY_BUFFER: |
- vertex_attrib_manager_->SetElementArrayBuffer(info); |
+ state_.vertex_attrib_manager->SetElementArrayBuffer(info); |
break; |
default: |
NOTREACHED(); // Validation should prevent us getting here. |
@@ -3466,18 +3345,21 @@ bool GLES2DecoderImpl::BoundFramebufferHasStencilAttachment() { |
void GLES2DecoderImpl::ApplyDirtyState() { |
if (state_dirty_) { |
glColorMask( |
- mask_red_, mask_green_, mask_blue_, |
- mask_alpha_ && BoundFramebufferHasColorAttachmentWithAlpha()); |
+ state_.color_mask_red, state_.color_mask_green, state_.color_mask_blue, |
+ state_.color_mask_alpha && |
+ BoundFramebufferHasColorAttachmentWithAlpha()); |
bool have_depth = BoundFramebufferHasDepthAttachment(); |
- glDepthMask(mask_depth_ && have_depth); |
- EnableDisable(GL_DEPTH_TEST, enable_depth_test_ && have_depth); |
+ glDepthMask(state_.depth_mask && have_depth); |
+ EnableDisable(GL_DEPTH_TEST, state_.enable_depth_test && have_depth); |
bool have_stencil = BoundFramebufferHasStencilAttachment(); |
- glStencilMaskSeparate(GL_FRONT, have_stencil ? mask_stencil_front_ : 0); |
- glStencilMaskSeparate(GL_BACK, have_stencil ? mask_stencil_back_ : 0); |
- EnableDisable(GL_STENCIL_TEST, enable_stencil_test_ && have_stencil); |
- EnableDisable(GL_CULL_FACE, enable_cull_face_); |
- EnableDisable(GL_SCISSOR_TEST, enable_scissor_test_); |
- EnableDisable(GL_BLEND, enable_blend_); |
+ glStencilMaskSeparate( |
+ GL_FRONT, have_stencil ? state_.stencil_mask_front : 0); |
+ glStencilMaskSeparate( |
+ GL_BACK, have_stencil ? state_.stencil_mask_back : 0); |
+ EnableDisable(GL_STENCIL_TEST, state_.enable_stencil_test && have_stencil); |
+ EnableDisable(GL_CULL_FACE, state_.enable_cull_face); |
+ EnableDisable(GL_SCISSOR_TEST, state_.enable_scissor_test); |
+ EnableDisable(GL_BLEND, state_.enable_blend); |
state_dirty_ = false; |
} |
} |
@@ -3524,10 +3406,10 @@ void GLES2DecoderImpl::DoBindFramebuffer(GLenum target, GLuint client_id) { |
} |
if (target == GL_FRAMEBUFFER || target == GL_DRAW_FRAMEBUFFER_EXT) { |
- bound_draw_framebuffer_ = info; |
+ state_.bound_draw_framebuffer = info; |
} |
if (target == GL_FRAMEBUFFER || target == GL_READ_FRAMEBUFFER_EXT) { |
- bound_read_framebuffer_ = info; |
+ state_.bound_read_framebuffer = info; |
} |
state_dirty_ = true; |
@@ -3566,7 +3448,7 @@ void GLES2DecoderImpl::DoBindRenderbuffer(GLenum target, GLuint client_id) { |
} |
info->MarkAsValid(); |
} |
- bound_renderbuffer_ = info; |
+ state_.bound_renderbuffer = info; |
glBindRenderbufferEXT(target, service_id); |
} |
@@ -3611,7 +3493,7 @@ void GLES2DecoderImpl::DoBindTexture(GLenum target, GLuint client_id) { |
texture_manager()->SetInfoTarget(info, target); |
} |
glBindTexture(target, info->service_id()); |
- TextureUnit& unit = texture_units_[active_texture_unit_]; |
+ TextureUnit& unit = state_.texture_units[state_.active_texture_unit]; |
unit.bind_target = target; |
switch (target) { |
case GL_TEXTURE_2D: |
@@ -3640,7 +3522,7 @@ void GLES2DecoderImpl::DoBindTexture(GLenum target, GLuint client_id) { |
} |
void GLES2DecoderImpl::DoDisableVertexAttribArray(GLuint index) { |
- if (vertex_attrib_manager_->Enable(index, false)) { |
+ if (state_.vertex_attrib_manager->Enable(index, false)) { |
if (index != 0 || |
gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) { |
glDisableVertexAttribArray(index); |
@@ -3652,7 +3534,7 @@ void GLES2DecoderImpl::DoDisableVertexAttribArray(GLuint index) { |
} |
void GLES2DecoderImpl::DoEnableVertexAttribArray(GLuint index) { |
- if (vertex_attrib_manager_->Enable(index, true)) { |
+ if (state_.vertex_attrib_manager->Enable(index, true)) { |
glEnableVertexAttribArray(index); |
} else { |
SetGLError(GL_INVALID_VALUE, |
@@ -3769,40 +3651,40 @@ bool GLES2DecoderImpl::GetHelper( |
case GL_COLOR_WRITEMASK: |
*num_written = 4; |
if (params) { |
- params[0] = mask_red_; |
- params[1] = mask_green_; |
- params[2] = mask_blue_; |
- params[3] = mask_alpha_; |
+ params[0] = state_.color_mask_red; |
+ params[1] = state_.color_mask_green; |
+ params[2] = state_.color_mask_blue; |
+ params[3] = state_.color_mask_alpha; |
} |
return true; |
case GL_DEPTH_WRITEMASK: |
*num_written = 1; |
if (params) { |
- params[0] = mask_depth_; |
+ params[0] = state_.depth_mask; |
} |
return true; |
case GL_STENCIL_BACK_WRITEMASK: |
*num_written = 1; |
if (params) { |
- params[0] = mask_stencil_back_; |
+ params[0] = state_.stencil_mask_back; |
} |
return true; |
case GL_STENCIL_WRITEMASK: |
*num_written = 1; |
if (params) { |
- params[0] = mask_stencil_front_; |
+ params[0] = state_.stencil_mask_front; |
} |
return true; |
case GL_DEPTH_TEST: |
*num_written = 1; |
if (params) { |
- params[0] = enable_depth_test_; |
+ params[0] = state_.enable_depth_test; |
} |
return true; |
case GL_STENCIL_TEST: |
*num_written = 1; |
if (params) { |
- params[0] = enable_stencil_test_; |
+ params[0] = state_.enable_stencil_test; |
} |
return true; |
case GL_ALPHA_BITS: |
@@ -3866,9 +3748,9 @@ bool GLES2DecoderImpl::GetHelper( |
case GL_ARRAY_BUFFER_BINDING: |
*num_written = 1; |
if (params) { |
- if (bound_array_buffer_) { |
+ if (state_.bound_array_buffer) { |
GLuint client_id = 0; |
- buffer_manager()->GetClientId(bound_array_buffer_->service_id(), |
+ buffer_manager()->GetClientId(state_.bound_array_buffer->service_id(), |
&client_id); |
*params = client_id; |
} else { |
@@ -3879,11 +3761,11 @@ bool GLES2DecoderImpl::GetHelper( |
case GL_ELEMENT_ARRAY_BUFFER_BINDING: |
*num_written = 1; |
if (params) { |
- if (vertex_attrib_manager_->element_array_buffer()) { |
+ if (state_.vertex_attrib_manager->element_array_buffer()) { |
GLuint client_id = 0; |
buffer_manager()->GetClientId( |
- vertex_attrib_manager_->element_array_buffer()->service_id(), |
- &client_id); |
+ state_.vertex_attrib_manager->element_array_buffer( |
+ )->service_id(), &client_id); |
*params = client_id; |
} else { |
*params = 0; |
@@ -3939,10 +3821,10 @@ bool GLES2DecoderImpl::GetHelper( |
case GL_CURRENT_PROGRAM: |
*num_written = 1; |
if (params) { |
- if (current_program_) { |
+ if (state_.current_program) { |
GLuint client_id = 0; |
program_manager()->GetClientId( |
- current_program_->service_id(), &client_id); |
+ state_.current_program->service_id(), &client_id); |
*params = client_id; |
} else { |
*params = 0; |
@@ -3952,7 +3834,7 @@ bool GLES2DecoderImpl::GetHelper( |
case GL_TEXTURE_BINDING_2D: |
*num_written = 1; |
if (params) { |
- TextureUnit& unit = texture_units_[active_texture_unit_]; |
+ TextureUnit& unit = state_.texture_units[state_.active_texture_unit]; |
if (unit.bound_texture_2d) { |
GLuint client_id = 0; |
texture_manager()->GetClientId( |
@@ -3966,7 +3848,7 @@ bool GLES2DecoderImpl::GetHelper( |
case GL_TEXTURE_BINDING_CUBE_MAP: |
*num_written = 1; |
if (params) { |
- TextureUnit& unit = texture_units_[active_texture_unit_]; |
+ TextureUnit& unit = state_.texture_units[state_.active_texture_unit]; |
if (unit.bound_texture_cube_map) { |
GLuint client_id = 0; |
texture_manager()->GetClientId( |
@@ -3980,7 +3862,7 @@ bool GLES2DecoderImpl::GetHelper( |
case GL_TEXTURE_BINDING_EXTERNAL_OES: |
*num_written = 1; |
if (params) { |
- TextureUnit& unit = texture_units_[active_texture_unit_]; |
+ TextureUnit& unit = state_.texture_units[state_.active_texture_unit]; |
if (unit.bound_texture_external_oes) { |
GLuint client_id = 0; |
texture_manager()->GetClientId( |
@@ -3994,7 +3876,7 @@ bool GLES2DecoderImpl::GetHelper( |
case GL_TEXTURE_BINDING_RECTANGLE_ARB: |
*num_written = 1; |
if (params) { |
- TextureUnit& unit = texture_units_[active_texture_unit_]; |
+ TextureUnit& unit = state_.texture_units[state_.active_texture_unit]; |
if (unit.bound_texture_rectangle_arb) { |
GLuint client_id = 0; |
texture_manager()->GetClientId( |
@@ -4367,8 +4249,10 @@ error::Error GLES2DecoderImpl::DoClear(GLbitfield mask) { |
if (ShouldDeferDraws()) |
return error::kDeferCommandUntilLater; |
if (CheckBoundFramebuffersValid("glClear")) { |
- UNSHIPPED_TRACE_EVENT_INSTANT2("test_gpu", "DoClear", "red", clear_red_, |
- "green", clear_green_); |
+ UNSHIPPED_TRACE_EVENT_INSTANT2( |
+ "test_gpu", "DoClear", |
+ "red", state_.color_clear_red, |
+ "green", state_.color_clear_green); |
ApplyDirtyState(); |
glClear(mask); |
} |
@@ -4409,7 +4293,7 @@ void GLES2DecoderImpl::DoFramebufferRenderbuffer( |
if (error == GL_NO_ERROR) { |
framebuffer_info->AttachRenderbuffer(attachment, info); |
} |
- if (framebuffer_info == bound_draw_framebuffer_) { |
+ if (framebuffer_info == state_.bound_draw_framebuffer) { |
state_dirty_ = true; |
} |
} |
@@ -4417,24 +4301,24 @@ void GLES2DecoderImpl::DoFramebufferRenderbuffer( |
bool GLES2DecoderImpl::SetCapabilityState(GLenum cap, bool enabled) { |
switch (cap) { |
case GL_BLEND: |
- enable_blend_ = enabled; |
+ state_.enable_blend = enabled; |
return true; |
case GL_CULL_FACE: |
- enable_cull_face_ = enabled; |
+ state_.enable_cull_face = enabled; |
return true; |
case GL_SCISSOR_TEST: |
- enable_scissor_test_ = enabled; |
+ state_.enable_scissor_test = enabled; |
return true; |
case GL_DEPTH_TEST: { |
- if (enable_depth_test_ != enabled) { |
- enable_depth_test_ = enabled; |
+ if (state_.enable_depth_test != enabled) { |
+ state_.enable_depth_test = enabled; |
state_dirty_ = true; |
} |
return false; |
} |
case GL_STENCIL_TEST: |
- if (enable_stencil_test_ != enabled) { |
- enable_stencil_test_ = enabled; |
+ if (state_.enable_stencil_test != enabled) { |
+ state_.enable_stencil_test = enabled; |
state_dirty_ = true; |
} |
return false; |
@@ -4458,15 +4342,15 @@ void GLES2DecoderImpl::DoEnable(GLenum cap) { |
bool GLES2DecoderImpl::DoIsEnabled(GLenum cap) { |
switch (cap) { |
case GL_BLEND: |
- return enable_blend_; |
+ return state_.enable_blend; |
case GL_CULL_FACE: |
- return enable_cull_face_; |
+ return state_.enable_cull_face; |
case GL_SCISSOR_TEST: |
- return enable_scissor_test_; |
+ return state_.enable_scissor_test; |
case GL_DEPTH_TEST: |
- return enable_depth_test_; |
+ return state_.enable_depth_test; |
case GL_STENCIL_TEST: |
- return enable_stencil_test_; |
+ return state_.enable_stencil_test; |
default: |
return glIsEnabled(cap) != 0; |
} |
@@ -4474,49 +4358,49 @@ bool GLES2DecoderImpl::DoIsEnabled(GLenum cap) { |
void GLES2DecoderImpl::DoClearColor( |
GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) { |
- clear_red_ = red; |
- clear_green_ = green; |
- clear_blue_ = blue; |
- clear_alpha_ = alpha; |
+ state_.color_clear_red = red; |
+ state_.color_clear_green = green; |
+ state_.color_clear_blue = blue; |
+ state_.color_clear_alpha = alpha; |
glClearColor(red, green, blue, alpha); |
} |
void GLES2DecoderImpl::DoClearDepthf(GLclampf depth) { |
- clear_depth_ = depth; |
+ state_.depth_clear = depth; |
glClearDepth(depth); |
} |
void GLES2DecoderImpl::DoClearStencil(GLint s) { |
- clear_stencil_ = s; |
+ state_.stencil_clear = s; |
glClearStencil(s); |
} |
void GLES2DecoderImpl::DoColorMask( |
GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) { |
- mask_red_ = red; |
- mask_green_ = green; |
- mask_blue_ = blue; |
- mask_alpha_ = alpha; |
+ state_.color_mask_red = red; |
+ state_.color_mask_green = green; |
+ state_.color_mask_blue = blue; |
+ state_.color_mask_alpha = alpha; |
state_dirty_ = true; |
} |
void GLES2DecoderImpl::DoDepthMask(GLboolean depth) { |
- mask_depth_ = depth; |
+ state_.depth_mask = depth; |
state_dirty_ = true; |
} |
void GLES2DecoderImpl::DoStencilMask(GLuint mask) { |
- mask_stencil_front_ = mask; |
- mask_stencil_back_ = mask; |
+ state_.stencil_mask_front = mask; |
+ state_.stencil_mask_back = mask; |
state_dirty_ = true; |
} |
void GLES2DecoderImpl::DoStencilMaskSeparate(GLenum face, GLuint mask) { |
if (face == GL_FRONT || face == GL_FRONT_AND_BACK) { |
- mask_stencil_front_ = mask; |
+ state_.stencil_mask_front = mask; |
} |
if (face == GL_BACK || face == GL_FRONT_AND_BACK) { |
- mask_stencil_back_ = mask; |
+ state_.stencil_mask_back = mask; |
} |
state_dirty_ = true; |
} |
@@ -4576,10 +4460,12 @@ void GLES2DecoderImpl::ClearUnclearedAttachments( |
void GLES2DecoderImpl::RestoreClearState() { |
state_dirty_ = true; |
- glClearColor(clear_red_, clear_green_, clear_blue_, clear_alpha_); |
- glClearStencil(clear_stencil_); |
- glClearDepth(clear_depth_); |
- if (enable_scissor_test_) { |
+ glClearColor( |
+ state_.color_clear_red, state_.color_clear_green, state_.color_clear_blue, |
+ state_.color_clear_alpha); |
+ glClearStencil(state_.stencil_clear); |
+ glClearDepth(state_.depth_clear); |
+ if (state_.enable_scissor_test) { |
glEnable(GL_SCISSOR_TEST); |
} |
} |
@@ -4631,7 +4517,7 @@ void GLES2DecoderImpl::DoFramebufferTexture2D( |
if (error == GL_NO_ERROR) { |
framebuffer_info->AttachTexture(attachment, info, textarget, level); |
} |
- if (framebuffer_info == bound_draw_framebuffer_) { |
+ if (framebuffer_info == state_.bound_draw_framebuffer) { |
state_dirty_ = true; |
} |
} |
@@ -4837,7 +4723,7 @@ void GLES2DecoderImpl::DoLinkProgram(GLuint program) { |
vertex_translator, |
fragment_translator, |
feature_info_)) { |
- if (info == current_program_.get()) { |
+ if (info == state_.current_program.get()) { |
program_manager()->ClearUniforms(info); |
} |
} |
@@ -4906,12 +4792,12 @@ void GLES2DecoderImpl::DoTexParameteriv( |
} |
bool GLES2DecoderImpl::CheckCurrentProgram(const char* function_name) { |
- if (!current_program_) { |
+ if (!state_.current_program) { |
// The program does not exist. |
SetGLError(GL_INVALID_OPERATION, function_name, "no program in use"); |
return false; |
} |
- if (!current_program_->InUse()) { |
+ if (!state_.current_program->InUse()) { |
SetGLError(GL_INVALID_OPERATION, function_name, "program not linked"); |
return false; |
} |
@@ -4937,7 +4823,7 @@ bool GLES2DecoderImpl::PrepForSetUniformByLocation( |
} |
GLint array_index = -1; |
const ProgramManager::ProgramInfo::UniformInfo* info = |
- current_program_->GetUniformInfoByFakeLocation( |
+ state_.current_program->GetUniformInfoByFakeLocation( |
fake_location, real_location, &array_index); |
if (!info) { |
SetGLError(GL_INVALID_OPERATION, function_name, "unknown location"); |
@@ -4964,7 +4850,7 @@ void GLES2DecoderImpl::DoUniform1i(GLint fake_location, GLint v0) { |
fake_location, "glUniform1iv", &real_location, &type, &count)) { |
return; |
} |
- if (!current_program_->SetSamplers( |
+ if (!state_.current_program->SetSamplers( |
group_->max_texture_units(), fake_location, 1, &v0)) { |
SetGLError(GL_INVALID_VALUE, "glUniform1i", "texture unit out of range"); |
return; |
@@ -4982,7 +4868,7 @@ void GLES2DecoderImpl::DoUniform1iv( |
} |
if (type == GL_SAMPLER_2D || type == GL_SAMPLER_2D_RECT_ARB || |
type == GL_SAMPLER_CUBE || type == GL_SAMPLER_EXTERNAL_OES) { |
- if (!current_program_->SetSamplers( |
+ if (!state_.current_program->SetSamplers( |
group_->max_texture_units(), fake_location, count, value)) { |
SetGLError(GL_INVALID_VALUE, "glUniform1iv", "texture unit out of range"); |
return; |
@@ -5154,13 +5040,13 @@ void GLES2DecoderImpl::DoUseProgram(GLuint program) { |
} |
service_id = info->service_id(); |
} |
- if (current_program_) { |
- program_manager()->UnuseProgram(shader_manager(), current_program_); |
+ if (state_.current_program) { |
+ program_manager()->UnuseProgram(shader_manager(), state_.current_program); |
} |
- current_program_ = info; |
+ state_.current_program = info; |
glUseProgram(service_id); |
- if (current_program_) { |
- program_manager()->UseProgram(current_program_); |
+ if (state_.current_program) { |
+ program_manager()->UseProgram(state_.current_program); |
} |
} |
@@ -5249,7 +5135,6 @@ void GLES2DecoderImpl::ForceCompileShaderIfPending( |
ShaderManager::ShaderInfo* info) { |
if (info->compilation_status() == |
ShaderManager::ShaderInfo::PENDING_DEFERRED_COMPILE) { |
- |
ShaderTranslator* translator = NULL; |
if (use_shader_translator_) { |
translator = info->shader_type() == GL_VERTEX_SHADER ? |
@@ -5282,22 +5167,22 @@ void GLES2DecoderImpl::ClearRealGLErrors() { |
} |
bool GLES2DecoderImpl::SetBlackTextureForNonRenderableTextures() { |
- DCHECK(current_program_); |
+ DCHECK(state_.current_program); |
// Only check if there are some unrenderable textures. |
if (!texture_manager()->HaveUnrenderableTextures()) { |
return false; |
} |
bool textures_set = false; |
const ProgramManager::ProgramInfo::SamplerIndices& sampler_indices = |
- current_program_->sampler_indices(); |
+ state_.current_program->sampler_indices(); |
for (size_t ii = 0; ii < sampler_indices.size(); ++ii) { |
const ProgramManager::ProgramInfo::UniformInfo* uniform_info = |
- current_program_->GetUniformInfo(sampler_indices[ii]); |
+ state_.current_program->GetUniformInfo(sampler_indices[ii]); |
DCHECK(uniform_info); |
for (size_t jj = 0; jj < uniform_info->texture_units.size(); ++jj) { |
GLuint texture_unit_index = uniform_info->texture_units[jj]; |
if (texture_unit_index < group_->max_texture_units()) { |
- TextureUnit& texture_unit = texture_units_[texture_unit_index]; |
+ TextureUnit& texture_unit = state_.texture_units[texture_unit_index]; |
TextureManager::TextureInfo* texture_info = |
texture_unit.GetInfoForSamplerType(uniform_info->type); |
if (!texture_info || !texture_manager()->CanRender(texture_info)) { |
@@ -5321,17 +5206,17 @@ bool GLES2DecoderImpl::SetBlackTextureForNonRenderableTextures() { |
} |
void GLES2DecoderImpl::RestoreStateForNonRenderableTextures() { |
- DCHECK(current_program_); |
+ DCHECK(state_.current_program); |
const ProgramManager::ProgramInfo::SamplerIndices& sampler_indices = |
- current_program_->sampler_indices(); |
+ state_.current_program->sampler_indices(); |
for (size_t ii = 0; ii < sampler_indices.size(); ++ii) { |
const ProgramManager::ProgramInfo::UniformInfo* uniform_info = |
- current_program_->GetUniformInfo(sampler_indices[ii]); |
+ state_.current_program->GetUniformInfo(sampler_indices[ii]); |
DCHECK(uniform_info); |
for (size_t jj = 0; jj < uniform_info->texture_units.size(); ++jj) { |
GLuint texture_unit_index = uniform_info->texture_units[jj]; |
if (texture_unit_index < group_->max_texture_units()) { |
- TextureUnit& texture_unit = texture_units_[texture_unit_index]; |
+ TextureUnit& texture_unit = state_.texture_units[texture_unit_index]; |
TextureManager::TextureInfo* texture_info = |
uniform_info->type == GL_SAMPLER_2D ? |
texture_unit.bound_texture_2d : |
@@ -5349,7 +5234,7 @@ void GLES2DecoderImpl::RestoreStateForNonRenderableTextures() { |
} |
} |
// Set the active texture back to whatever the user had it as. |
- glActiveTexture(GL_TEXTURE0 + active_texture_unit_); |
+ glActiveTexture(GL_TEXTURE0 + state_.active_texture_unit); |
} |
bool GLES2DecoderImpl::ClearUnclearedTextures() { |
@@ -5359,17 +5244,17 @@ bool GLES2DecoderImpl::ClearUnclearedTextures() { |
} |
// 1: Check all textures we are about to render with. |
- if (current_program_) { |
+ if (state_.current_program) { |
const ProgramManager::ProgramInfo::SamplerIndices& sampler_indices = |
- current_program_->sampler_indices(); |
+ state_.current_program->sampler_indices(); |
for (size_t ii = 0; ii < sampler_indices.size(); ++ii) { |
const ProgramManager::ProgramInfo::UniformInfo* uniform_info = |
- current_program_->GetUniformInfo(sampler_indices[ii]); |
+ state_.current_program->GetUniformInfo(sampler_indices[ii]); |
DCHECK(uniform_info); |
for (size_t jj = 0; jj < uniform_info->texture_units.size(); ++jj) { |
GLuint texture_unit_index = uniform_info->texture_units[jj]; |
if (texture_unit_index < group_->max_texture_units()) { |
- TextureUnit& texture_unit = texture_units_[texture_unit_index]; |
+ TextureUnit& texture_unit = state_.texture_units[texture_unit_index]; |
TextureManager::TextureInfo* texture_info = |
texture_unit.GetInfoForSamplerType(uniform_info->type); |
if (texture_info && !texture_info->SafeToRenderFrom()) { |
@@ -5390,7 +5275,7 @@ bool GLES2DecoderImpl::IsDrawValid( |
// it could never be invalid since glUseProgram would have failed. While |
// glLinkProgram could later mark the program as invalid the previous |
// valid program will still function if it is still the current program. |
- if (!current_program_) { |
+ if (!state_.current_program) { |
// The program does not exist. |
// But GL says no ERROR. |
RenderWarning("Drawing with no current shader program."); |
@@ -5404,12 +5289,12 @@ bool GLES2DecoderImpl::IsDrawValid( |
// If they are not used by the current program check that they have a buffer |
// assigned. |
const VertexAttribManager::VertexAttribInfoList& infos = |
- vertex_attrib_manager_->GetEnabledVertexAttribInfos(); |
+ state_.vertex_attrib_manager->GetEnabledVertexAttribInfos(); |
for (VertexAttribManager::VertexAttribInfoList::const_iterator it = |
infos.begin(); it != infos.end(); ++it) { |
const VertexAttribManager::VertexAttribInfo* info = *it; |
const ProgramManager::ProgramInfo::VertexAttribInfo* attrib_info = |
- current_program_->GetAttribInfoByLocation(info->index()); |
+ state_.current_program->GetAttribInfoByLocation(info->index()); |
if (attrib_info) { |
divisor0 |= (info->divisor() == 0); |
GLuint count = info->MaxVertexAccessed(primcount, max_vertex_accessed); |
@@ -5456,9 +5341,10 @@ bool GLES2DecoderImpl::SimulateAttrib0( |
return true; |
const VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(0); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(0); |
// If it's enabled or it's not used then we don't need to do anything. |
- bool attrib_0_used = current_program_->GetAttribInfoByLocation(0) != NULL; |
+ bool attrib_0_used = |
+ state_.current_program->GetAttribInfoByLocation(0) != NULL; |
if (info->enabled() && attrib_0_used) { |
return true; |
} |
@@ -5518,7 +5404,7 @@ bool GLES2DecoderImpl::SimulateAttrib0( |
void GLES2DecoderImpl::RestoreStateForAttrib(GLuint attrib) { |
const VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(attrib); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(attrib); |
const void* ptr = reinterpret_cast<const void*>(info->offset()); |
BufferManager::BufferInfo* buffer_info = info->buffer(); |
glBindBuffer(GL_ARRAY_BUFFER, buffer_info ? buffer_info->service_id() : 0); |
@@ -5527,8 +5413,9 @@ void GLES2DecoderImpl::RestoreStateForAttrib(GLuint attrib) { |
ptr); |
if (info->divisor()) |
glVertexAttribDivisorANGLE(attrib, info->divisor()); |
- glBindBuffer(GL_ARRAY_BUFFER, |
- bound_array_buffer_ ? bound_array_buffer_->service_id() : 0); |
+ glBindBuffer( |
+ GL_ARRAY_BUFFER, |
+ state_.bound_array_buffer ? state_.bound_array_buffer->service_id() : 0); |
// Never touch vertex attribute 0's state (in particular, never |
// disable it) when running on desktop GL because it will never be |
@@ -5551,7 +5438,7 @@ bool GLES2DecoderImpl::SimulateFixedAttribs( |
if (gfx::GetGLImplementation() == gfx::kGLImplementationEGLGLES2) |
return true; |
- if (!vertex_attrib_manager_->HaveFixedAttribs()) { |
+ if (!state_.vertex_attrib_manager->HaveFixedAttribs()) { |
return true; |
} |
@@ -5566,12 +5453,12 @@ bool GLES2DecoderImpl::SimulateFixedAttribs( |
GLuint elements_needed = 0; |
const VertexAttribManager::VertexAttribInfoList& infos = |
- vertex_attrib_manager_->GetEnabledVertexAttribInfos(); |
+ state_.vertex_attrib_manager->GetEnabledVertexAttribInfos(); |
for (VertexAttribManager::VertexAttribInfoList::const_iterator it = |
infos.begin(); it != infos.end(); ++it) { |
const VertexAttribManager::VertexAttribInfo* info = *it; |
const ProgramManager::ProgramInfo::VertexAttribInfo* attrib_info = |
- current_program_->GetAttribInfoByLocation(info->index()); |
+ state_.current_program->GetAttribInfoByLocation(info->index()); |
GLuint max_accessed = info->MaxVertexAccessed(primcount, |
max_vertex_accessed); |
GLuint num_vertices = max_accessed + 1; |
@@ -5619,7 +5506,7 @@ bool GLES2DecoderImpl::SimulateFixedAttribs( |
infos.begin(); it != infos.end(); ++it) { |
const VertexAttribManager::VertexAttribInfo* info = *it; |
const ProgramManager::ProgramInfo::VertexAttribInfo* attrib_info = |
- current_program_->GetAttribInfoByLocation(info->index()); |
+ state_.current_program->GetAttribInfoByLocation(info->index()); |
GLuint max_accessed = info->MaxVertexAccessed(primcount, |
max_vertex_accessed); |
GLuint num_vertices = max_accessed + 1; |
@@ -5654,8 +5541,9 @@ bool GLES2DecoderImpl::SimulateFixedAttribs( |
void GLES2DecoderImpl::RestoreStateForSimulatedFixedAttribs() { |
// There's no need to call glVertexAttribPointer because we shadow all the |
// settings and passing GL_FIXED to it will not work. |
- glBindBuffer(GL_ARRAY_BUFFER, |
- bound_array_buffer_ ? bound_array_buffer_->service_id() : 0); |
+ glBindBuffer( |
+ GL_ARRAY_BUFFER, |
+ state_.bound_array_buffer ? state_.bound_array_buffer->service_id() : 0); |
} |
error::Error GLES2DecoderImpl::DoDrawArrays( |
@@ -5770,7 +5658,7 @@ error::Error GLES2DecoderImpl::DoDrawElements( |
GLsizei primcount) { |
if (ShouldDeferDraws()) |
return error::kDeferCommandUntilLater; |
- if (!vertex_attrib_manager_->element_array_buffer()) { |
+ if (!state_.vertex_attrib_manager->element_array_buffer()) { |
SetGLError(GL_INVALID_OPERATION, |
function_name, "No element array buffer bound"); |
return error::kNoError; |
@@ -5806,8 +5694,8 @@ error::Error GLES2DecoderImpl::DoDrawElements( |
} |
GLuint max_vertex_accessed; |
- if (!vertex_attrib_manager_->element_array_buffer()->GetMaxValueForRange( |
- offset, count, type, &max_vertex_accessed)) { |
+ if (!state_.vertex_attrib_manager->element_array_buffer( |
+ )->GetMaxValueForRange(offset, count, type, &max_vertex_accessed)) { |
SetGLError(GL_INVALID_OPERATION, |
function_name, "range out of bounds for buffer"); |
return error::kNoError; |
@@ -6149,7 +6037,7 @@ void GLES2DecoderImpl::DoValidateProgram(GLuint program_client_id) { |
void GLES2DecoderImpl::DoGetVertexAttribfv( |
GLuint index, GLenum pname, GLfloat* params) { |
VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(index); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(index); |
if (!info) { |
SetGLError(GL_INVALID_VALUE, "glGetVertexAttribfv", "index out of range"); |
return; |
@@ -6197,7 +6085,7 @@ void GLES2DecoderImpl::DoGetVertexAttribfv( |
void GLES2DecoderImpl::DoGetVertexAttribiv( |
GLuint index, GLenum pname, GLint* params) { |
VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(index); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(index); |
if (!info) { |
SetGLError(GL_INVALID_VALUE, "glGetVertexAttribiv", "index out of range"); |
return; |
@@ -6244,7 +6132,7 @@ void GLES2DecoderImpl::DoGetVertexAttribiv( |
void GLES2DecoderImpl::DoVertexAttrib1f(GLuint index, GLfloat v0) { |
VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(index); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(index); |
if (!info) { |
SetGLError(GL_INVALID_VALUE, "glVertexAttrib1f", "index out of range"); |
return; |
@@ -6260,7 +6148,7 @@ void GLES2DecoderImpl::DoVertexAttrib1f(GLuint index, GLfloat v0) { |
void GLES2DecoderImpl::DoVertexAttrib2f(GLuint index, GLfloat v0, GLfloat v1) { |
VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(index); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(index); |
if (!info) { |
SetGLError(GL_INVALID_VALUE, "glVertexAttrib2f", "index out of range"); |
return; |
@@ -6277,7 +6165,7 @@ void GLES2DecoderImpl::DoVertexAttrib2f(GLuint index, GLfloat v0, GLfloat v1) { |
void GLES2DecoderImpl::DoVertexAttrib3f( |
GLuint index, GLfloat v0, GLfloat v1, GLfloat v2) { |
VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(index); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(index); |
if (!info) { |
SetGLError(GL_INVALID_VALUE, "glVertexAttrib3f", "index out of range"); |
return; |
@@ -6294,7 +6182,7 @@ void GLES2DecoderImpl::DoVertexAttrib3f( |
void GLES2DecoderImpl::DoVertexAttrib4f( |
GLuint index, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3) { |
VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(index); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(index); |
if (!info) { |
SetGLError(GL_INVALID_VALUE, "glVertexAttrib4f", "index out of range"); |
return; |
@@ -6310,7 +6198,7 @@ void GLES2DecoderImpl::DoVertexAttrib4f( |
void GLES2DecoderImpl::DoVertexAttrib1fv(GLuint index, const GLfloat* v) { |
VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(index); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(index); |
if (!info) { |
SetGLError(GL_INVALID_VALUE, "glVertexAttrib1fv", "index out of range"); |
return; |
@@ -6326,7 +6214,7 @@ void GLES2DecoderImpl::DoVertexAttrib1fv(GLuint index, const GLfloat* v) { |
void GLES2DecoderImpl::DoVertexAttrib2fv(GLuint index, const GLfloat* v) { |
VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(index); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(index); |
if (!info) { |
SetGLError(GL_INVALID_VALUE, "glVertexAttrib2fv", "index out of range"); |
return; |
@@ -6342,7 +6230,7 @@ void GLES2DecoderImpl::DoVertexAttrib2fv(GLuint index, const GLfloat* v) { |
void GLES2DecoderImpl::DoVertexAttrib3fv(GLuint index, const GLfloat* v) { |
VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(index); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(index); |
if (!info) { |
SetGLError(GL_INVALID_VALUE, "glVertexAttrib3fv", "index out of range"); |
return; |
@@ -6358,7 +6246,7 @@ void GLES2DecoderImpl::DoVertexAttrib3fv(GLuint index, const GLfloat* v) { |
void GLES2DecoderImpl::DoVertexAttrib4fv(GLuint index, const GLfloat* v) { |
VertexAttribManager::VertexAttribInfo* info = |
- vertex_attrib_manager_->GetVertexAttribInfo(index); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(index); |
if (!info) { |
SetGLError(GL_INVALID_VALUE, "glVertexAttrib4fv", "index out of range"); |
return; |
@@ -6375,8 +6263,8 @@ void GLES2DecoderImpl::DoVertexAttrib4fv(GLuint index, const GLfloat* v) { |
error::Error GLES2DecoderImpl::HandleVertexAttribPointer( |
uint32 immediate_data_size, const gles2::VertexAttribPointer& c) { |
- if (!bound_array_buffer_ || bound_array_buffer_->IsDeleted()) { |
- if (vertex_attrib_manager_ == default_vertex_attrib_manager_) { |
+ if (!state_.bound_array_buffer || state_.bound_array_buffer->IsDeleted()) { |
+ if (state_.vertex_attrib_manager == default_vertex_attrib_manager_) { |
SetGLError(GL_INVALID_VALUE, |
"glVertexAttribPointer", "no array buffer bound"); |
return error::kNoError; |
@@ -6434,9 +6322,9 @@ error::Error GLES2DecoderImpl::HandleVertexAttribPointer( |
"glVertexAttribPointer", "stride not valid for type"); |
return error::kNoError; |
} |
- vertex_attrib_manager_->SetAttribInfo( |
+ state_.vertex_attrib_manager->SetAttribInfo( |
indx, |
- bound_array_buffer_, |
+ state_.bound_array_buffer, |
size, |
type, |
normalized, |
@@ -6451,10 +6339,10 @@ error::Error GLES2DecoderImpl::HandleVertexAttribPointer( |
void GLES2DecoderImpl::DoViewport(GLint x, GLint y, GLsizei width, |
GLsizei height) { |
- viewport_x_ = x; |
- viewport_y_ = y; |
- viewport_width_ = std::min(width, viewport_max_width_); |
- viewport_height_ = std::min(height, viewport_max_height_); |
+ state_.viewport_x = x; |
+ state_.viewport_y = y; |
+ state_.viewport_width = std::min(width, state_.viewport_max_width); |
+ state_.viewport_height = std::min(height, state_.viewport_max_height); |
glViewport(x, y, width, height); |
} |
@@ -6472,7 +6360,7 @@ error::Error GLES2DecoderImpl::HandleVertexAttribDivisorANGLE( |
return error::kNoError; |
} |
- vertex_attrib_manager_->SetDivisor( |
+ state_.vertex_attrib_manager->SetDivisor( |
index, |
divisor); |
glVertexAttribDivisorANGLE(index, divisor); |
@@ -6494,7 +6382,8 @@ error::Error GLES2DecoderImpl::HandleReadPixels( |
typedef gles2::ReadPixels::Result Result; |
uint32 pixels_size; |
if (!GLES2Util::ComputeImageDataSizes( |
- width, height, format, type, pack_alignment_, &pixels_size, NULL, NULL)) { |
+ width, height, format, type, state_.pack_alignment, &pixels_size, |
+ NULL, NULL)) { |
return error::kOutOfBounds; |
} |
void* pixels = GetSharedMemoryAs<void*>( |
@@ -6542,7 +6431,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels( |
uint32 unpadded_row_size; |
uint32 padded_row_size; |
if (!GLES2Util::ComputeImageDataSizes( |
- width, 2, format, type, pack_alignment_, &temp_size, |
+ width, 2, format, type, state_.pack_alignment, &temp_size, |
&unpadded_row_size, &padded_row_size)) { |
SetGLError(GL_INVALID_VALUE, "glReadPixels", "dimensions out of range"); |
return error::kNoError; |
@@ -6551,8 +6440,8 @@ error::Error GLES2DecoderImpl::HandleReadPixels( |
GLint dest_x_offset = std::max(-x, 0); |
uint32 dest_row_offset; |
if (!GLES2Util::ComputeImageDataSizes( |
- dest_x_offset, 1, format, type, pack_alignment_, &dest_row_offset, NULL, |
- NULL)) { |
+ dest_x_offset, 1, format, type, state_.pack_alignment, &dest_row_offset, |
+ NULL, NULL)) { |
SetGLError(GL_INVALID_VALUE, "glReadPixels", "dimensions out of range"); |
return error::kNoError; |
} |
@@ -6592,7 +6481,7 @@ error::Error GLES2DecoderImpl::HandleReadPixels( |
uint32 unpadded_row_size; |
uint32 padded_row_size; |
if (!GLES2Util::ComputeImageDataSizes( |
- width, 2, format, type, pack_alignment_, &temp_size, |
+ width, 2, format, type, state_.pack_alignment, &temp_size, |
&unpadded_row_size, &padded_row_size)) { |
SetGLError(GL_INVALID_VALUE, "glReadPixels", "dimensions out of range"); |
return error::kNoError; |
@@ -6662,12 +6551,12 @@ error::Error GLES2DecoderImpl::HandlePixelStorei( |
glPixelStorei(pname, param); |
switch (pname) { |
case GL_PACK_ALIGNMENT: |
- pack_alignment_ = param; |
+ state_.pack_alignment = param; |
break; |
case GL_PACK_REVERSE_ROW_ORDER_ANGLE: |
break; |
case GL_UNPACK_ALIGNMENT: |
- unpack_alignment_ = param; |
+ state_.unpack_alignment = param; |
break; |
default: |
// Validation should have prevented us from getting here. |
@@ -7025,7 +6914,7 @@ bool GLES2DecoderImpl::ClearLevel( |
uint32 size; |
uint32 padded_row_size; |
if (!GLES2Util::ComputeImageDataSizes( |
- width, height, format, type, unpack_alignment_, &size, |
+ width, height, format, type, state_.unpack_alignment, &size, |
NULL, &padded_row_size)) { |
return false; |
} |
@@ -7043,8 +6932,8 @@ bool GLES2DecoderImpl::ClearLevel( |
DCHECK_GT(padded_row_size, 0U); |
tile_height = kMaxZeroSize / padded_row_size; |
if (!GLES2Util::ComputeImageDataSizes( |
- width, tile_height, format, type, unpack_alignment_, &size, NULL, |
- NULL)) { |
+ width, tile_height, format, type, state_.unpack_alignment, &size, |
+ NULL, NULL)) { |
return false; |
} |
} else { |
@@ -7541,7 +7430,7 @@ error::Error GLES2DecoderImpl::HandleTexImage2D( |
uint32 pixels_shm_offset = static_cast<uint32>(c.pixels_shm_offset); |
uint32 pixels_size; |
if (!GLES2Util::ComputeImageDataSizes( |
- width, height, format, type, unpack_alignment_, &pixels_size, NULL, |
+ width, height, format, type, state_.unpack_alignment, &pixels_size, NULL, |
NULL)) { |
return error::kOutOfBounds; |
} |
@@ -7570,7 +7459,8 @@ error::Error GLES2DecoderImpl::HandleTexImage2DImmediate( |
GLenum type = static_cast<GLenum>(c.type); |
uint32 size; |
if (!GLES2Util::ComputeImageDataSizes( |
- width, height, format, type, unpack_alignment_, &size, NULL, NULL)) { |
+ width, height, format, type, state_.unpack_alignment, &size, |
+ NULL, NULL)) { |
return error::kOutOfBounds; |
} |
const void* pixels = GetImmediateDataAs<const void*>( |
@@ -7826,8 +7716,8 @@ void GLES2DecoderImpl::DoCopyTexSubImage2D( |
// some part was clipped so clear the sub rect. |
uint32 pixels_size = 0; |
if (!GLES2Util::ComputeImageDataSizes( |
- width, height, format, type, unpack_alignment_, &pixels_size, NULL, |
- NULL)) { |
+ width, height, format, type, state_.unpack_alignment, &pixels_size, |
+ NULL, NULL)) { |
SetGLError( |
GL_INVALID_VALUE, "glCopyTexSubImage2D", "dimensions too large"); |
return; |
@@ -7945,7 +7835,8 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2D( |
GLenum type = static_cast<GLenum>(c.type); |
uint32 data_size; |
if (!GLES2Util::ComputeImageDataSizes( |
- width, height, format, type, unpack_alignment_, &data_size, NULL, NULL)) { |
+ width, height, format, type, state_.unpack_alignment, &data_size, |
+ NULL, NULL)) { |
return error::kOutOfBounds; |
} |
const void* pixels = GetSharedMemoryAs<const void*>( |
@@ -7994,7 +7885,8 @@ error::Error GLES2DecoderImpl::HandleTexSubImage2DImmediate( |
GLenum type = static_cast<GLenum>(c.type); |
uint32 data_size; |
if (!GLES2Util::ComputeImageDataSizes( |
- width, height, format, type, unpack_alignment_, &data_size, NULL, NULL)) { |
+ width, height, format, type, state_.unpack_alignment, &data_size, |
+ NULL, NULL)) { |
return error::kOutOfBounds; |
} |
const void* pixels = GetImmediateDataAs<const void*>( |
@@ -8052,7 +7944,7 @@ error::Error GLES2DecoderImpl::HandleGetVertexAttribPointerv( |
} |
result->SetNumResults(1); |
*result->GetData() = |
- vertex_attrib_manager_->GetVertexAttribInfo(index)->offset(); |
+ state_.vertex_attrib_manager->GetVertexAttribInfo(index)->offset(); |
return error::kNoError; |
} |
@@ -8704,8 +8596,8 @@ void GLES2DecoderImpl::DeleteQueriesEXTHelper( |
for (GLsizei ii = 0; ii < n; ++ii) { |
QueryManager::Query* query = query_manager_->GetQuery(client_ids[ii]); |
if (query && !query->IsDeleted()) { |
- if (query == current_query_) { |
- current_query_ = NULL; |
+ if (query == state_.current_query) { |
+ state_.current_query = NULL; |
} |
query->Destroy(true); |
query_manager_->RemoveQuery(client_ids[ii]); |
@@ -8741,7 +8633,7 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT( |
break; |
} |
- if (current_query_) { |
+ if (state_.current_query) { |
SetGLError( |
GL_INVALID_OPERATION, "glBeginQueryEXT", "query already in progress"); |
return error::kNoError; |
@@ -8789,7 +8681,7 @@ error::Error GLES2DecoderImpl::HandleBeginQueryEXT( |
return error::kOutOfBounds; |
} |
- current_query_ = query; |
+ state_.current_query = query; |
return error::kNoError; |
} |
@@ -8798,21 +8690,21 @@ error::Error GLES2DecoderImpl::HandleEndQueryEXT( |
GLenum target = static_cast<GLenum>(c.target); |
uint32 submit_count = static_cast<GLuint>(c.submit_count); |
- if (!current_query_) { |
+ if (!state_.current_query) { |
SetGLError(GL_INVALID_OPERATION, "glEndQueryEXT", "No active query"); |
return error::kNoError; |
} |
- if (current_query_->target() != target) { |
+ if (state_.current_query->target() != target) { |
SetGLError(GL_INVALID_OPERATION, |
"glEndQueryEXT", "target does not match active query"); |
return error::kNoError; |
} |
- if (!query_manager_->EndQuery(current_query_, submit_count)) { |
+ if (!query_manager_->EndQuery(state_.current_query, submit_count)) { |
return error::kOutOfBounds; |
} |
- current_query_ = NULL; |
+ state_.current_query = NULL; |
return error::kNoError; |
} |
@@ -8847,8 +8739,8 @@ void GLES2DecoderImpl::DeleteVertexArraysOESHelper( |
VertexAttribManager* vao = |
GetVertexAttribManager(client_ids[ii]); |
if (vao && !vao->IsDeleted()) { |
- if (vertex_attrib_manager_ == vao) { |
- vertex_attrib_manager_ = default_vertex_attrib_manager_; |
+ if (state_.vertex_attrib_manager == vao) { |
+ state_.vertex_attrib_manager = default_vertex_attrib_manager_; |
} |
RemoveVertexAttribManager(client_ids[ii]); |
} |
@@ -8877,8 +8769,8 @@ void GLES2DecoderImpl::DoBindVertexArrayOES(GLuint client_id) { |
} |
// Only set the VAO state if it's changed |
- if (vertex_attrib_manager_ != vao) { |
- vertex_attrib_manager_ = vao; |
+ if (state_.vertex_attrib_manager != vao) { |
+ state_.vertex_attrib_manager = vao; |
if (!feature_info_->feature_flags().native_vertex_array_object_) { |
EmulateVertexArrayState(); |
} else { |
@@ -8896,7 +8788,7 @@ void GLES2DecoderImpl::EmulateVertexArrayState() { |
// Setup the element buffer |
BufferManager::BufferInfo* element_array_buffer = |
- vertex_attrib_manager_->element_array_buffer(); |
+ state_.vertex_attrib_manager->element_array_buffer(); |
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, |
element_array_buffer ? element_array_buffer->service_id() : 0); |
} |
@@ -9235,11 +9127,13 @@ void GLES2DecoderImpl::DoCopyTextureCHROMIUM( |
unpack_flip_y_, |
unpack_premultiply_alpha_, |
unpack_unpremultiply_alpha_); |
- glViewport(viewport_x_, viewport_y_, viewport_width_, viewport_height_); |
+ glViewport( |
+ state_.viewport_x, state_.viewport_y, |
+ state_.viewport_width, state_.viewport_height); |
// Restore all of the state touched by the extension. |
- if (current_program_) |
- glUseProgram(current_program_->service_id()); |
+ if (state_.current_program) |
+ glUseProgram(state_.current_program->service_id()); |
else |
glUseProgram(0); |